From e359d7db1f89f43f75bcd65d0cef204aa3e1c0a3 Mon Sep 17 00:00:00 2001 From: Yuriy Vidineev Date: Wed, 1 Jul 2020 22:51:19 -0700 Subject: [PATCH 1/5] remove some commented out linus from rules that looks outdated --- debian/rules | 7 ------- 1 file changed, 7 deletions(-) diff --git a/debian/rules b/debian/rules index 08caccf..e1f756f 100755 --- a/debian/rules +++ b/debian/rules @@ -48,13 +48,6 @@ override_dh_auto_install: install -p -D -m 0755 scripts/rabbitmq-server-ha.ocf \ $(DEB_DESTDIR)$(PREFIX)/lib/ocf/resource.d/rabbitmq/rabbitmq-server-ha - # Unlocalify -# mkdir -p $(DEB_DESTDIR)$(PREFIX)/lib/rabbitmq/bin -# mv $(DEB_DESTDIR)$(PREFIX)/local/lib/erlang/bin/* $(DEB_DESTDIR)$(PREFIX)/lib/rabbitmq/bin -# mkdir -p $(DEB_DESTDIR)$(PREFIX)/sbin -# mv $(DEB_DESTDIR)$(PREFIX)/local/lib/erlang/lib/rabbitmq_server-3.6.5/sbin/* $(DEB_DESTDIR)$(PREFIX)/sbin -# rm -rf $(DEB_DESTDIR)$(PREFIX)/local - # Remove extra license files rm -f $(DEB_DESTDIR)$(PREFIX)/lib/erlang/lib/rabbitmq_server-*/LICENSE rm -f $(RABBIT_LIB)/LICENSE* $(RABBIT_LIB)/INSTALL* -- GitLab From 863e2f7730b9d9e271c255f231c3f6550f2eca22 Mon Sep 17 00:00:00 2001 From: Yuriy Vidineev Date: Wed, 1 Jul 2020 23:02:14 -0700 Subject: [PATCH 2/5] Updating standards version to 4.3.0 --- debian/changelog | 7 +++++++ debian/control | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 8775a48..7918eb9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +rabbitmq-server (3.8.3-2) unstable; urgency=low + + * Updating standards version to 4.3.0. + * d/rules: remove some obsolete comments. + + -- Yury Vidineev Wed, 01 Jul 2020 22:54:54 -0700 + rabbitmq-server (3.8.3-1) unstable; urgency=medium [ Ondřej Nový ] diff --git a/debian/control b/debian/control index 80f9e8b..e2d733e 100644 --- a/debian/control +++ b/debian/control @@ -36,7 +36,7 @@ Build-Depends: xmlto, xsltproc, zip, -Standards-Version: 4.2.1 +Standards-Version: 4.3.0 Vcs-Browser: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server Vcs-Git: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server.git Homepage: https://www.rabbitmq.com/ -- GitLab From 72b72641274200e2d3cbf65d1c37a1b6b1039b0f Mon Sep 17 00:00:00 2001 From: Yuriy Vidineev Date: Fri, 3 Jul 2020 00:59:19 -0700 Subject: [PATCH 3/5] standards - 4.4.0 --- debian/changelog | 2 +- debian/control | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7918eb9..8dea2c8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ rabbitmq-server (3.8.3-2) unstable; urgency=low - * Updating standards version to 4.3.0. + * Updating standards version to 4.4.0. * d/rules: remove some obsolete comments. -- Yury Vidineev Wed, 01 Jul 2020 22:54:54 -0700 diff --git a/debian/control b/debian/control index e2d733e..09affd6 100644 --- a/debian/control +++ b/debian/control @@ -36,7 +36,7 @@ Build-Depends: xmlto, xsltproc, zip, -Standards-Version: 4.3.0 +Standards-Version: 4.4.0 Vcs-Browser: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server Vcs-Git: https://salsa.debian.org/openstack-team/third-party/rabbitmq-server.git Homepage: https://www.rabbitmq.com/ -- GitLab From ddf4fb20c7bb61265d8fb6e06cfbc4f9eb1839eb Mon Sep 17 00:00:00 2001 From: Yuriy Vidineev Date: Tue, 14 Jul 2020 02:03:50 -0700 Subject: [PATCH 4/5] rabbitmq-server 3.8.4 --- Makefile | 31 +- debian/changelog | 5 +- .../lets-use-python3-not-python-binary.patch | 48 +- deps/.hex/cache.erl | 2058 +- .../hex-0.20.5/ebin/Elixir.Hex.API.beam | Bin 3980 -> 3980 bytes .../hex-0.20.5/ebin/Elixir.Hex.Config.beam | Bin 3660 -> 3660 bytes .../Elixir.Hex.Crypto.AES_CBC_HMAC_SHA2.beam | Bin 4084 -> 4084 bytes .../ebin/Elixir.Hex.Crypto.AES_GCM.beam | Bin 2308 -> 2308 bytes .../Elixir.Hex.Crypto.ContentEncryptor.beam | Bin 2884 -> 2884 bytes .../ebin/Elixir.Hex.Crypto.KeyManager.beam | Bin 2536 -> 2536 bytes .../Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam | Bin 2884 -> 2884 bytes .../hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam | Bin 3632 -> 3632 bytes .../ebin/Elixir.Hex.HTTP.VerifyHostname.beam | Bin 4520 -> 4520 bytes .../hex-0.20.5/ebin/Elixir.Hex.HTTP.beam | Bin 7260 -> 7260 bytes .../hex-0.20.5/ebin/Elixir.Hex.Mix.beam | Bin 10312 -> 10312 bytes .../hex-0.20.5/ebin/Elixir.Hex.Parallel.beam | Bin 7056 -> 7056 bytes .../ebin/Elixir.Hex.Registry.Server.beam | Bin 15240 -> 15240 bytes .../hex-0.20.5/ebin/Elixir.Hex.Registry.beam | Bin 1072 -> 1072 bytes .../ebin/Elixir.Hex.RemoteConverger.beam | Bin 18444 -> 18444 bytes .../hex-0.20.5/ebin/Elixir.Hex.Repo.beam | Bin 10928 -> 10928 bytes .../ebin/Elixir.Hex.Resolver.Backtracks.beam | Bin 9524 -> 9524 bytes .../hex-0.20.5/ebin/Elixir.Hex.Resolver.beam | Bin 11044 -> 11044 bytes .../hex-0.20.5/ebin/Elixir.Hex.SCM.beam | Bin 13944 -> 13944 bytes .../hex-0.20.5/ebin/Elixir.Hex.Server.beam | Bin 3236 -> 3236 bytes .../ebin/Elixir.Hex.Shell.Process.beam | Bin 2956 -> 2956 bytes .../hex-0.20.5/ebin/Elixir.Hex.Shell.beam | Bin 3804 -> 3804 bytes .../hex-0.20.5/ebin/Elixir.Hex.State.beam | Bin 8300 -> 8300 bytes .../ebin/Elixir.Hex.UpdateChecker.beam | Bin 4696 -> 4696 bytes .../hex-0.20.5/ebin/Elixir.Hex.Utils.beam | Bin 9812 -> 9812 bytes .../hex-0.20.5/ebin/Elixir.Hex.Version.beam | Bin 6132 -> 6132 bytes .../hex-0.20.5/ebin/Elixir.Hex.beam | Bin 5568 -> 5568 bytes .../ebin/Elixir.Mix.Tasks.Hex.Build.beam | Bin 16620 -> 16620 bytes .../ebin/Elixir.Mix.Tasks.Hex.Config.beam | Bin 6408 -> 6408 bytes .../ebin/Elixir.Mix.Tasks.Hex.Docs.beam | Bin 10500 -> 10504 bytes .../ebin/Elixir.Mix.Tasks.Hex.Info.beam | Bin 9748 -> 9748 bytes .../ebin/Elixir.Mix.Tasks.Hex.Install.beam | Bin 4524 -> 4524 bytes .../Elixir.Mix.Tasks.Hex.Organization.beam | Bin 6216 -> 6216 bytes .../ebin/Elixir.Mix.Tasks.Hex.Outdated.beam | Bin 7064 -> 7064 bytes .../ebin/Elixir.Mix.Tasks.Hex.Owner.beam | Bin 5040 -> 5036 bytes .../ebin/Elixir.Mix.Tasks.Hex.Package.beam | Bin 6992 -> 6992 bytes .../ebin/Elixir.Mix.Tasks.Hex.Publish.beam | Bin 14384 -> 14384 bytes .../ebin/Elixir.Mix.Tasks.Hex.Repo.beam | Bin 5304 -> 5304 bytes .../ebin/Elixir.Mix.Tasks.Hex.Retire.beam | Bin 3440 -> 3440 bytes .../ebin/Elixir.Mix.Tasks.Hex.Search.beam | Bin 3808 -> 3808 bytes .../ebin/Elixir.Mix.Tasks.Hex.User.beam | Bin 7392 -> 7392 bytes .../hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.beam | Bin 12824 -> 12824 bytes deps/amqp10_client/rabbitmq-components.mk | 4 +- .../src/amqp10_client_connection.erl | 4 +- deps/amqp10_client/src/amqp10_msg.erl | 8 +- deps/amqp10_common/rabbitmq-components.mk | 4 +- deps/amqp_client/rabbitmq-components.mk | 4 +- .../src/amqp_direct_connection.erl | 9 +- deps/amqp_client/src/amqp_ssl.erl | 12 +- deps/credentials_obfuscation/README.md | 19 + .../include/credentials_obfuscation.hrl | 1 + .../src/credentials_obfuscation.app.src | 4 +- .../src/credentials_obfuscation.erl | 66 +- .../src/credentials_obfuscation_app.erl | 46 +- .../src/credentials_obfuscation_pbe.erl | 41 +- .../src/credentials_obfuscation_sup.erl | 49 + .../src/credentials_obfuscation_svc.erl | 160 + deps/cuttlefish/Makefile | 26 + deps/cuttlefish/README.md | 104 + deps/cuttlefish/priv/erlang_vm.schema | 351 + deps/cuttlefish/rebar.config | 23 + deps/cuttlefish/rebar.config.script | 15 + deps/cuttlefish/rebar.lock | 10 + deps/cuttlefish/src/conf_parse.erl | 435 + deps/cuttlefish/src/conf_parse.peg | 165 + deps/cuttlefish/src/cuttlefish.app.src | 9 + deps/cuttlefish/src/cuttlefish.erl | 148 + deps/cuttlefish/src/cuttlefish_advanced.erl | 75 + deps/cuttlefish/src/cuttlefish_bytesize.erl | 97 + deps/cuttlefish/src/cuttlefish_conf.erl | 354 + deps/cuttlefish/src/cuttlefish_datatypes.erl | 518 + deps/cuttlefish/src/cuttlefish_duration.erl | 170 + deps/cuttlefish/src/cuttlefish_duration.hrl | 16 + .../src/cuttlefish_duration_parse.erl | 343 + .../src/cuttlefish_duration_parse.peg | 51 + deps/cuttlefish/src/cuttlefish_effective.erl | 282 + deps/cuttlefish/src/cuttlefish_enum.erl | 162 + deps/cuttlefish/src/cuttlefish_error.erl | 219 + deps/cuttlefish/src/cuttlefish_escript.erl | 534 + deps/cuttlefish/src/cuttlefish_flag.erl | 93 + deps/cuttlefish/src/cuttlefish_generator.erl | 1218 + deps/cuttlefish/src/cuttlefish_mapping.erl | 544 + .../src/cuttlefish_rebar_plugin.erl | 95 + deps/cuttlefish/src/cuttlefish_schema.erl | 506 + .../cuttlefish/src/cuttlefish_translation.erl | 227 + deps/cuttlefish/src/cuttlefish_unit.erl | 209 + deps/cuttlefish/src/cuttlefish_util.erl | 191 + deps/cuttlefish/src/cuttlefish_validator.erl | 203 + deps/cuttlefish/src/cuttlefish_variable.erl | 272 + deps/cuttlefish/src/cuttlefish_vmargs.erl | 57 + deps/cuttlefish/src/lager_stderr_backend.erl | 351 + deps/eetcd/LICENSE | 191 + deps/eetcd/Makefile | 24 + deps/eetcd/README.md | 284 + deps/eetcd/include/eetcd.hrl | 37 + deps/eetcd/priv/protos/auth.proto | 42 + deps/eetcd/priv/protos/gogo.proto | 125 + deps/eetcd/priv/protos/kv.proto | 49 + deps/eetcd/priv/protos/router.proto | 1147 + deps/eetcd/rebar.config | 30 + deps/eetcd/rebar.lock | 8 + deps/eetcd/src/clients/eetcd_auth_gen.erl | 124 + deps/eetcd/src/clients/eetcd_cluster_gen.erl | 47 + deps/eetcd/src/clients/eetcd_election_gen.erl | 47 + deps/eetcd/src/clients/eetcd_health_gen.erl | 26 + deps/eetcd/src/clients/eetcd_kv_gen.erl | 47 + deps/eetcd/src/clients/eetcd_lease_gen.erl | 47 + deps/eetcd/src/clients/eetcd_lock_gen.erl | 26 + .../src/clients/eetcd_maintenance_gen.erl | 61 + deps/eetcd/src/clients/eetcd_watch_gen.erl | 19 + deps/eetcd/src/eetcd.app.src | 10 + deps/eetcd/src/eetcd.erl | 119 + deps/eetcd/src/eetcd_app.erl | 13 + deps/eetcd/src/eetcd_auth.erl | 361 + deps/eetcd/src/eetcd_cluster.erl | 151 + deps/eetcd/src/eetcd_compare.erl | 60 + deps/eetcd/src/eetcd_conn.erl | 462 + deps/eetcd/src/eetcd_conn_sup.erl | 44 + deps/eetcd/src/eetcd_data_coercion.erl | 17 + deps/eetcd/src/eetcd_election.erl | 308 + deps/eetcd/src/eetcd_grpc.erl | 58 + deps/eetcd/src/eetcd_kv.erl | 368 + deps/eetcd/src/eetcd_lease.erl | 278 + deps/eetcd/src/eetcd_lease_sup.erl | 38 + deps/eetcd/src/eetcd_lock.erl | 60 + deps/eetcd/src/eetcd_maintenance.erl | 97 + deps/eetcd/src/eetcd_op.erl | 14 + deps/eetcd/src/eetcd_stream.erl | 152 + deps/eetcd/src/eetcd_sup.erl | 47 + deps/eetcd/src/eetcd_watch.erl | 259 + deps/eetcd/src/protos/auth_pb.erl | 29983 +++++++ deps/eetcd/src/protos/gogo_pb.erl | 28734 +++++++ deps/eetcd/src/protos/health_pb.erl | 1143 + deps/eetcd/src/protos/kv_pb.erl | 29658 +++++++ deps/eetcd/src/protos/router_pb.erl | 64412 ++++++++++++++++ deps/getopt/LICENSE.txt | 27 + deps/getopt/Makefile | 22 + deps/getopt/README.md | 487 + deps/getopt/rebar.config | 30 + deps/getopt/rebar.lock | 1 + deps/getopt/src/getopt.app.src | 9 + deps/getopt/src/getopt.erl | 947 + deps/gun/LICENSE | 13 + deps/gun/Makefile | 58 + deps/gun/README.asciidoc | 42 + deps/gun/erlang.mk | 7287 ++ deps/gun/rebar.config | 4 + deps/gun/src/gun.app.src | 8 + deps/gun/src/gun.erl | 980 + deps/gun/src/gun_app.erl | 29 + deps/gun/src/gun_content_handler.erl | 69 + deps/gun/src/gun_data_h.erl | 33 + deps/gun/src/gun_http.erl | 672 + deps/gun/src/gun_http2.erl | 707 + deps/gun/src/gun_sse_h.erl | 55 + deps/gun/src/gun_sup.erl | 38 + deps/gun/src/gun_tcp.erl | 52 + deps/gun/src/gun_tls.erl | 58 + deps/gun/src/gun_ws.erl | 157 + deps/gun/src/gun_ws_h.erl | 38 + deps/jose/Makefile | 2 +- deps/observer_cli/Makefile | 2 +- deps/prometheus/README.md | 2 +- deps/prometheus/mix.exs | 2 +- .../vm/prometheus_vm_dist_collector.erl | 31 +- .../prometheus_vm_system_info_collector.erl | 34 +- deps/prometheus/src/prometheus.app.src | 2 +- deps/ra/LICENSE-APACHE2 | 2 +- deps/ra/LICENSE-MPL-RabbitMQ | 4 +- deps/ra/Makefile | 4 +- deps/ra/README.md | 129 +- deps/ra/src/ra.app.src | 2 +- deps/ra/src/ra.erl | 56 +- deps/ra/src/ra.hrl | 9 +- deps/ra/src/ra_bench.erl | 2 +- deps/ra/src/ra_lib.erl | 73 +- deps/ra/src/ra_log_segment.erl | 286 +- deps/ra/src/ra_log_segment_writer.erl | 37 +- deps/ra/src/ra_log_wal.erl | 137 +- deps/ra/src/ra_log_wal_sup.erl | 5 +- deps/ra/src/ra_monitors.erl | 7 +- deps/ra/src/ra_server.erl | 385 +- deps/ra/src/ra_server.hrl | 19 + deps/ra/src/ra_server_proc.erl | 37 +- deps/rabbit/Makefile | 33 +- deps/rabbit/README.md | 7 +- deps/rabbit/apps/rabbitmq_prelaunch/Makefile | 11 + .../src/rabbit_boot_state.erl | 84 + .../src/rabbit_boot_state_sup.erl | 46 + .../src/rabbit_boot_state_systemd.erl | 183 + .../src/rabbit_prelaunch.erl | 228 + .../src/rabbit_prelaunch_app.erl | 11 + .../src/rabbit_prelaunch_conf.erl | 503 + .../src/rabbit_prelaunch_dist.erl | 104 + .../src/rabbit_prelaunch_early_logging.erl | 109 + .../src/rabbit_prelaunch_erlang_compat.erl | 47 + .../src/rabbit_prelaunch_errors.erl | 112 + .../src/rabbit_prelaunch_sighandler.erl | 93 + .../src/rabbit_prelaunch_sup.erl | 22 + deps/rabbit/check_xref | 291 - deps/rabbit/docs/rabbitmq-diagnostics.8 | 14 +- deps/rabbit/docs/rabbitmq-queues.8 | 14 + deps/rabbit/docs/rabbitmq.conf.example | 2 +- deps/rabbit/erlang.mk | 171 +- deps/rabbit/priv/schema/rabbit.schema | 24 + deps/rabbit/quickcheck | 41 - deps/rabbit/rabbitmq-components.mk | 4 +- deps/rabbit/scripts/cuttlefish | Bin 508786 -> 0 bytes deps/rabbit/scripts/rabbitmq-defaults | 37 +- deps/rabbit/scripts/rabbitmq-defaults.bat | 37 +- deps/rabbit/scripts/rabbitmq-diagnostics.bat | 6 +- deps/rabbit/scripts/rabbitmq-env | 287 +- deps/rabbit/scripts/rabbitmq-env.bat | 376 +- deps/rabbit/scripts/rabbitmq-plugins.bat | 6 +- deps/rabbit/scripts/rabbitmq-queues.bat | 7 +- deps/rabbit/scripts/rabbitmq-rel | 58 + deps/rabbit/scripts/rabbitmq-server | 357 +- deps/rabbit/scripts/rabbitmq-server.bat | 194 +- deps/rabbit/scripts/rabbitmq-service.bat | 257 +- deps/rabbit/scripts/rabbitmq-upgrade.bat | 8 +- deps/rabbit/scripts/rabbitmqctl.bat | 6 +- deps/rabbit/src/gatherer.erl | 1 + deps/rabbit/src/rabbit.erl | 1013 +- deps/rabbit/src/rabbit_access_control.erl | 33 +- deps/rabbit/src/rabbit_amqqueue.erl | 6 +- .../src/rabbit_auth_backend_internal.erl | 4 - deps/rabbit/src/rabbit_channel.erl | 26 +- deps/rabbit/src/rabbit_config.erl | 320 +- .../rabbit/src/rabbit_connection_tracking.erl | 1 + deps/rabbit/src/rabbit_control_pbe.erl | 11 +- deps/rabbit/src/rabbit_core_ff.erl | 18 +- deps/rabbit/src/rabbit_definitions.erl | 148 +- deps/rabbit/src/rabbit_epmd_monitor.erl | 56 +- deps/rabbit/src/rabbit_exchange.erl | 14 +- deps/rabbit/src/rabbit_feature_flags.erl | 570 +- deps/rabbit/src/rabbit_ff_registry.erl | 13 + deps/rabbit/src/rabbit_fifo.erl | 93 +- deps/rabbit/src/rabbit_fifo.hrl | 6 + deps/rabbit/src/rabbit_fifo_client.erl | 20 +- deps/rabbit/src/rabbit_hipe.erl | 25 +- deps/rabbit/src/rabbit_lager.erl | 150 +- deps/rabbit/src/rabbit_log_tail.erl | 18 +- deps/rabbit/src/rabbit_mirror_queue_misc.erl | 16 +- deps/rabbit/src/rabbit_mnesia.erl | 84 +- deps/rabbit/src/rabbit_mnesia_rename.erl | 3 +- deps/rabbit/src/rabbit_msg_store.erl | 115 +- deps/rabbit/src/rabbit_nodes.erl | 15 +- deps/rabbit/src/rabbit_os_signal_handler.erl | 60 - deps/rabbit/src/rabbit_peer_discovery.erl | 40 +- .../rabbit_peer_discovery_classic_config.erl | 23 +- deps/rabbit/src/rabbit_plugins.erl | 48 +- deps/rabbit/src/rabbit_prelaunch.erl | 161 - deps/rabbit/src/rabbit_prelaunch_cluster.erl | 22 + .../rabbit_prelaunch_enabled_plugins_file.erl | 62 + .../src/rabbit_prelaunch_feature_flags.erl | 41 + deps/rabbit/src/rabbit_prelaunch_hipe.erl | 26 + deps/rabbit/src/rabbit_prelaunch_logging.erl | 84 + deps/rabbit/src/rabbit_queue_index.erl | 2 - deps/rabbit/src/rabbit_quorum_queue.erl | 46 +- deps/rabbit/src/rabbit_reader.erl | 14 +- deps/rabbit/src/rabbit_runtime_parameters.erl | 1 + deps/rabbit/src/rabbit_ssl.erl | 5 +- deps/rabbit/src/rabbit_table.erl | 7 +- .../rabbit/src/rabbit_upgrade_preparation.erl | 60 + deps/rabbit/src/rabbit_vhost.erl | 2 +- deps/rabbit_common/LICENSE-MPL-RabbitMQ | 2 +- deps/rabbit_common/Makefile | 2 +- deps/rabbit_common/codegen.py | 4 +- deps/rabbit_common/erlang.mk | 171 +- deps/rabbit_common/include/rabbit.hrl | 8 +- .../include/rabbit_core_metrics.hrl | 2 +- deps/rabbit_common/include/rabbit_memory.hrl | 2 +- deps/rabbit_common/include/rabbit_misc.hrl | 2 +- .../include/rabbit_msg_store.hrl | 2 +- deps/rabbit_common/include/resource.hrl | 2 +- deps/rabbit_common/mk/rabbitmq-build.mk | 25 +- deps/rabbit_common/mk/rabbitmq-components.mk | 4 +- deps/rabbit_common/mk/rabbitmq-dist.mk | 166 +- deps/rabbit_common/mk/rabbitmq-run.mk | 145 +- deps/rabbit_common/mk/rabbitmq-tools.mk | 89 + deps/rabbit_common/src/app_utils.erl | 2 +- deps/rabbit_common/src/code_version.erl | 2 +- deps/rabbit_common/src/credit_flow.erl | 2 +- deps/rabbit_common/src/delegate.erl | 2 +- deps/rabbit_common/src/delegate_sup.erl | 2 +- deps/rabbit_common/src/file_handle_cache.erl | 2 +- .../src/file_handle_cache_stats.erl | 2 +- deps/rabbit_common/src/gen_server2.erl | 2 +- .../src/lager_forwarder_backend.erl | 2 +- .../rabbit_common/src/mirrored_supervisor.erl | 2 +- deps/rabbit_common/src/mnesia_sync.erl | 2 +- deps/rabbit_common/src/pmon.erl | 2 +- deps/rabbit_common/src/priority_queue.erl | 2 +- .../src/rabbit_amqp_connection.erl | 2 +- .../src/rabbit_amqqueue_common.erl | 2 +- .../src/rabbit_auth_backend_dummy.erl | 2 +- .../src/rabbit_auth_mechanism.erl | 2 +- .../src/rabbit_authn_backend.erl | 2 +- .../src/rabbit_authz_backend.erl | 2 +- .../rabbit_common/src/rabbit_basic_common.erl | 2 +- .../src/rabbit_binary_generator.erl | 2 +- .../src/rabbit_binary_parser.erl | 2 +- deps/rabbit_common/src/rabbit_cert_info.erl | 2 +- .../src/rabbit_channel_common.erl | 2 +- .../src/rabbit_command_assembler.erl | 2 +- .../rabbit_common/src/rabbit_control_misc.erl | 2 +- .../rabbit_common/src/rabbit_core_metrics.erl | 2 +- .../src/rabbit_data_coercion.erl | 2 +- deps/rabbit_common/src/rabbit_env.erl | 1735 + .../src/rabbit_error_logger_handler.erl | 2 +- deps/rabbit_common/src/rabbit_event.erl | 6 +- .../src/rabbit_exchange_type.erl | 2 +- deps/rabbit_common/src/rabbit_heartbeat.erl | 2 +- deps/rabbit_common/src/rabbit_json.erl | 2 +- deps/rabbit_common/src/rabbit_log.erl | 27 +- deps/rabbit_common/src/rabbit_log_ra_shim.erl | 2 +- deps/rabbit_common/src/rabbit_misc.erl | 57 +- .../src/rabbit_msg_store_index.erl | 2 +- deps/rabbit_common/src/rabbit_net.erl | 2 +- .../rabbit_common/src/rabbit_nodes_common.erl | 16 +- .../src/rabbit_password_hashing.erl | 2 +- deps/rabbit_common/src/rabbit_pbe.erl | 22 +- .../src/rabbit_peer_discovery_backend.erl | 3 +- .../src/rabbit_policy_validator.erl | 2 +- .../src/rabbit_queue_collector.erl | 2 +- deps/rabbit_common/src/rabbit_registry.erl | 2 +- .../src/rabbit_resource_monitor_misc.erl | 2 +- deps/rabbit_common/src/rabbit_runtime.erl | 2 +- .../src/rabbit_runtime_parameter.erl | 2 +- deps/rabbit_common/src/rabbit_ssl_options.erl | 2 +- deps/rabbit_common/src/rabbit_types.erl | 2 +- deps/rabbit_common/src/rabbit_writer.erl | 2 +- deps/rabbit_common/src/supervisor2.erl | 2 +- deps/rabbit_common/src/vm_memory_monitor.erl | 2 +- deps/rabbit_common/src/worker_pool.erl | 11 +- deps/rabbit_common/src/worker_pool_sup.erl | 2 +- deps/rabbit_common/src/worker_pool_worker.erl | 12 +- deps/rabbitmq_amqp1_0/erlang.mk | 171 +- deps/rabbitmq_amqp1_0/rabbitmq-components.mk | 4 +- .../src/rabbit_amqp1_0_reader.erl | 28 +- deps/rabbitmq_auth_backend_cache/README.md | 2 +- deps/rabbitmq_auth_backend_cache/erlang.mk | 171 +- .../schema/rabbitmq_auth_backend_cache.schema | 2 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_auth_backend_http/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- .../.travis.yml.patch | 22 +- deps/rabbitmq_auth_backend_ldap/TESTING.md | 24 +- deps/rabbitmq_auth_backend_ldap/Vagrantfile | 10 - deps/rabbitmq_auth_backend_ldap/erlang.mk | 171 +- .../example/README.md | 2 + .../example/seed.sh | 8 - .../example/setup.sh | 17 - .../rabbitmq-components.mk | 4 +- .../src/rabbit_auth_backend_ldap.erl | 99 +- deps/rabbitmq_auth_backend_oauth2/README.md | 31 +- .../demo/declare_queues.rb | 5 +- .../demo/rsa_docker/Makefile | 101 + .../demo/rsa_docker/check_token.rb | 29 + .../demo/rsa_docker/rabbitmq/enabled_plugins | 1 + .../demo/rsa_docker/rabbitmq/rabbitmq.config | 30 + .../demo/rsa_docker/uaa/log4j2.properties | 28 + .../demo/rsa_docker/uaa/uaa.yml | 104 + deps/rabbitmq_auth_backend_oauth2/erlang.mk | 177 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_auth_backend_oauth2.erl | 61 +- deps/rabbitmq_auth_mechanism_ssl/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_aws/erlang.mk | 171 +- deps/rabbitmq_aws/rabbitmq-components.mk | 4 +- deps/rabbitmq_cli/.travis.yml.patch | 69 + deps/rabbitmq_cli/CONTRIBUTING.md | 14 +- deps/rabbitmq_cli/Makefile | 11 +- deps/rabbitmq_cli/README.md | 2 + deps/rabbitmq_cli/erlang.mk | 171 +- .../lib/rabbitmq/cli/core/code_path.ex | 3 - .../lib/rabbitmq/cli/core/config.ex | 95 +- .../lib/rabbitmq/cli/core/doc_guide.ex | 4 +- .../cli/ctl/commands/await_startup_command.ex | 2 +- .../ctl/commands/cluster_status_command.ex | 25 +- .../cli/ctl/commands/decode_command.ex | 17 +- .../cli/ctl/commands/encode_command.ex | 15 +- .../rabbitmq/cli/ctl/commands/help_command.ex | 2 +- .../cli/ctl/commands/report_command.ex | 11 +- .../cli/ctl/commands/status_command.ex | 19 + .../rabbitmq/cli/ctl/commands/stop_command.ex | 3 +- .../rabbitmq/cli/ctl/commands/wait_command.ex | 15 +- .../lib/rabbitmq/cli/default_output.ex | 51 +- .../diagnostics/commands/os_env_command.ex | 76 + .../await_online_quorum_plus_one_command.ex | 74 + ...wait_online_synchronized_mirror_command.ex | 74 + deps/rabbitmq_cli/lib/rabbitmqctl.ex | 20 +- deps/rabbitmq_cli/mix.exs | 14 +- deps/rabbitmq_cli/rabbitmq-components.mk | 4 +- .../erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_event_exchange/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_federation/README.md | 6 +- deps/rabbitmq_federation/erlang.mk | 171 +- .../include/rabbit_federation.hrl | 5 +- .../rabbitmq-components.mk | 4 +- ...I.Ctl.Commands.FederationStatusCommand.erl | 2 +- ....Commands.RestartFederationLinkCommand.erl | 2 +- .../src/rabbit_federation_app.erl | 2 +- .../src/rabbit_federation_db.erl | 2 +- .../src/rabbit_federation_event.erl | 2 +- .../src/rabbit_federation_exchange.erl | 2 +- .../src/rabbit_federation_exchange_link.erl | 37 +- ...abbit_federation_exchange_link_sup_sup.erl | 2 +- .../src/rabbit_federation_link_sup.erl | 2 +- .../src/rabbit_federation_link_util.erl | 5 +- .../src/rabbit_federation_parameters.erl | 3 +- .../src/rabbit_federation_queue.erl | 2 +- .../src/rabbit_federation_queue_link.erl | 2 +- .../rabbit_federation_queue_link_sup_sup.erl | 2 +- .../src/rabbit_federation_status.erl | 2 +- .../src/rabbit_federation_sup.erl | 2 +- .../src/rabbit_federation_upstream.erl | 10 +- .../rabbit_federation_upstream_exchange.erl | 2 +- .../src/rabbit_federation_util.erl | 2 +- deps/rabbitmq_federation_management/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_jms_topic_exchange/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_management/bin/rabbitmqadmin | 116 +- deps/rabbitmq_management/erlang.mk | 171 +- .../priv/www/api/index.html | 11 + .../rabbitmq_management/priv/www/js/global.js | 7 +- .../priv/www/js/tmpl/queue.ejs | 3 + .../rabbitmq-components.mk | 4 +- .../src/rabbit_mgmt_app.erl | 57 +- .../src/rabbit_mgmt_db_cache.erl | 19 +- .../src/rabbit_mgmt_wm_definitions.erl | 8 +- .../src/rabbit_mgmt_wm_overview.erl | 4 +- deps/rabbitmq_management_agent/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_mqtt/erlang.mk | 171 +- deps/rabbitmq_mqtt/rabbitmq-components.mk | 4 +- deps/rabbitmq_peer_discovery_aws/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_peer_discovery_common/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_peer_discovery_config.erl | 34 +- deps/rabbitmq_peer_discovery_consul/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_peer_discovery_consul.erl | 26 +- .../.travis.yml.patch | 19 + .../CONTRIBUTING.md | 13 +- deps/rabbitmq_peer_discovery_etcd/Makefile | 4 +- deps/rabbitmq_peer_discovery_etcd/README.md | 4 +- .../RUNNING_TESTS.md | 33 + deps/rabbitmq_peer_discovery_etcd/erlang.mk | 171 +- .../examples/compose_etcd2/README.md | 30 - .../compose_etcd2/conf/enabled_plugins | 1 - .../examples/compose_etcd2/conf/rabbitmq.conf | 10 - .../examples/compose_etcd2/docker-compose.yml | 52 - .../include/rabbit_peer_discovery_etcd.hrl | 61 +- .../rabbitmq_peer_discovery_etcd.schema | 171 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_peer_discovery_etcd.erl | 340 +- .../src/rabbitmq_peer_discovery_etcd_app.erl | 10 +- ...eer_discovery_etcd_health_check_helper.erl | 92 - .../src/rabbitmq_peer_discovery_etcd_sup.erl | 32 +- ...rabbitmq_peer_discovery_etcd_v3_client.erl | 448 + deps/rabbitmq_peer_discovery_k8s/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_prelaunch/Makefile | 11 + .../src/rabbit_boot_state.erl | 84 + .../src/rabbit_boot_state_sup.erl | 46 + .../src/rabbit_boot_state_systemd.erl | 183 + .../src/rabbit_prelaunch.erl | 228 + .../src/rabbit_prelaunch_app.erl | 11 + .../src/rabbit_prelaunch_conf.erl | 503 + .../src/rabbit_prelaunch_dist.erl | 104 + .../src/rabbit_prelaunch_early_logging.erl | 109 + .../src/rabbit_prelaunch_erlang_compat.erl | 47 + .../src/rabbit_prelaunch_errors.erl | 112 + .../src/rabbit_prelaunch_sighandler.erl | 93 + .../src/rabbit_prelaunch_sup.erl | 22 + deps/rabbitmq_prometheus/Dockerfile | 6 +- deps/rabbitmq_prometheus/Makefile | 10 +- deps/rabbitmq_prometheus/README.md | 14 +- deps/rabbitmq_prometheus/erlang.mk | 169 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_prometheus_app.erl | 84 +- deps/rabbitmq_random_exchange/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- .../erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_sharding/erlang.mk | 171 +- deps/rabbitmq_sharding/rabbitmq-components.mk | 4 +- deps/rabbitmq_shovel/erlang.mk | 171 +- deps/rabbitmq_shovel/rabbitmq-components.mk | 4 +- ...Q.CLI.Ctl.Commands.DeleteShovelCommand.erl | 22 +- ....CLI.Ctl.Commands.RestartShovelCommand.erl | 20 +- .../src/rabbit_amqp10_shovel.erl | 61 +- .../src/rabbit_shovel_dyn_worker_sup.erl | 2 +- .../src/rabbit_shovel_parameters.erl | 4 +- .../src/rabbit_shovel_util.erl | 22 +- deps/rabbitmq_shovel_management/README.md | 2 +- deps/rabbitmq_shovel_management/erlang.mk | 171 +- .../priv/www/js/shovel.js | 18 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_shovel_mgmt.erl | 74 +- deps/rabbitmq_stomp/Makefile | 1 + deps/rabbitmq_stomp/erlang.mk | 171 +- .../priv/schema/rabbitmq_stomp.schema | 27 +- deps/rabbitmq_stomp/rabbitmq-components.mk | 4 +- .../src/rabbit_stomp_processor.erl | 12 +- deps/rabbitmq_top/erlang.mk | 171 +- deps/rabbitmq_top/rabbitmq-components.mk | 4 +- deps/rabbitmq_tracing/erlang.mk | 171 +- deps/rabbitmq_tracing/rabbitmq-components.mk | 4 +- deps/rabbitmq_trust_store/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- .../src/rabbit_trust_store.erl | 2 +- deps/rabbitmq_web_dispatch/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_web_mqtt/erlang.mk | 171 +- deps/rabbitmq_web_mqtt/rabbitmq-components.mk | 4 +- deps/rabbitmq_web_mqtt_examples/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- deps/rabbitmq_web_stomp/erlang.mk | 171 +- .../rabbitmq_web_stomp/rabbitmq-components.mk | 4 +- deps/rabbitmq_web_stomp_examples/erlang.mk | 171 +- .../rabbitmq-components.mk | 4 +- erlang.mk | 171 +- git-revisions.txt | 93 +- rabbitmq-components.mk | 4 +- scripts/rabbitmq-script-wrapper | 10 +- scripts/rabbitmq-server-ha.ocf | 19 + 536 files changed, 195724 insertions(+), 8581 deletions(-) create mode 100644 deps/credentials_obfuscation/include/credentials_obfuscation.hrl create mode 100644 deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl create mode 100644 deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl create mode 100644 deps/cuttlefish/Makefile create mode 100644 deps/cuttlefish/README.md create mode 100644 deps/cuttlefish/priv/erlang_vm.schema create mode 100644 deps/cuttlefish/rebar.config create mode 100644 deps/cuttlefish/rebar.config.script create mode 100644 deps/cuttlefish/rebar.lock create mode 100644 deps/cuttlefish/src/conf_parse.erl create mode 100644 deps/cuttlefish/src/conf_parse.peg create mode 100644 deps/cuttlefish/src/cuttlefish.app.src create mode 100644 deps/cuttlefish/src/cuttlefish.erl create mode 100644 deps/cuttlefish/src/cuttlefish_advanced.erl create mode 100644 deps/cuttlefish/src/cuttlefish_bytesize.erl create mode 100644 deps/cuttlefish/src/cuttlefish_conf.erl create mode 100644 deps/cuttlefish/src/cuttlefish_datatypes.erl create mode 100644 deps/cuttlefish/src/cuttlefish_duration.erl create mode 100644 deps/cuttlefish/src/cuttlefish_duration.hrl create mode 100644 deps/cuttlefish/src/cuttlefish_duration_parse.erl create mode 100644 deps/cuttlefish/src/cuttlefish_duration_parse.peg create mode 100644 deps/cuttlefish/src/cuttlefish_effective.erl create mode 100644 deps/cuttlefish/src/cuttlefish_enum.erl create mode 100644 deps/cuttlefish/src/cuttlefish_error.erl create mode 100644 deps/cuttlefish/src/cuttlefish_escript.erl create mode 100644 deps/cuttlefish/src/cuttlefish_flag.erl create mode 100644 deps/cuttlefish/src/cuttlefish_generator.erl create mode 100644 deps/cuttlefish/src/cuttlefish_mapping.erl create mode 100644 deps/cuttlefish/src/cuttlefish_rebar_plugin.erl create mode 100644 deps/cuttlefish/src/cuttlefish_schema.erl create mode 100644 deps/cuttlefish/src/cuttlefish_translation.erl create mode 100644 deps/cuttlefish/src/cuttlefish_unit.erl create mode 100644 deps/cuttlefish/src/cuttlefish_util.erl create mode 100644 deps/cuttlefish/src/cuttlefish_validator.erl create mode 100644 deps/cuttlefish/src/cuttlefish_variable.erl create mode 100644 deps/cuttlefish/src/cuttlefish_vmargs.erl create mode 100644 deps/cuttlefish/src/lager_stderr_backend.erl create mode 100644 deps/eetcd/LICENSE create mode 100644 deps/eetcd/Makefile create mode 100644 deps/eetcd/README.md create mode 100644 deps/eetcd/include/eetcd.hrl create mode 100644 deps/eetcd/priv/protos/auth.proto create mode 100644 deps/eetcd/priv/protos/gogo.proto create mode 100644 deps/eetcd/priv/protos/kv.proto create mode 100644 deps/eetcd/priv/protos/router.proto create mode 100644 deps/eetcd/rebar.config create mode 100644 deps/eetcd/rebar.lock create mode 100644 deps/eetcd/src/clients/eetcd_auth_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_cluster_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_election_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_health_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_kv_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_lease_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_lock_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_maintenance_gen.erl create mode 100644 deps/eetcd/src/clients/eetcd_watch_gen.erl create mode 100644 deps/eetcd/src/eetcd.app.src create mode 100644 deps/eetcd/src/eetcd.erl create mode 100644 deps/eetcd/src/eetcd_app.erl create mode 100644 deps/eetcd/src/eetcd_auth.erl create mode 100644 deps/eetcd/src/eetcd_cluster.erl create mode 100644 deps/eetcd/src/eetcd_compare.erl create mode 100644 deps/eetcd/src/eetcd_conn.erl create mode 100644 deps/eetcd/src/eetcd_conn_sup.erl create mode 100644 deps/eetcd/src/eetcd_data_coercion.erl create mode 100644 deps/eetcd/src/eetcd_election.erl create mode 100644 deps/eetcd/src/eetcd_grpc.erl create mode 100644 deps/eetcd/src/eetcd_kv.erl create mode 100644 deps/eetcd/src/eetcd_lease.erl create mode 100644 deps/eetcd/src/eetcd_lease_sup.erl create mode 100644 deps/eetcd/src/eetcd_lock.erl create mode 100644 deps/eetcd/src/eetcd_maintenance.erl create mode 100644 deps/eetcd/src/eetcd_op.erl create mode 100644 deps/eetcd/src/eetcd_stream.erl create mode 100644 deps/eetcd/src/eetcd_sup.erl create mode 100644 deps/eetcd/src/eetcd_watch.erl create mode 100644 deps/eetcd/src/protos/auth_pb.erl create mode 100644 deps/eetcd/src/protos/gogo_pb.erl create mode 100644 deps/eetcd/src/protos/health_pb.erl create mode 100644 deps/eetcd/src/protos/kv_pb.erl create mode 100644 deps/eetcd/src/protos/router_pb.erl create mode 100644 deps/getopt/LICENSE.txt create mode 100644 deps/getopt/Makefile create mode 100644 deps/getopt/README.md create mode 100644 deps/getopt/rebar.config create mode 100644 deps/getopt/rebar.lock create mode 100644 deps/getopt/src/getopt.app.src create mode 100644 deps/getopt/src/getopt.erl create mode 100644 deps/gun/LICENSE create mode 100644 deps/gun/Makefile create mode 100644 deps/gun/README.asciidoc create mode 100644 deps/gun/erlang.mk create mode 100644 deps/gun/rebar.config create mode 100644 deps/gun/src/gun.app.src create mode 100644 deps/gun/src/gun.erl create mode 100644 deps/gun/src/gun_app.erl create mode 100644 deps/gun/src/gun_content_handler.erl create mode 100644 deps/gun/src/gun_data_h.erl create mode 100644 deps/gun/src/gun_http.erl create mode 100644 deps/gun/src/gun_http2.erl create mode 100644 deps/gun/src/gun_sse_h.erl create mode 100644 deps/gun/src/gun_sup.erl create mode 100644 deps/gun/src/gun_tcp.erl create mode 100644 deps/gun/src/gun_tls.erl create mode 100644 deps/gun/src/gun_ws.erl create mode 100644 deps/gun/src/gun_ws_h.erl create mode 100644 deps/ra/src/ra_server.hrl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/Makefile create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl create mode 100644 deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl delete mode 100755 deps/rabbit/check_xref delete mode 100755 deps/rabbit/quickcheck delete mode 100755 deps/rabbit/scripts/cuttlefish create mode 100755 deps/rabbit/scripts/rabbitmq-rel delete mode 100644 deps/rabbit/src/rabbit_os_signal_handler.erl delete mode 100644 deps/rabbit/src/rabbit_prelaunch.erl create mode 100644 deps/rabbit/src/rabbit_prelaunch_cluster.erl create mode 100644 deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl create mode 100644 deps/rabbit/src/rabbit_prelaunch_feature_flags.erl create mode 100644 deps/rabbit/src/rabbit_prelaunch_hipe.erl create mode 100644 deps/rabbit/src/rabbit_prelaunch_logging.erl create mode 100644 deps/rabbit/src/rabbit_upgrade_preparation.erl create mode 100644 deps/rabbit_common/src/rabbit_env.erl delete mode 100644 deps/rabbitmq_auth_backend_ldap/Vagrantfile create mode 100644 deps/rabbitmq_auth_backend_ldap/example/README.md delete mode 100755 deps/rabbitmq_auth_backend_ldap/example/seed.sh delete mode 100755 deps/rabbitmq_auth_backend_ldap/example/setup.sh create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties create mode 100644 deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml create mode 100644 deps/rabbitmq_cli/.travis.yml.patch create mode 100644 deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex create mode 100644 deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex create mode 100644 deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex create mode 100644 deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch create mode 100644 deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md delete mode 100644 deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md delete mode 100644 deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins delete mode 100644 deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf delete mode 100644 deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml delete mode 100644 deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl create mode 100644 deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl create mode 100644 deps/rabbitmq_prelaunch/Makefile create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl create mode 100644 deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl diff --git a/Makefile b/Makefile index f058eca..f49fd50 100644 --- a/Makefile +++ b/Makefile @@ -266,7 +266,7 @@ define dump_hex_cache_to_erl_term Key =:= write_concurrency orelse Key =:= compressed], Entries = ets:tab2list(Tab), - ok = file:write_file(Out, io_lib:format("~p.~n~p.~n", [Props, Entries])), + ok = file:write_file(Out, io_lib:format("~w.~n~w.~n", [Props, Entries])), ok = file:delete(In), init:stop(). endef @@ -276,12 +276,15 @@ $(SOURCE_DIST).manifest: $(SOURCE_DIST) find $(notdir $(SOURCE_DIST)) | LC_COLLATE=C sort > $@ ifeq ($(shell tar --version | grep -c "GNU tar"),0) +# Skip all flags if this is Darwin (a.k.a. macOS, a.k.a. OS X) +ifeq ($(shell uname | grep -c "Darwin"),0) TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --uid 0 \ --gid 0 \ --numeric-owner \ --no-acls \ --no-fflags \ --no-xattrs +endif else TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --owner 0 \ --group 0 \ @@ -332,9 +335,7 @@ clean-unpacked-source-dist: .PHONY: packages package-deb \ package-rpm package-rpm-fedora package-rpm-suse \ - package-windows package-standalone-macosx \ - package-standalone-linux-x86_64 \ - package-standalone-freebsd-x86_64 \ + package-windows \ package-generic-unix # This variable is exported so sub-make instances know where to find the @@ -344,9 +345,7 @@ PACKAGES_SOURCE_DIST_FILE ?= $(firstword $(SOURCE_DIST_FILES)) packages package-deb package-rpm \ package-rpm-redhat package-rpm-fedora package-rpm-rhel6 package-rpm-rhel7 \ package-rpm-rhel8 package-rpm-suse package-rpm-opensuse package-rpm-sles11 \ -package-windows package-standalone-macosx \ -package-standalone-linux-x86_64 \ -package-standalone-freebsd-x86_64 \ +package-windows \ package-generic-unix: $(PACKAGES_SOURCE_DIST_FILE) $(verbose) $(MAKE) -C packaging $@ \ SOURCE_DIST_FILE=$(abspath $(PACKAGES_SOURCE_DIST_FILE)) @@ -383,8 +382,7 @@ SCRIPTS = rabbitmq-defaults \ rabbitmq-plugins \ rabbitmq-diagnostics \ rabbitmq-queues \ - rabbitmq-upgrade \ - cuttlefish + rabbitmq-upgrade AUTOCOMPLETE_SCRIPTS = bash_autocomplete.sh zsh_autocomplete.sh @@ -397,8 +395,7 @@ WINDOWS_SCRIPTS = rabbitmq-defaults.bat \ rabbitmq-server.bat \ rabbitmq-service.bat \ rabbitmq-upgrade.bat \ - rabbitmqctl.bat \ - cuttlefish + rabbitmqctl.bat UNIX_TO_DOS ?= todos @@ -411,24 +408,12 @@ install-erlapp: dist $(verbose) mkdir -p $(DESTDIR)$(RMQ_ERLAPP_DIR) $(inst_verbose) cp -r \ LICENSE* \ - $(DEPS_DIR)/rabbit/ebin \ - $(DEPS_DIR)/rabbit/priv \ $(DEPS_DIR)/rabbit/INSTALL \ $(DIST_DIR) \ $(DESTDIR)$(RMQ_ERLAPP_DIR) $(verbose) echo "Put your EZs here and use rabbitmq-plugins to enable them." \ > $(DESTDIR)$(RMQ_ERLAPP_DIR)/$(notdir $(DIST_DIR))/README - @# FIXME: Why do we copy headers? - $(verbose) cp -r \ - $(DEPS_DIR)/rabbit/include \ - $(DESTDIR)$(RMQ_ERLAPP_DIR) - @# rabbitmq-common provides headers too: copy them to - @# rabbitmq_server/include. - $(verbose) cp -r \ - $(DEPS_DIR)/rabbit_common/include \ - $(DESTDIR)$(RMQ_ERLAPP_DIR) - CLI_ESCRIPTS_DIR = escript install-escripts: diff --git a/debian/changelog b/debian/changelog index 8dea2c8..d1eea9b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,10 @@ -rabbitmq-server (3.8.3-2) unstable; urgency=low +rabbitmq-server (3.8.4-1) UNRELEASED; urgency=high + * New upstream version * Updating standards version to 4.4.0. * d/rules: remove some obsolete comments. - -- Yury Vidineev Wed, 01 Jul 2020 22:54:54 -0700 + -- Yury Vidineev Tue, 14 Jul 2020 22:54:54 -0700 rabbitmq-server (3.8.3-1) unstable; urgency=medium diff --git a/debian/patches/lets-use-python3-not-python-binary.patch b/debian/patches/lets-use-python3-not-python-binary.patch index c28433b..a0ba019 100644 --- a/debian/patches/lets-use-python3-not-python-binary.patch +++ b/debian/patches/lets-use-python3-not-python-binary.patch @@ -3,16 +3,16 @@ Author: Thomas Goirand Forwarded: no Last-Update: 2019-09-23 ---- rabbitmq-server-3.7.18.orig/deps/amqp10_common/codegen.py -+++ rabbitmq-server-3.7.18/deps/amqp10_common/codegen.py +--- rabbitmq-server-3.8.4.orig/deps/amqp10_common/codegen.py ++++ rabbitmq-server-3.8.4/deps/amqp10_common/codegen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function ---- rabbitmq-server-3.7.18.orig/deps/amqp10_common/development.post.mk -+++ rabbitmq-server-3.7.18/deps/amqp10_common/development.post.mk +--- rabbitmq-server-3.8.4.orig/deps/amqp10_common/development.post.mk ++++ rabbitmq-server-3.8.4/deps/amqp10_common/development.post.mk @@ -2,7 +2,7 @@ # Framing sources generation. # -------------------------------------------------------------------- @@ -22,16 +22,16 @@ Last-Update: 2019-09-23 CODEGEN = $(CURDIR)/codegen.py CODEGEN_DIR ?= $(DEPS_DIR)/rabbitmq_codegen CODEGEN_AMQP = $(CODEGEN_DIR)/amqp_codegen.py ---- rabbitmq-server-3.7.18.orig/deps/rabbit_common/codegen.py -+++ rabbitmq-server-3.7.18/deps/rabbit_common/codegen.py +--- rabbitmq-server-3.8.4.orig/deps/rabbit_common/codegen.py ++++ rabbitmq-server-3.8.4/deps/rabbit_common/codegen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 ## The contents of this file are subject to the Mozilla Public License ## Version 1.1 (the "License"); you may not use this file except in ---- rabbitmq-server-3.7.18.orig/deps/rabbit_common/development.post.mk -+++ rabbitmq-server-3.7.18/deps/rabbit_common/development.post.mk +--- rabbitmq-server-3.8.4.orig/deps/rabbit_common/development.post.mk ++++ rabbitmq-server-3.8.4/deps/rabbit_common/development.post.mk @@ -2,7 +2,7 @@ # Framing sources generation. # -------------------------------------------------------------------- @@ -41,56 +41,48 @@ Last-Update: 2019-09-23 CODEGEN = $(CURDIR)/codegen.py CODEGEN_DIR ?= $(DEPS_DIR)/rabbitmq_codegen CODEGEN_AMQP = $(CODEGEN_DIR)/amqp_codegen.py ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import sys ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh -+++ rabbitmq-server-3.7.18/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh ++++ rabbitmq-server-3.8.4/deps/rabbitmq_auth_backend_http/examples/rabbitmq_auth_backend_django/start.sh @@ -1,3 +1,3 @@ #!/bin/sh -python manage.py migrate -python manage.py runserver 0.0.0.0:8000 +python3 manage.py migrate +python3 manage.py runserver 0.0.0.0:8000 ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example1.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example2.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_consistent_hash_exchange/examples/python/example3.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import pika import time ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_management/bin/rabbitmqadmin -+++ rabbitmq-server-3.7.18/deps/rabbitmq_management/bin/rabbitmqadmin -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/env python3 - - # The contents of this file are subject to the Mozilla Public License - # Version 1.1 (the "License"); you may not use this file except in ---- rabbitmq-server-3.7.18.orig/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py -+++ rabbitmq-server-3.7.18/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py +--- rabbitmq-server-3.8.4.orig/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py ++++ rabbitmq-server-3.8.4/deps/rabbitmq_trust_store/examples/rabbitmq_trust_store_django/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 diff --git a/deps/.hex/cache.erl b/deps/.hex/cache.erl index cd6ce2f..a7d94f4 100644 --- a/deps/.hex/cache.erl +++ b/deps/.hex/cache.erl @@ -1,2056 +1,2 @@ -[{read_concurrency,false}, - {write_concurrency,false}, - {compressed,false}, - {heir,none}, - {name,'Elixir.Hex.Registry.Server'}, - {named_table,false}, - {type,set}, - {keypos,1}, - {protection,protected}]. -[{{tarball_etag,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<"\"4a1c28d6fcece47b9dc72c7b376ab69d\"">>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.12">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.5">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - <<90,37,120,140,106,49,22,1,230,80,215,11,31,65,165,48,229,2,135,187,16,203, - 136,231,38,235,222,72,243,27,160,19>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - <<212,25,22,44,178,213,190,128,7,8,53,194,194,184,199,140,140,69,144,119,6, - 201,145,210,63,55,80,218,229,6,209,233>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - <<194,18,58,158,240,37,55,126,12,183,146,202,226,3,176,251,111,81,83,62,45, - 9,138,157,207,126,43,240,18,221,33,194>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - <<80,233,140,137,253,228,76,91,121,125,96,45,137,62,163,15,126,225,180,91, - 77,1,174,170,62,167,66,214,185,139,30,238>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - <<195,82,1,177,8,228,28,72,227,114,232,11,96,68,62,247,80,197,149,184,170, - 81,79,194,0,203,163,102,160,198,148,126>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.2">>}, - <<166,252,251,218,190,26,239,145,25,184,113,48,72,70,177,206,40,45,154,65, - 36,188,221,175,199,97,108,26,37,108,117,150>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - <<245,131,207,95,146,14,6,187,25,227,36,29,139,227,242,66,199,98,16,105,185, - 125,1,19,130,88,232,183,165,73,55,89>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.0">>}, - <<83,93,248,66,116,16,163,147,66,189,186,61,17,181,60,80,132,232,115,81,105, - 99,126,190,213,196,76,215,14,171,0,35>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.5">>}, - <<87,63,110,101,253,118,8,187,24,230,175,36,91,213,105,165,181,56,126,4,204, - 76,7,123,31,218,233,153,8,74,169,85>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>}, - <<37,60,24,199,220,111,194,114,144,177,245,7,243,173,198,134,63,67,150,176, - 153,208,235,57,110,60,14,88,220,254,14,228>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.3.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.3">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"benchee">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.3.0">>,<<"0.4.0">>,<<"0.5.0">>,<<"0.6.0">>, - <<"0.7.0">>,<<"0.8.0">>,<<"0.9.0">>,<<"0.10.0">>,<<"0.11.0">>,<<"0.12.0">>, - <<"0.12.1">>,<<"0.13.0">>,<<"0.13.1">>,<<"0.13.2">>,<<"0.14.0">>, - <<"0.99.0">>,<<"1.0.0">>,<<"1.0.1">>]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.1.0">>}, - <<0,44,170,249,57,185,124,132,83,62,240,246,33,211,237,65,78,215,3,252,208, - 60,145,236,13,214,32,67,223,16,44,99>>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<">= 0.3.1">>,false}]}, - {{deps,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.0">>}, - <<37,176,134,181,185,240,219,77,168,137,42,78,21,67,87,112,109,29,219,116, - 166,190,176,5,234,235,228,11,96,67,46,140>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - <<83,185,186,191,253,24,107,180,251,159,221,71,232,164,66,184,241,141,184, - 20,151,255,163,165,91,90,95,89,111,90,200,20>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.6">>}, - <<43,202,208,207,98,31,178,119,202,187,182,65,49,89,205,58,163,2,101,194, - 222,228,44,150,134,151,152,139,48,16,134,4>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>}, - <<240,71,105,128,125,55,3,221,199,75,125,172,252,7,168,137,217,240,195,33, - 243,208,145,182,109,158,2,193,87,193,164,125>>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - <<23,26,137,155,34,80,224,72,191,89,178,41,171,37,52,247,77,137,44,170,243, - 29,184,245,90,242,156,26,6,1,71,84>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - <<16,4,241,79,86,196,247,98,133,76,72,46,15,233,45,98,116,227,208,7,139,61, - 112,228,178,238,179,183,158,39,81,7>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - <<119,30,145,149,5,203,227,153,223,95,73,184,162,28,86,175,82,37,84,44,165, - 200,119,224,186,160,197,3,239,180,230,38>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>}, - <<100,128,181,191,88,169,36,0,19,228,144,60,75,75,247,96,128,68,39,162,206, - 78,78,248,86,100,248,242,7,75,45,130>>}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.0">>}, - <<197,103,12,1,118,217,143,197,134,60,112,72,163,173,92,172,44,1,81,110,133, - 253,40,176,162,35,166,106,125,235,140,234>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.0">>}, - <<2,74,88,8,199,219,172,173,7,228,200,251,223,183,96,201,108,45,40,115,94, - 67,214,95,26,241,22,67,164,211,163,242>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"tiny">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.0">>}, - <<14,162,56,244,6,131,29,242,159,119,29,183,115,21,64,93,136,12,158,247,184, - 24,166,176,224,171,162,102,83,9,225,162>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - <<222,84,131,50,37,176,230,127,33,219,71,51,58,8,104,90,237,80,215,120,162, - 241,28,247,227,106,233,227,254,78,225,7>>}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.3.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.2.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - <<35,233,217,97,4,204,233,231,74,99,53,111,40,10,215,199,171,200,238,104, - 164,95,176,81,208,132,82,54,188,148,56,108>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - <<186,119,162,144,135,118,51,176,15,182,15,212,137,226,228,140,9,196,152, - 138,4,227,160,2,68,188,251,111,6,157,247,36>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - <<239,82,71,134,18,4,215,101,218,196,201,174,239,141,242,228,84,208,44,85, - 221,176,130,198,199,103,181,203,151,45,101,25>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.2">>,false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},{{2020,3,9},{14,52,0}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>}, - <<1,123,136,115,118,56,207,113,196,97,112,248,67,81,6,110,253,61,18,28,104, - 204,142,220,191,198,92,140,70,60,124,188>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<185,103,190,43,35,240,246,120,127,171,126,214,129,180,196,90,33,90,129,72, - 31,182,43,1,165,183,80,250,143,48,247,108>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - <<44,187,218,100,149,12,13,159,201,60,175,106,184,221,155,49,232,55,50,164, - 156,21,248,17,153,78,214,142,229,155,45,213>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.1">>}, - <<144,94,191,180,229,77,90,141,108,61,184,90,151,227,68,244,0,142,188,59, - 117,227,37,235,243,184,143,105,204,82,97,188>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>}, - <<16,236,251,46,47,210,22,214,69,26,247,28,241,79,39,110,6,58,9,110,21,182, - 133,222,117,53,253,104,4,102,201,181>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.2">>}, - <<6,79,119,21,219,121,136,118,175,30,184,40,124,132,98,109,32,87,82,237,176, - 225,163,143,209,38,34,47,103,105,237,172>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},[]}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - <<93,43,197,39,177,127,29,127,117,31,104,29,56,234,57,136,166,142,206,162, - 41,215,41,123,71,219,82,241,176,26,149,42>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.1">>}, - <<127,52,144,106,8,57,243,180,155,155,118,71,70,28,81,68,120,118,17,245,153, - 232,215,67,33,66,128,118,22,153,223,43>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>}, - <<85,88,160,32,2,252,151,72,122,83,69,38,81,20,195,160,164,127,14,44,248,65, - 131,174,100,131,18,12,40,181,169,45>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - <<19,84,186,128,5,249,121,193,119,86,31,224,139,131,202,251,174,67,243,4, - 110,138,108,242,9,19,43,137,103,182,219,23>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{tarball_etag,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<"\"e096e9107af2b900626fb9610693722e\"">>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>}, - <<120,238,232,187,56,240,190,226,231,54,115,215,27,199,95,198,251,1,245,111, - 13,35,231,105,162,110,238,54,85,72,122,56>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - <<10,15,244,148,212,41,101,199,80,103,93,163,225,174,2,244,58,151,127,76, - 237,209,79,159,115,152,247,177,247,37,52,29>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - <<196,149,38,14,55,137,176,144,88,147,32,164,221,109,151,69,54,147,217,186, - 43,222,120,167,11,98,32,205,246,88,203,255>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - <<121,217,236,185,73,178,123,204,43,90,3,121,139,93,113,250,129,148,13,153, - 252,240,217,106,194,6,142,94,242,154,218,192>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.4">>}, - <<102,254,225,234,245,54,52,125,73,57,66,203,94,8,83,33,197,30,128,222,18, - 79,240,15,75,38,81,135,11,145,155,153>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.1">>}, - <<87,231,124,218,254,52,118,157,204,17,76,108,36,152,71,182,99,4,229,72,152, - 145,48,107,151,98,227,33,21,32,215,103>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - <<198,111,234,137,186,120,98,185,73,1,186,240,135,18,133,233,183,60,173,137, - 197,253,181,122,99,134,210,173,207,41,89,62>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>}, - <<208,31,56,94,20,110,182,218,61,93,90,7,40,44,144,82,47,110,7,231,100,195, - 38,27,230,155,172,172,159,182,64,41>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - <<212,204,201,230,181,103,60,98,187,149,202,83,251,122,126,231,244,244,217, - 75,159,14,143,136,177,239,8,191,215,210,33,61>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.2.1">>,false}]}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.1">>}, - <<123,233,243,178,104,142,253,204,104,144,98,204,210,30,52,14,229,253,62, - 249,220,209,66,19,96,52,190,181,237,28,46,35>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.3.0">>}, - <<44,107,172,83,3,113,61,27,67,202,111,60,136,23,103,245,123,42,223,102,140, - 222,48,19,189,113,87,220,101,239,41,156>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.2">>}, - <<228,10,21,153,48,36,160,203,79,94,34,129,109,107,227,64,2,204,68,99,198, - 23,137,237,53,236,148,196,25,17,235,238>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - <<82,54,119,31,28,24,178,146,208,95,163,243,177,122,136,230,32,65,105,41, - 167,111,111,118,7,160,99,84,190,131,223,24>>}, - {{timestamp,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.1">>}, - <<18,120,55,62,72,14,61,187,172,80,45,35,75,247,111,77,173,185,164,174,22, - 208,182,58,172,75,199,249,79,211,178,228>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},[]}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.1">>}, - <<108,84,138,208,244,145,100,149,167,137,119,103,74,37,24,71,134,159,133, - 181,18,91,124,42,68,218,49,120,149,90,223,209>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - <<9,34,102,42,94,22,87,147,197,30,24,201,196,184,166,184,228,130,97,241,131, - 192,210,137,82,91,53,245,135,195,225,84>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.3">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - <<225,176,196,235,165,145,73,137,247,161,169,173,159,137,147,207,116,118,14, - 70,72,134,240,253,34,10,98,51,126,52,121,20>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.3.0">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"3.1.0">>}, - <<254,200,102,14,183,115,62,228,17,123,133,245,87,153,253,56,51,235,118,154, - 109,247,28,207,137,3,232,220,84,71,207,206>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - <<200,135,134,160,114,7,168,11,7,30,163,142,26,113,168,171,215,50,62,203, - 247,5,102,1,39,0,155,32,56,197,161,209>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},[]}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.0">>}, - <<242,244,244,96,98,58,111,21,70,131,171,174,52,53,37,37,225,217,24,56,2, - 103,205,189,148,154,7,186,87,80,50,72>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>}, - <<28,124,91,212,145,116,144,180,221,64,56,135,104,117,230,153,77,150,87,211, - 161,134,95,252,236,98,167,183,59,95,216,9>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>}, - <<255,66,34,18,179,195,245,216,105,141,174,159,245,174,90,98,169,63,129,206, - 76,236,147,76,248,14,196,63,254,173,29,161>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>}, - <<0,205,217,118,142,181,178,146,99,138,149,170,87,141,218,217,84,199,175, - 233,128,141,85,146,244,187,66,220,249,187,175,239>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.1">>}, - <<75,178,27,173,213,26,50,173,80,237,204,229,78,83,18,172,240,121,163,188, - 119,15,38,108,25,151,7,28,127,202,223,23>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - <<82,128,175,154,172,67,47,245,202,66,22,208,62,138,147,243,34,9,81,14,146, - 91,96,231,242,124,51,121,111,105,230,153>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>}, - <<37,197,50,228,112,40,226,226,200,173,244,33,206,111,103,148,142,12,240, - 189,28,82,181,235,239,93,174,30,205,11,213,57>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - <<3,204,80,111,88,227,177,218,36,255,228,114,121,197,14,205,7,16,167,169,40, - 52,192,58,35,38,244,226,34,80,213,77>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.3.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - <<244,176,215,37,57,47,193,87,159,2,33,179,207,112,170,174,89,243,238,225, - 104,54,215,40,142,180,84,243,238,92,236,34>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.0">>}, - <<237,244,27,181,79,195,77,80,10,31,149,28,153,82,162,59,134,174,136,12,189, - 252,117,59,72,225,183,14,63,184,238,19>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.2">>}, - <<68,68,200,121,190,50,59,27,19,62,236,82,65,203,132,189,56,33,234,25,76, - 116,13,117,97,126,16,107,228,116,67,24>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.3">>}, - <<221,84,236,175,169,116,61,21,164,128,166,157,237,246,104,174,139,137,135, - 221,19,11,237,83,29,1,222,45,224,219,114,231>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - <<110,125,164,69,241,34,142,178,227,58,182,153,25,226,63,248,245,119,212, - 177,213,64,199,18,55,58,247,109,196,24,107,86>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.1">>}, - <<127,124,167,45,243,210,158,82,45,55,170,37,73,44,171,71,77,10,229,214,151, - 31,14,228,151,173,141,53,228,113,230,18>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - <<124,16,141,227,48,56,16,40,44,161,17,236,192,147,138,120,230,2,246,180, - 240,203,107,144,253,245,47,149,209,152,5,159>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - <<107,98,70,96,40,214,224,171,62,198,128,92,81,244,168,134,41,230,152,183, - 29,248,224,31,165,92,92,74,49,174,190,107>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - <<130,163,223,22,68,204,169,183,106,75,126,192,23,189,164,63,18,214,96,37, - 232,245,60,212,77,210,176,19,164,69,251,147>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.1">>}, - <<61,98,119,99,233,68,81,236,33,113,230,208,52,205,163,1,55,45,225,205,240, - 11,189,224,214,126,14,174,103,116,102,219>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - <<142,100,15,158,141,162,129,223,90,1,24,144,127,209,142,52,140,31,35,205, - 199,71,41,100,142,232,55,174,217,27,140,41>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.3">>}, - <<84,125,88,219,189,134,76,10,86,12,12,163,120,158,232,132,137,116,232,197, - 23,205,183,130,124,51,3,227,180,46,117,77>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - <<142,227,116,69,141,59,139,35,236,153,58,203,155,86,56,14,206,241,51,59, - 106,235,87,206,25,68,246,182,43,108,69,44>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - <<212,141,245,144,223,87,155,221,0,80,100,173,189,113,121,215,58,16,127,66, - 211,111,231,208,3,30,84,74,107,99,80,70>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - <<220,199,223,5,177,219,110,77,26,62,164,3,245,148,210,223,129,195,79,185, - 24,146,201,196,194,204,109,44,245,156,34,154>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - <<153,68,136,43,113,245,91,37,3,102,61,156,181,77,63,28,123,189,247,204,109, - 208,28,196,14,168,239,81,32,118,1,236>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.0">>},nil}, - {{tarball_etag,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<"\"8f7ca23abc91a273618105e220e26e86\"">>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.4">>}, - <<195,39,7,44,190,185,154,8,86,82,207,17,10,122,61,93,123,153,249,69,104, - 209,73,124,167,105,113,200,128,97,85,90>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.4.0">>}, - <<178,113,90,174,185,245,73,244,227,7,57,212,57,147,227,193,177,5,58,78,214, - 157,80,198,96,98,27,221,30,185,102,6>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.4">>}, - <<180,6,194,252,205,234,160,217,78,35,181,227,10,227,214,53,162,212,97,227, - 99,165,201,198,49,104,151,3,124,240,80,210>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>},[]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>}, - <<100,77,109,87,190,251,34,200,225,155,50,77,238,25,215,59,28,0,69,101,0, - 152,97,168,246,76,104,183,185,230,77,191>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.1">>}, - <<186,136,54,254,234,75,57,75,183,24,161,97,252,89,162,136,254,1,9,181,0, - 109,107,223,151,182,186,223,207,111,15,37>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.1">>}, - <<109,44,115,99,187,137,175,235,209,36,27,0,51,60,161,178,176,156,97,30,253, - 148,104,172,0,236,207,120,210,64,58,4>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.0">>}, - <<114,192,119,214,28,104,4,106,65,50,246,197,185,28,62,118,157,147,111,245, - 38,78,44,46,155,203,221,7,141,223,92,139>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.3.0">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"poison">>}, - [<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>,<<"1.0.3">>,<<"1.1.0">>,<<"1.1.1">>, - <<"1.2.0">>,<<"1.2.1">>,<<"1.3.0">>,<<"1.3.1">>,<<"1.4.0">>,<<"1.5.0">>, - <<"1.5.1">>,<<"1.5.2">>,<<"2.0.0">>,<<"2.0.1">>,<<"2.1.0">>,<<"2.2.0">>, - <<"3.0.0">>,<<"3.1.0">>,<<"4.0.0">>,<<"4.0.1">>]}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.3.0">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.7">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.2">>,false}]}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - <<167,118,4,141,83,165,143,243,181,212,72,231,82,105,45,47,47,255,248,233, - 98,241,72,127,19,182,62,184,86,155,14,126>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.0">>}, - <<42,36,205,38,187,111,153,246,43,113,23,68,183,101,166,2,86,8,105,191,53, - 227,14,136,204,113,61,233,238,209,143,84>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.4">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - <<170,203,72,169,240,220,55,111,21,223,48,101,202,33,132,115,141,215,201,81, - 80,174,216,60,40,206,11,171,181,110,91,152>>}, - {{registry_etag,<<"hexpm">>,<<"json">>}, - <<"\"8b0b3962e6c7fff392df3a3998a05793\"">>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.2">>}, - <<166,205,48,197,65,197,88,166,153,53,225,143,53,60,152,143,83,17,120,10,34, - 121,62,7,25,7,215,99,1,102,158,87>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - <<60,195,226,58,205,234,110,131,64,115,25,39,91,193,250,174,216,30,159,132, - 1,73,217,241,199,203,174,78,19,145,128,169>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - <<48,205,79,245,245,147,253,210,24,169,178,111,60,36,213,128,39,79,41,125, - 136,173,67,56,58,254,82,91,21,67,177,101>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - <<81,246,136,145,163,141,81,134,186,106,76,12,20,143,89,179,61,32,176,104, - 22,137,118,253,37,189,252,15,87,52,127,11>>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - <<205,13,176,11,249,85,42,18,87,148,80,64,244,222,235,41,152,176,92,122,1, - 134,215,152,246,224,234,5,150,141,178,69>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.6.2">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<156,225,30,255,90,116,160,123,175,55,135,178,177,157,215,152,114,77,41, - 169,195,164,146,164,29,243,159,106,246,134,218,14>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - <<254,147,80,109,5,37,42,216,45,114,37,127,101,73,170,177,22,100,8,138,19,7, - 242,111,10,177,172,177,114,184,195,91>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - <<109,35,233,51,19,120,181,254,34,48,148,241,46,107,129,154,0,98,25,249,232, - 203,36,48,2,244,67,227,124,183,31,58>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - <<1,188,142,12,255,50,126,103,99,78,150,23,184,80,53,125,59,119,91,58,2,46, - 45,24,194,254,146,217,115,115,178,173>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},[]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},[]}, - {version,3}, - {{deps,<<"hexpm">>,<<"json">>,<<"0.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.2.0">>}, - <<120,45,32,1,18,21,106,160,173,174,245,209,65,156,42,204,229,182,91,99,69, - 210,69,48,241,27,87,153,24,77,152,231>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.0">>}, - <<188,191,142,48,184,96,93,175,22,10,140,42,41,213,74,23,46,82,15,75,160, - 227,94,17,122,106,162,64,96,208,159,6>>}, - {{timestamp,<<"hexpm">>,<<"jason">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - <<252,245,217,166,247,209,141,138,92,106,52,103,215,189,249,253,215,44,167, - 105,222,97,216,91,58,2,5,112,196,74,63,240>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - <<58,232,236,78,152,164,72,80,212,148,216,68,28,136,150,99,28,41,91,53,65, - 202,199,145,229,110,160,136,91,167,223,63>>}, - {{versions,<<"hexpm">>,<<"jason">>}, - [<<"1.0.0-rc.1">>,<<"1.0.0-rc.2">>,<<"1.0.0-rc.3">>,<<"1.0.0">>,<<"1.0.1">>, - <<"1.1.0">>,<<"1.1.1">>,<<"1.1.2">>]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.5">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.0">>}, - <<158,206,25,186,234,42,11,160,204,226,167,220,175,197,212,98,51,88,47,253, - 21,126,117,89,227,31,149,135,213,169,181,63>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - <<243,164,124,34,50,116,36,41,23,88,22,125,243,196,96,13,207,139,243,71,149, - 163,120,118,18,1,154,165,184,106,92,33>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.1">>}, - <<33,182,157,95,117,31,169,225,236,145,71,77,68,247,183,80,73,20,184,249, - 214,168,53,45,56,133,111,119,129,224,124,53>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - <<222,148,84,174,200,249,97,163,28,227,188,38,197,39,87,121,10,152,130,7,85, - 93,208,130,110,90,96,165,229,244,16,167>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.2">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - <<88,138,11,103,237,12,69,178,31,1,133,21,252,71,142,250,200,60,8,134,97, - 189,88,136,49,228,28,144,115,168,24,251>>}, - {{tarball_etag,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<"\"efb79ca0ce11a3cc47340f09d124f555\"">>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - <<186,18,120,225,178,159,95,62,106,182,103,31,102,14,69,51,3,211,120,198, - 158,96,125,120,128,129,117,114,146,160,144,252>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<212,46,32,5,65,22,196,157,82,66,211,255,158,25,19,172,204,235,230,1,95,68, - 157,110,49,42,91,193,96,231,154,98>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>}, - <<222,149,85,197,24,59,28,187,92,189,218,199,35,160,58,204,223,104,105,205, - 147,48,244,80,100,221,68,17,238,6,11,161>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.1.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"recon">>},{{2020,3,9},{14,52,0}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - <<58,213,138,231,135,233,199,201,77,215,206,218,59,88,126,194,198,70,4,86, - 62,4,155,42,14,139,170,250,232,50,173,219>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>}, - <<109,95,128,33,54,36,158,100,249,212,153,112,67,177,51,85,198,234,195,20, - 33,125,195,177,155,243,103,126,53,26,6,65>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - <<211,204,184,64,223,176,111,47,144,166,211,53,181,54,221,7,77,183,72,179, - 231,245,177,26,182,29,35,149,6,88,94,178>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>}, - <<36,170,165,33,61,173,49,64,42,227,123,151,158,11,91,183,126,152,210,219, - 190,163,38,237,145,161,0,12,145,196,17,19>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.0">>}, - <<172,88,31,32,233,197,199,224,203,127,65,143,86,7,39,141,113,97,28,101,221, - 242,233,48,101,241,244,206,17,221,84,24>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - <<17,125,88,18,60,172,60,104,2,0,82,72,191,3,237,32,165,177,77,221,30,57, - 216,108,122,229,40,150,2,53,82,144>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>}, - <<164,124,235,26,172,111,178,141,112,119,136,220,212,90,122,233,169,153,62, - 122,65,64,97,190,190,192,129,132,225,94,55,121>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>}, - <<65,187,150,11,83,70,108,214,173,17,69,125,17,35,97,202,136,39,117,191,125, - 180,99,135,76,143,51,51,188,33,103,11>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - <<211,69,204,226,233,242,86,144,250,158,83,33,6,112,113,98,221,93,141,153, - 138,197,64,226,68,231,158,219,138,143,60,44>>}, - {{outer_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>}, - <<135,127,234,43,242,218,43,254,7,15,21,41,123,8,7,71,49,179,188,18,38,45, - 143,107,78,19,192,216,24,213,249,168>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.1">>}, - <<188,183,85,161,111,172,145,202,215,155,254,159,195,88,91,176,123,147,49, - 229,12,254,52,32,162,75,204,45,115,87,9,174>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - <<113,54,204,115,154,206,41,95,199,76,55,143,51,105,158,81,69,190,173,79, - 220,27,71,153,130,45,2,135,72,145,54,251>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>}, - <<78,11,98,214,130,174,195,158,78,57,14,68,30,160,215,192,105,236,113,7,125, - 50,29,14,191,107,107,132,184,187,224,14>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.1">>}, - <<155,164,209,166,168,242,208,178,113,109,226,178,165,204,43,170,204,126, - 246,97,224,35,89,184,212,159,28,14,122,140,94,203>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.4">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>}, - <<245,199,26,148,95,141,215,232,196,255,70,217,165,239,28,179,84,167,13,19, - 17,210,130,238,249,36,12,66,39,157,53,206>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - <<126,106,131,77,27,49,48,195,34,70,205,62,157,56,3,252,52,28,167,175,148, - 54,47,51,33,56,139,197,165,119,161,26>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.5">>}, - <<16,58,136,179,90,253,98,119,4,200,46,74,189,12,206,172,147,54,164,224,65, - 214,227,196,113,15,233,60,72,73,65,147>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>}, - <<135,173,234,40,60,156,242,71,103,180,222,237,68,96,41,137,165,51,17,86, - 223,93,96,162,102,14,156,145,20,213,64,70>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - <<44,214,114,64,165,78,156,210,97,107,200,60,12,53,45,71,248,123,204,210, - 236,89,158,206,237,192,11,203,233,6,63,7>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>}, - <<165,51,161,218,40,55,86,236,147,215,126,152,4,45,49,181,239,211,135,95, - 108,92,60,238,204,108,216,45,65,12,228,128>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>}, - <<45,62,40,47,114,196,225,164,195,164,63,97,249,39,178,20,202,237,38,172, - 118,27,96,90,20,228,10,132,97,38,13,166>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>},nil}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.6">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>}, - <<84,122,239,236,28,103,254,50,131,247,123,172,77,175,133,243,245,147,0,39, - 100,247,104,250,170,66,56,117,165,26,35,32>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - <<78,149,60,214,171,60,247,71,60,37,144,249,155,72,255,149,21,190,25,113, - 189,191,237,213,92,218,18,14,251,45,35,205>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>},nil}, - {{repo,<<"hexpm">>},<<"https://repo.hex.pm">>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"3.0.0">>}, - <<98,94,189,100,211,58,226,230,82,1,194,193,77,108,133,194,124,200,182,143, - 45,13,211,120,40,253,233,198,146,13,209,49>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>},nil}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.1.1">>,false}]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.3">>}, - <<54,23,39,196,84,172,47,207,55,141,38,16,79,102,79,157,134,244,254,184,32, - 110,4,45,190,24,116,214,109,132,163,224>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - <<4,169,229,159,101,162,157,117,225,224,34,182,226,186,4,222,45,15,34,138, - 192,11,179,255,223,212,21,128,10,36,196,109>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.0.1">>}, - <<122,235,9,94,73,65,128,174,217,87,243,88,187,139,146,21,54,10,58,167,226, - 61,174,125,154,240,251,21,72,66,17,100>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - <<139,0,144,177,58,66,52,58,215,9,237,8,129,17,253,64,169,228,194,209,129, - 158,246,193,230,1,52,113,52,237,52,208>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.0.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - <<219,220,236,81,73,70,188,141,202,177,215,125,255,119,25,67,122,133,217, - 134,23,144,134,74,177,33,85,237,163,253,111,175>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - <<227,235,78,191,17,38,38,39,240,183,155,79,209,224,120,250,78,194,190,249, - 12,248,59,124,125,33,79,110,230,167,191,174>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - <<99,150,69,207,172,50,94,52,147,129,103,178,114,186,224,121,31,234,58,52, - 207,50,194,149,37,171,241,211,35,237,76,24>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - <<253,239,107,136,195,29,76,34,224,117,107,33,94,103,115,31,76,39,57,250, - 253,19,168,240,150,226,247,69,122,201,252,195>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - <<75,20,25,238,44,60,158,230,138,146,199,152,64,3,5,112,242,108,133,120,192, - 247,226,66,82,255,85,185,75,237,82,22>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - <<98,26,26,62,83,107,158,33,99,236,107,176,120,77,253,229,236,19,218,138, - 190,196,107,183,101,189,126,177,248,173,21,2>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.1">>}, - <<134,98,110,28,137,164,173,154,150,208,217,198,56,249,232,140,35,70,184, - 155,75,161,97,25,136,89,78,190,114,181,213,238>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - <<239,16,142,100,198,224,134,54,75,159,21,176,7,60,247,148,6,22,112,175,143, - 51,29,84,93,115,8,192,186,46,103,249>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - <<51,221,215,227,240,137,141,26,124,212,235,117,88,77,41,16,14,43,149,75, - 115,25,59,120,255,172,203,118,182,37,87,124>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.2">>}, - <<99,11,135,164,61,90,213,41,40,103,253,138,103,49,217,123,60,131,58,11,150, - 140,210,3,25,183,9,32,254,241,64,107>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>}, - <<65,15,82,8,188,174,84,27,249,65,179,242,117,110,91,181,164,200,105,77,127, - 253,107,52,185,9,174,136,38,38,41,192>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>}, - <<76,104,194,190,145,0,21,20,239,142,210,98,97,234,3,141,71,153,18,133,124, - 86,82,133,2,177,233,13,195,130,236,139>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - <<227,14,75,190,99,54,83,165,194,218,67,202,180,42,97,98,62,10,204,128,239, - 64,195,33,188,41,240,214,152,105,123,211>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.2">>}, - <<101,91,237,185,64,198,75,180,213,141,96,128,203,130,4,177,249,36,215,227, - 22,137,13,7,134,172,127,144,251,154,104,212>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.0">>}, - <<237,23,149,15,205,126,155,227,41,243,69,35,98,160,227,11,231,58,5,81,27, - 11,147,229,222,71,25,123,128,187,20,150>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.0">>}, - <<10,118,11,81,162,17,78,11,198,237,70,204,202,205,37,92,250,29,159,66,54, - 195,156,177,113,62,201,78,95,174,197,22>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.10">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.4">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.2">>}, - <<221,82,137,92,76,143,33,54,94,138,69,110,63,63,180,18,123,84,143,1,54,24, - 160,87,216,253,118,164,42,200,244,239>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.1.0">>}, - <<245,131,33,140,237,130,38,117,228,132,100,143,162,108,147,61,98,19,115, - 240,28,108,118,189,0,0,93,123,212,184,46,39>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - <<144,235,14,1,159,220,17,222,131,168,140,108,26,139,190,153,105,68,81,76, - 246,187,206,222,7,44,143,34,45,28,113,35>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.3">>},nil}, - {{registry_etag,<<"hexpm">>,<<"csv">>}, - <<"\"add7860216d8a18963aeaaf5db67241d\"">>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - <<105,102,54,18,176,225,123,172,122,29,127,26,69,235,225,149,15,19,218,24, - 10,69,123,7,223,63,175,139,223,24,200,149>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - <<204,30,48,54,44,84,234,91,230,196,12,140,160,37,46,105,227,103,226,22,134, - 157,107,154,241,123,89,58,246,167,104,36>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.3">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.2">>}, - <<43,187,237,224,72,117,138,214,127,122,117,84,47,144,246,148,202,128,50,50, - 162,182,127,221,127,159,218,152,141,186,154,137>>}, - {{registry_etag,<<"hexpm">>,<<"poison">>}, - <<"\"b536bb2abc7993c69a07e8570e84e113\"">>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>}, - <<25,16,86,131,36,155,248,172,214,240,77,236,61,14,246,80,210,82,104,170,92, - 177,100,233,182,61,109,139,152,177,70,187>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - <<207,101,129,50,228,228,150,173,232,111,35,114,94,237,64,16,52,240,120,216, - 88,212,173,10,147,76,123,58,58,204,20,178>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.4">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.5">>}, - <<56,183,89,231,65,206,79,134,87,102,151,38,186,237,121,114,96,39,96,147,19, - 252,40,47,90,103,30,25,132,140,33,53>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - <<50,233,88,32,169,124,255,234,103,131,14,145,81,74,42,213,59,136,136,80,68, - 45,109,57,95,83,161,172,96,200,46,7>>}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>}, - <<202,206,70,199,228,211,195,137,83,97,35,95,153,209,171,40,0,66,70,95,65, - 24,43,199,248,227,12,128,57,234,141,238>>}, - {{timestamp,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.1">>}, - <<61,90,253,0,39,181,86,155,45,27,246,54,221,215,222,213,246,123,10,207,61, - 96,155,88,64,165,71,198,10,30,157,63>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>}, - <<33,156,184,97,3,253,149,117,90,224,88,186,192,215,182,206,78,182,125,143, - 226,108,75,46,148,126,124,62,166,8,74,14>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - <<18,134,167,155,171,47,24,153,34,1,52,218,249,166,149,88,106,240,14,167,25, - 104,230,205,137,211,211,175,223,124,236,186>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>}, - <<156,134,0,130,46,137,78,60,49,190,216,0,199,138,90,4,129,43,113,166,229, - 165,101,100,38,198,206,1,235,226,207,28>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.2">>}, - <<233,250,128,26,6,80,103,232,165,96,68,74,199,144,121,115,174,138,214,151, - 226,6,200,187,26,66,45,159,37,206,202,197>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.0">>}, - <<193,161,143,73,89,230,43,235,247,57,148,115,147,245,50,120,152,244,141,35, - 155,229,70,99,224,124,118,140,27,4,35,95>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.4.0">>}, - <<205,90,251,157,183,240,209,148,135,87,47,162,129,133,182,212,222,100,127, - 20,35,87,70,130,78,119,179,19,155,121,183,37>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - <<215,39,177,232,193,56,141,13,63,26,138,145,247,217,17,174,245,221,100,108, - 150,7,67,88,21,165,137,133,130,165,50,15>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},[]}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>}, - <<158,101,146,10,32,96,187,77,208,152,73,19,65,107,108,14,183,75,77,107,232, - 175,32,45,37,244,137,191,158,60,8,166>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - <<22,126,93,61,210,231,113,110,88,101,245,168,208,100,215,169,247,0,69,22, - 199,150,104,64,131,241,205,24,12,45,66,150>>}, - {{registry_etag,<<"hexpm">>,<<"tiny">>}, - <<"\"482fc7abaea593d79083b8f93832165c\"">>}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.8.0">>,false}]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.3">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>}, - <<84,102,52,26,40,153,179,37,138,232,168,133,67,208,189,207,235,42,41,50, - 199,49,193,102,143,19,211,49,85,17,94,25>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - <<137,173,179,41,68,72,116,128,150,65,204,47,100,90,236,43,211,141,253,132, - 30,127,228,193,179,188,162,230,249,26,26,243>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.3">>}, - <<11,227,252,24,76,188,187,142,189,106,131,138,205,120,113,127,255,251,223, - 137,247,195,149,152,149,248,127,212,147,195,55,79>>}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>}, - <<236,46,10,245,110,159,244,179,185,65,1,43,210,244,121,186,27,11,70,167,34, - 228,39,178,62,59,94,154,116,170,30,7>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.2">>}, - <<104,88,36,229,132,191,61,160,87,32,192,27,172,250,97,83,74,146,65,218,18, - 153,47,252,202,228,121,91,78,60,255,13>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>},{{2020,3,9},{14,52,5}}}, - {{registry_etag,<<"hexpm">>,<<"benchee">>}, - <<"\"becf241c7fec673bb6b768c8749f549b\"">>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.2.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - <<73,140,248,154,223,216,198,35,93,172,33,119,155,217,73,161,64,219,168,206, - 68,37,100,73,113,229,156,39,240,188,73,145>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.3.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - <<59,151,167,246,49,247,35,53,197,202,105,173,82,159,74,171,245,78,9,177,14, - 190,12,114,5,182,175,122,13,146,27,148>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.1">>}, - <<217,80,154,44,34,147,65,79,12,138,178,35,105,23,194,141,154,6,6,227,139, - 49,72,11,47,118,177,203,206,191,151,106>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>}, - <<19,59,231,97,129,14,192,233,78,5,212,21,105,68,255,195,93,2,214,168,143, - 168,253,252,42,242,155,165,62,173,179,119>>}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.8.0">>,false}]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - <<34,47,127,11,94,117,136,177,233,233,183,62,72,148,15,18,212,59,190,8,196, - 116,176,143,213,126,249,135,71,209,197,102>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>}, - <<24,34,98,146,249,177,109,241,247,196,117,36,59,152,185,133,59,170,233,18, - 101,88,198,253,222,53,77,27,159,120,134,56>>}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.2">>}, - <<217,196,187,165,244,253,121,45,191,150,34,0,67,83,251,201,249,118,86,33, - 218,135,58,172,135,166,143,252,81,205,108,102>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.3">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.1">>}, - <<93,247,164,66,223,130,94,189,46,62,187,41,162,225,127,106,224,29,28,211, - 74,91,252,182,200,47,50,23,125,76,241,48>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - <<102,119,195,9,132,22,101,46,0,16,158,203,221,72,26,117,90,45,1,123,86,124, - 29,233,255,150,17,77,155,211,112,222>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - <<247,113,245,135,196,139,72,36,180,151,226,163,227,116,247,94,147,239,1, - 252,50,152,115,176,137,163,245,221,150,27,128,184>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},[]}, - {{registry_etag,<<"hexpm">>,<<"benchee_html">>}, - <<"\"f7e35251d9bb8a754f82e920761ae7d0\"">>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - <<7,202,4,16,92,47,46,71,50,244,235,97,134,62,24,231,241,183,181,11,109,30, - 227,30,126,23,205,198,18,154,77,225>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>}, - <<124,244,152,104,247,49,234,243,108,241,245,95,175,212,116,192,199,114,218, - 187,214,90,139,9,202,35,89,24,160,252,11,246>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},nil}, - {{deps,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.0">>}, - <<227,19,177,246,201,71,212,213,150,103,66,219,100,159,247,226,103,54,224, - 132,176,162,127,161,246,74,202,120,50,120,28,196>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.3.0">>}, - <<139,206,65,63,178,82,52,228,110,97,243,99,163,106,208,125,204,229,50,39, - 152,45,198,78,39,33,182,228,14,218,121,129>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>}, - <<172,251,194,45,45,206,209,25,136,180,61,243,69,68,241,184,117,230,1,196, - 19,143,180,148,98,227,234,158,87,172,94,155>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - <<72,67,100,98,6,104,157,95,209,160,235,61,14,8,188,194,70,39,52,17,101,196, - 9,111,104,119,219,243,240,116,38,190>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>}, - <<128,220,240,222,73,203,3,63,153,109,104,148,40,239,110,246,39,234,5,148, - 48,125,245,11,76,26,253,160,152,224,73,57>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},[]}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.0">>},nil}, - {{versions,<<"hexpm">>,<<"observer_cli">>}, - [<<"1.0.2">>,<<"1.0.3">>,<<"1.0.4">>,<<"1.0.5">>,<<"1.0.7">>,<<"1.0.8">>, - <<"1.0.9">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.3.0">>, - <<"1.3.1">>,<<"1.3.2">>,<<"1.3.3">>,<<"1.3.4">>,<<"1.4.0">>,<<"1.4.1">>, - <<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"1.4.5">>,<<"1.5.0">>,<<"1.5.1">>, - <<"1.5.2">>,<<"1.5.3">>]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - <<139,29,56,94,0,231,8,1,161,47,107,212,62,182,79,116,124,79,114,200,142,82, - 63,143,13,50,118,165,19,92,160,11>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - <<149,118,239,96,88,227,41,46,166,187,103,13,17,248,78,112,72,72,8,195,85, - 212,132,253,23,194,167,73,212,11,194,62>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.1">>}, - <<189,14,10,17,147,53,136,155,170,147,205,6,251,153,1,163,63,243,132,204, - 247,131,245,35,135,32,122,194,183,161,148,56>>}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.4">>}, - <<81,222,127,212,160,25,247,150,107,51,19,62,173,183,197,186,145,158,93,130, - 159,185,169,5,79,1,43,225,62,143,157,1>>}, - {{versions,<<"hexpm">>,<<"csv">>}, - [<<"0.1.0">>,<<"0.1.1">>,<<"0.2.0">>,<<"0.2.1">>,<<"0.2.2">>,<<"1.0.0">>, - <<"1.0.1">>,<<"1.1.0">>,<<"1.1.1">>,<<"1.1.2">>,<<"1.1.3">>,<<"1.1.4">>, - <<"1.1.5">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.2.3">>,<<"1.2.4">>, - <<"1.3.0">>,<<"1.3.1">>,<<"1.3.2">>,<<"1.3.3">>,<<"1.4.0">>,<<"1.4.1">>, - <<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"2.0.0-rc.0">>,<<"2.0.0">>, - <<"2.1.0">>,<<"2.1.1">>,<<"2.2.0">>,<<"2.3.0">>,<<"2.3.1">>]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - <<64,60,123,48,80,27,93,51,205,168,188,107,254,48,127,89,219,1,95,199,37,86, - 122,86,4,218,231,246,5,165,30,23>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.0">>}, - <<55,22,115,65,12,47,255,214,210,143,212,1,46,20,129,42,194,174,6,189,33, - 143,251,177,14,66,125,144,48,22,123,164>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - <<253,248,67,188,168,88,32,58,225,222,22,218,46,226,6,245,52,22,187,218,93, - 200,201,231,143,67,36,61,228,188,58,254>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>}, - <<59,28,140,11,227,44,39,32,207,5,135,132,129,87,236,95,14,20,247,84,219,99, - 34,156,52,187,19,90,94,236,181,40>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - <<181,87,39,178,6,218,185,111,235,2,82,103,229,193,34,221,180,72,245,91,102, - 72,249,21,107,141,72,18,21,216,2,144>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - <<150,52,188,163,15,47,116,104,221,227,231,4,213,134,83,25,177,235,136,228, - 168,205,237,92,153,91,175,10,169,87,82,79>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - <<156,4,35,121,62,187,118,245,82,245,191,173,131,219,120,194,17,60,104,78, - 153,237,178,24,144,111,162,40,179,216,152,119>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - <<121,180,219,142,142,93,115,110,206,124,216,109,238,5,68,39,61,188,79,192, - 147,122,157,207,219,65,51,176,151,41,238,29>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>}, - <<215,231,114,197,69,168,223,20,71,144,195,137,29,9,227,190,159,145,121,101, - 235,192,190,211,1,248,253,141,59,49,144,89>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - <<152,228,237,44,134,182,51,223,155,1,144,214,179,191,56,188,46,56,91,166, - 32,15,104,32,31,181,117,211,153,9,129,108>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.3">>}, - <<21,65,73,21,16,131,0,130,100,90,163,191,158,38,141,151,254,169,191,217, - 126,7,137,84,112,244,23,246,108,243,192,116>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.2.0">>}, - <<81,155,194,9,228,67,57,97,40,65,116,196,151,200,82,76,0,30,40,91,121,189, - 248,2,18,180,122,31,137,128,132,204>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - <<114,39,232,58,184,30,71,83,97,1,37,210,81,187,247,140,153,22,127,190,127, - 147,26,140,191,188,62,218,133,38,37,156>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - <<185,108,64,14,4,183,183,101,192,133,76,5,164,150,99,35,233,12,13,17,254, - 224,72,59,21,103,205,160,121,171,178,5>>}, - {{versions,<<"hexpm">>,<<"exjsx">>}, - [<<"3.0.0">>,<<"3.0.1">>,<<"3.0.2">>,<<"3.1.0">>,<<"3.2.0">>,<<"3.2.1">>, - <<"4.0.0">>]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>},[]}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.5">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>}, - <<102,178,17,249,191,216,75,217,126,109,27,234,221,248,252,35,18,170,171, - 225,146,247,118,232,147,28,176,193,111,83,165,33>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - <<145,11,107,111,136,138,168,176,247,155,220,168,171,244,206,33,214,76,152, - 252,135,182,186,139,106,231,242,237,34,85,28,250>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>}, - <<118,22,145,160,177,206,15,76,126,133,17,176,155,95,44,211,24,192,13,165, - 39,3,149,99,126,78,13,90,127,71,188,69>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.0">>}, - <<110,216,76,213,101,167,236,112,146,0,220,53,152,58,23,181,31,118,152,56, - 180,196,142,200,193,64,28,253,16,50,224,254>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.4">>},nil}, - {{registry_etag,<<"hexpm">>,<<"exjsx">>}, - <<"\"97732ea099c024610deb280b5c305069\"">>}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.2.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.2">>}, - <<250,117,237,79,53,92,212,171,70,140,37,88,129,113,248,0,42,114,116,211, - 213,251,55,108,24,130,45,223,199,195,63,31>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>},[]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - <<8,68,93,118,243,173,53,7,188,74,243,14,175,216,130,96,192,243,92,80,56,84, - 42,242,119,171,208,151,91,225,234,38>>}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - <<121,81,11,127,243,186,89,124,117,140,230,243,151,226,59,63,194,252,114, - 157,214,51,40,129,196,104,183,103,183,28,119,193>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - <<195,69,224,144,224,166,27,243,62,3,133,170,58,211,148,252,183,216,99,227, - 19,188,63,202,82,46,57,12,127,57,22,110>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - <<76,120,211,230,117,249,239,248,133,203,226,82,200,154,143,193,210,251,128, - 60,13,3,169,20,40,30,88,120,52,224,148,49>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - <<72,36,218,219,1,225,67,149,246,94,157,24,218,41,77,83,67,38,215,238,215, - 121,150,243,194,47,116,169,135,1,121,235>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>},nil}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"1.0.1">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.2">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - <<7,70,231,172,135,119,124,3,107,104,136,211,75,235,196,163,110,83,65,104, - 59,87,163,225,184,103,14,93,9,182,129,82>>}, - {{versions,<<"hexpm">>,<<"recon">>}, - [<<"2.2.0">>,<<"2.2.1">>,<<"2.3.0">>,<<"2.3.1">>,<<"2.3.2">>,<<"2.3.3">>, - <<"2.3.4">>,<<"2.3.5">>,<<"2.3.6">>,<<"2.4.0">>,<<"2.5.0">>]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.4.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - <<140,130,155,178,142,63,49,106,54,18,22,49,68,5,254,41,109,141,210,253,116, - 9,223,165,63,164,172,28,255,55,151,160>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - <<159,1,192,129,120,215,122,101,122,54,82,135,8,70,212,202,238,122,123,113, - 202,50,151,29,247,206,87,192,121,218,111,222>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},[]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.0.1">>}, - <<109,146,154,92,130,248,99,214,32,28,161,252,218,171,38,179,85,143,41,221, - 224,211,160,34,229,242,200,221,175,180,203,22>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - <<115,202,129,241,107,232,194,63,12,196,113,10,2,108,189,79,223,95,106,26, - 181,126,18,239,173,150,230,121,68,48,145,183>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},[]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.1">>}, - <<40,31,44,187,67,159,227,192,67,119,62,230,200,49,114,171,216,3,38,220,198, - 21,63,100,48,228,212,230,177,77,126,157>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.2.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.0.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.2.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - <<251,60,197,214,171,222,88,2,7,87,132,147,178,216,96,62,100,143,44,93,168, - 223,234,187,26,186,196,121,147,150,228,33>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>}, - <<32,81,15,21,98,72,37,163,109,219,84,162,68,143,219,195,192,253,104,216,90, - 139,229,208,195,81,73,244,140,232,140,95>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},[]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"3.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.0">>}, - <<163,31,253,175,119,73,79,241,45,108,44,156,176,50,53,212,55,53,150,210, - 250,246,46,229,185,156,26,228,121,97,132,0>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.0">>}, - <<105,239,141,192,74,76,174,199,209,37,41,162,55,199,180,155,139,177,255,48, - 198,228,44,186,234,71,245,179,206,145,253,189>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},nil}, - {{tarball_etag,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<"\"b592027da679624534bf2a6fb5875207\"">>}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - <<237,219,26,93,59,77,123,35,81,161,38,128,137,110,199,146,141,6,221,79,48, - 163,15,78,229,139,66,151,205,242,65,111>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - <<84,1,54,83,199,46,117,255,59,75,72,115,66,223,229,103,21,201,116,159,249, - 195,26,125,232,248,77,24,160,158,28,60>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.4.0">>}, - <<169,93,11,105,81,121,24,152,163,206,220,239,254,220,191,5,237,12,236,64, - 183,236,156,58,96,112,180,210,34,162,42,171>>}, - {{registry_etag,<<"hexpm">>,<<"jason">>}, - <<"\"9fe9e8261d72eb1a76db548255891cc9\"">>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>}, - <<80,24,35,9,68,201,101,196,109,80,116,126,15,148,188,24,34,15,177,124,65, - 58,146,14,145,238,25,134,200,164,239,91>>}, - {{outer_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>}, - <<61,185,230,46,44,28,161,19,175,18,170,70,80,45,240,194,135,37,230,108,123, - 136,85,141,215,79,126,9,208,150,16,97>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.0">>}, - <<0,214,237,215,48,254,153,35,132,121,150,70,157,1,139,250,210,149,54,105, - 189,43,99,91,7,84,206,45,213,159,166,37>>}, - {{versions,<<"hexpm">>,<<"tiny">>},[<<"1.0.0">>,<<"1.0.1">>]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>},nil}, - {{retired,<<"hexpm">>,<<"csv">>,<<"2.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>}, - <<120,201,76,85,220,135,233,31,246,237,228,245,244,103,37,10,222,151,49,232, - 233,82,110,222,32,154,82,16,238,82,134,146>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - <<222,146,226,188,133,188,9,236,103,111,25,246,236,45,170,89,186,31,1,3,209, - 218,150,207,12,202,54,52,44,144,217,63>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - <<176,130,101,218,0,52,39,160,71,207,77,50,70,74,228,200,25,201,193,58,33, - 248,106,182,237,228,254,60,75,17,130,13>>}, - {{retired,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.2">>}, - <<185,80,65,252,17,144,118,152,187,77,64,117,190,80,75,6,0,168,234,119,129, - 196,236,127,27,240,142,115,235,238,108,37>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"0.3.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.1">>}, - <<33,232,214,152,48,145,102,15,57,79,68,167,193,31,140,241,244,103,175,178, - 170,218,31,207,89,194,241,181,144,164,47,104>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.5">>}, - <<29,227,205,145,60,190,39,174,240,172,159,191,122,176,110,194,117,248,93, - 162,139,55,96,100,128,73,153,209,214,51,54,122>>}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - <<247,30,210,221,230,58,44,168,206,231,133,5,145,64,254,121,160,122,142,67, - 65,133,52,199,94,32,21,56,185,12,31,185>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.3">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>}, - <<213,76,4,154,169,73,135,48,92,115,232,78,66,2,91,38,231,216,196,73,125, - 253,121,224,196,135,233,238,94,170,246,110>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.4-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"3.1.0">>}, - <<217,235,99,102,16,224,150,248,111,37,217,164,111,53,169,250,202,195,86,9, - 167,89,27,59,227,50,110,153,160,72,70,101>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"earmark">>,<<"earmark">>,<<">= 0.0.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>}, - <<8,57,84,123,158,93,199,206,138,139,153,28,158,125,154,234,48,58,197,223, - 224,74,57,54,130,230,113,175,14,4,182,228>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.3">>}, - <<99,43,159,92,76,46,86,152,127,18,59,159,53,229,43,53,108,45,226,140,231, - 105,45,102,190,207,18,223,16,204,16,18>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - <<67,61,148,107,14,71,85,225,134,254,86,69,104,234,212,245,147,176,209,83, - 55,252,255,169,94,215,213,184,166,97,38,112>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>}, - <<110,77,136,127,221,142,139,234,129,238,215,150,170,88,155,200,14,52,183, - 137,97,121,182,132,249,117,202,184,58,27,23,62>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - <<14,193,72,255,99,89,118,57,179,255,140,195,239,82,60,251,70,105,244,250, - 26,46,146,30,5,132,156,143,149,12,124,109>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>}, - <<110,207,210,201,30,22,244,142,21,53,116,59,87,208,26,66,198,93,125,213,26, - 139,67,229,114,59,31,121,146,113,105,168>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.4">>}, - <<136,22,143,146,203,209,35,224,41,13,135,208,161,202,128,3,232,99,170,67, - 10,225,114,87,177,231,195,222,195,33,119,158>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - <<16,133,39,148,221,224,88,193,239,122,91,157,83,212,8,217,4,194,7,110,159, - 171,116,172,67,252,103,109,50,227,218,211>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},nil}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - <<107,28,158,90,196,46,147,42,252,22,12,197,14,199,233,99,80,198,218,241, - 185,31,141,68,60,125,126,195,82,41,208,197>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.1">>}, - <<78,125,235,70,12,170,104,171,2,130,210,4,228,58,85,50,98,180,93,64,169,61, - 208,16,154,133,137,103,171,28,143,191>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.2">>},nil}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.3">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.1.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.3">>},nil}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - <<57,207,144,243,58,96,58,98,157,34,38,230,75,17,40,154,45,77,70,176,162, - 107,166,24,211,104,11,188,120,28,232,230>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},nil}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.1.0">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<">= 0.99.0 and < 2.0.0">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 1.0">>,false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.0.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>}, - <<210,233,151,147,38,189,170,207,80,171,14,82,200,15,83,215,76,222,217,61, - 26,226,31,171,207,102,52,98,56,204,3,34>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.5">>}, - <<81,54,235,143,128,32,164,64,245,248,148,241,193,30,127,169,72,3,21,178, - 230,227,152,176,228,102,9,203,150,62,118,138>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.0.0">>}, - <<122,12,59,31,191,255,219,234,254,33,139,68,53,153,79,38,248,249,130,170, - 186,128,63,164,215,3,211,138,183,43,43,116>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.1">>}, - <<251,215,141,211,229,171,186,220,23,221,216,153,5,0,47,109,32,160,48,70, - 247,85,90,96,152,210,138,159,20,254,175,88>>}, - {{tarball_etag,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<"\"d354c9fcbfd54556b8e8eef6c058a152\"">>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.1.4">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},[]}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.14.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.1">>}, - <<169,229,80,242,36,189,255,58,16,215,240,101,26,114,153,139,19,9,138,176, - 142,116,249,197,115,127,195,192,9,193,73,244>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.2">>}, - <<77,59,189,15,115,5,117,64,83,222,177,167,29,64,142,111,86,197,20,166,97, - 46,12,55,146,237,131,198,208,64,83,56>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.1">>}, - <<0,37,224,56,226,242,232,197,200,36,13,24,188,252,17,177,239,225,162,86, - 113,101,111,197,178,253,214,112,245,72,222,52>>}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - <<228,42,101,145,72,233,247,177,231,215,28,123,93,36,153,124,215,189,123, - 114,215,227,30,165,194,219,22,116,184,238,231,136>>}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>}, - <<27,197,191,30,79,210,73,16,65,120,240,136,80,48,188,215,90,69,38,244,210, - 161,233,118,244,180,40,211,71,97,79,15>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.5.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - <<153,47,46,20,24,132,154,50,111,209,217,40,120,1,250,45,134,9,29,180,249, - 97,31,96,120,29,166,210,54,246,76,212>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>}, - <<119,62,225,102,102,158,178,27,82,151,206,65,179,199,180,116,190,9,110,184, - 237,5,45,69,112,129,40,154,28,242,80,122>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>}, - <<169,112,194,61,151,0,174,120,66,181,38,197,118,119,230,227,241,8,148,180, - 41,82,70,150,234,213,71,233,48,35,145,192>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"0.3.3">>}, - <<209,152,101,72,132,113,137,181,31,30,251,101,209,150,230,171,159,46,136, - 166,135,138,54,58,236,14,60,119,226,85,6,22>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.0">>}, - <<65,109,94,153,196,194,139,118,254,70,45,153,185,188,212,77,72,28,207,75, - 64,118,138,103,220,169,212,16,127,162,167,173>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.6">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.2.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - <<130,13,172,184,217,233,253,211,206,164,132,51,239,127,49,178,246,251,249, - 233,63,255,40,220,35,138,5,190,195,76,57,87>>}, - {{versions,<<"hexpm">>,<<"stdout_formatter">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.2.1">>,<<"0.2.2">>,<<"0.2.3">>]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - <<34,76,89,87,237,225,240,215,135,68,94,165,238,52,99,79,186,176,6,253,161, - 30,77,66,240,37,11,97,16,216,237,49>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>}, - <<156,36,97,56,134,110,216,22,150,116,239,84,148,232,205,120,44,210,38,130, - 113,83,121,236,189,172,19,247,170,149,212,231>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.3.1">>},nil}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.2">>},[]}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.5.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>}, - <<232,37,108,31,91,115,43,205,72,90,169,75,192,19,113,243,36,225,20,154,143, - 38,38,35,64,124,162,204,19,171,8,74>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.3">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - <<200,66,29,78,110,110,240,221,124,43,100,255,99,88,159,133,97,17,104,8,250, - 0,61,221,253,83,96,205,231,187,70,37>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.2.0">>}, - <<71,99,182,154,138,119,189,119,210,111,71,125,25,100,40,183,65,38,26,118, - 18,87,255,28,249,39,83,160,212,210,74,99>>}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>}, - <<189,191,147,143,9,109,63,57,160,105,59,91,253,243,226,107,192,112,4,217, - 179,55,248,204,180,36,64,115,180,82,185,227>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - <<165,235,69,46,242,66,123,154,112,20,171,100,152,141,178,66,81,134,95,142, - 111,174,125,163,240,100,177,227,178,61,51,219>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.0.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.2.1">>}, - <<146,48,109,88,81,27,235,226,12,242,50,205,65,94,151,159,216,143,175,226, - 159,194,63,30,158,27,67,127,162,208,6,180>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.0">>}, - <<157,237,151,116,241,241,18,204,84,77,130,229,249,169,5,160,22,134,47,147, - 186,137,249,131,214,167,226,80,145,239,226,61>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>}, - <<14,242,17,138,101,206,8,117,186,112,255,37,243,141,34,183,238,117,142,105, - 157,107,69,214,18,238,190,251,138,78,156,223>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.1">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.0">>}, - <<137,28,32,233,180,214,31,0,187,29,21,255,46,29,244,81,14,48,42,7,254,77, - 205,184,84,193,108,34,59,72,29,163>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.2.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.2">>}, - <<206,219,47,35,1,113,230,209,4,35,174,232,206,144,81,40,51,176,126,151,135, - 71,204,131,107,15,44,3,127,207,119,157>>}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - <<189,147,202,5,190,120,188,182,21,156,113,118,35,14,254,218,47,114,79,127, - 253,72,85,21,23,92,164,17,223,244,137,62>>}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"4.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.0.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.6">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.0">>}, - <<245,5,175,141,207,193,255,0,92,117,109,254,27,39,65,9,23,223,171,168,134, - 128,134,39,11,216,165,8,205,67,113,193>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>},nil}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.3">>}, - <<62,26,107,110,184,70,116,187,13,10,189,144,160,61,7,208,27,242,46,141,86, - 147,149,102,74,41,138,252,89,164,234,49>>}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"exjsx">>,<<"3.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.12.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - <<243,239,123,26,226,138,85,229,59,140,181,193,29,14,11,100,231,110,56,213, - 243,232,48,191,46,59,242,204,10,137,216,72>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.1">>},nil}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.2.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>}, - <<32,50,152,90,157,33,167,28,203,229,214,196,231,128,37,49,94,140,60,195, - 226,85,245,7,161,55,153,84,146,227,240,190>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.0">>}, - <<241,44,133,153,45,45,129,212,251,122,96,34,90,55,175,239,58,240,6,152,35, - 204,50,26,37,233,223,157,59,203,110,210>>}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - <<165,252,198,94,200,215,66,117,153,236,145,91,159,135,228,53,41,209,80,151, - 173,249,228,60,150,236,86,115,175,87,212,46>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.5.2">>}, - <<23,12,23,28,231,246,221,112,200,88,6,81,84,163,48,91,133,100,131,60,109, - 204,161,126,16,182,118,202,49,234,151,111>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - <<164,193,167,195,13,33,81,182,228,151,108,178,245,44,10,29,73,236,150,90, - 251,115,126,216,74,104,75,196,40,77,22,39>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},nil}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.2">>}, - <<86,11,223,183,68,158,61,221,35,160,150,146,159,185,252,33,34,247,9,188, - 199,88,178,213,213,165,199,208,234,132,137,16>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.3">>}, - <<55,62,180,247,50,31,137,138,214,119,41,153,243,13,175,101,249,243,142,29, - 61,212,215,152,215,168,45,59,18,63,225,211>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.0.2">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"benchee_html">>}, - [<<"0.1.0">>,<<"0.2.0">>,<<"0.3.0">>,<<"0.3.1">>,<<"0.4.0">>,<<"0.5.0">>, - <<"0.6.0">>,<<"1.0.0">>]}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.3.0">>},nil}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.3">>}, - <<9,86,102,121,241,147,49,21,246,24,158,108,78,32,94,53,170,234,28,174,220, - 248,67,135,92,62,182,94,236,131,228,136>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~> 2.3.1">>,false}]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.0">>},[]}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<107,156,170,216,147,0,6,249,187,53,104,12,93,51,17,145,122,198,118,144, - 195,175,27,160,24,98,51,36,192,21,171,229>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.0">>}, - <<27,101,19,39,242,48,107,254,16,227,73,222,227,142,116,11,12,85,4,38,19, - 142,188,67,255,207,5,134,97,188,172,191>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.0">>}, - <<132,183,103,162,219,142,204,47,7,187,132,252,180,245,79,37,22,12,7,161, - 218,226,124,70,11,63,12,64,191,203,247,159>>}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"stdout_formatter">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.4">>}, - <<223,18,100,181,135,27,186,248,218,79,17,254,173,250,13,198,97,244,213,17, - 73,58,37,248,249,199,214,21,224,214,20,213>>}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},{{2020,3,9},{14,52,0}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.1">>}, - <<79,120,74,86,127,41,153,226,141,54,193,51,86,73,95,69,95,173,79,184,140, - 102,169,194,219,96,171,43,96,209,20,121>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.3.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"3.0.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.3">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - <<24,229,217,170,84,18,236,6,60,249,113,155,207,231,59,249,144,197,254,213, - 201,163,200,66,44,43,93,149,41,252,139,13>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.3">>}, - <<87,98,95,24,53,198,99,53,131,106,213,107,2,224,21,248,208,190,199,234,139, - 100,211,5,241,134,255,216,60,134,175,63>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.1">>}, - <<130,21,194,175,29,228,95,184,230,195,55,162,116,96,70,107,74,199,100,242, - 153,214,66,233,10,59,99,52,115,106,73,247>>}, - {{registry_etag,<<"hexpm">>,<<"stdout_formatter">>}, - <<"\"798f35dfaecff22d405cc75c551e3b6e\"">>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.10.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.4.0">>}, - <<144,31,247,139,57,199,84,251,77,111,215,45,207,13,189,57,137,103,187,210, - 228,213,156,8,212,215,170,68,167,61,233,29>>}, - {{registry_etag,<<"hexpm">>,<<"jsone">>}, - <<"\"19b0e6e65a50f4bab9d3f6c4d71897fa\"">>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.1.4">>}, - <<37,105,199,33,33,80,209,87,165,122,53,119,190,202,207,162,227,70,163,175, - 234,105,135,8,133,22,134,172,220,210,141,4>>}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - <<50,25,48,170,147,181,145,180,139,214,172,185,202,47,23,172,134,195,217,48, - 91,100,215,40,142,33,246,124,247,186,51,129>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.4.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - <<216,179,241,114,0,115,65,60,54,162,30,86,161,209,17,42,77,103,169,173,14, - 201,0,67,126,254,208,139,57,229,21,178>>}, - {{inner_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>}, - <<83,94,167,230,0,203,28,107,161,123,83,2,146,102,217,215,236,84,206,41,191, - 176,93,144,108,67,57,7,172,250,1,202>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.5">>}, - <<134,43,66,142,238,151,53,86,202,20,87,227,90,179,116,64,212,100,70,163,29, - 10,225,195,21,84,14,86,121,107,130,18>>}, - {{registry_etag,<<"hexpm">>,<<"observer_cli">>}, - <<"\"f8006e5d5a78b08a38db1429917779a9\"">>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>},[]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.0">>}, - <<143,86,163,52,2,26,42,207,236,45,147,7,8,208,240,25,53,241,101,76,138,222, - 121,119,187,241,248,235,72,67,9,114>>}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.1.2">>}, - <<176,61,237,234,103,169,146,35,162,234,249,241,38,76,227,113,84,86,77,232, - 153,253,61,139,154,33,177,166,253,100,175,231>>}, - {{retired,<<"hexpm">>,<<"tiny">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.2">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.2">>}, - <<221,158,21,194,160,108,229,114,231,154,103,96,57,12,160,35,72,192,241,193, - 134,58,34,145,8,98,133,129,134,36,121,114>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.2.0">>},{{2020,3,9},{14,52,5}}}, - {{versions,<<"hexpm">>,<<"jsone">>}, - [<<"1.0.0">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>,<<"1.2.2">>,<<"1.2.3">>, - <<"1.2.4">>,<<"1.2.5">>,<<"1.2.6">>,<<"1.3.0">>,<<"1.3.1">>,<<"1.3.2">>, - <<"1.4.0">>,<<"1.4.1">>,<<"1.4.2">>,<<"1.4.3">>,<<"1.4.4">>,<<"1.4.5">>, - <<"1.4.6">>,<<"1.4.7">>,<<"1.5.0">>,<<"1.5.1">>,<<"1.5.2">>]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - <<37,36,182,192,229,65,48,157,150,154,204,247,95,119,225,209,101,62,70,20, - 42,252,104,233,234,79,243,85,89,167,148,188>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.3">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<79,89,119,17,222,247,188,179,135,133,25,245,127,149,88,219,60,157,134,138, - 238,65,83,94,220,220,32,170,192,179,158,104>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"1.0.3">>}, - <<160,88,176,66,166,90,171,75,107,220,254,73,23,150,200,208,67,105,54,44, - 172,223,141,93,75,234,156,81,112,151,208,56>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.1.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.3">>},nil}, - {{retired,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.1.0">>}, - <<218,15,103,101,22,13,120,222,103,107,141,110,93,175,57,171,250,254,43,57, - 3,184,187,249,186,217,7,116,185,172,32,81>>}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - <<162,54,21,16,103,251,60,169,201,96,54,128,105,50,209,5,210,224,199,188, - 179,119,133,19,239,254,106,108,59,35,58,96>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>}, - <<137,43,68,99,179,173,216,203,10,28,104,252,69,224,60,98,151,137,89,121, - 189,12,119,40,52,96,186,217,13,2,157,195>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.0.1">>},[]}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.3">>},nil}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.2.0">>},nil}, - {{registry_etag,<<"hexpm">>,<<"parallel_stream">>}, - <<"\"469337f5bc4abe45efff41d7f35a8e8c\"">>}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.1.0">>}, - <<226,111,246,64,124,87,46,227,117,253,144,19,151,219,230,226,40,138,182, - 110,71,245,89,90,225,173,188,186,123,187,147,88>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.4">>}, - <<18,192,208,123,207,0,180,26,155,61,161,233,207,82,235,5,192,76,185,237,23, - 20,177,174,34,9,208,212,27,25,175,60>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.4">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"jason">>,<<"1.1.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"0.1.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.2.1">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.7">>},nil}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.4.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>}, - <<91,77,36,239,254,189,6,15,70,111,180,96,236,6,87,110,123,52,160,15,194, - 107,35,79,228,241,44,79,5,201,89,71>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.3">>}, - <<28,55,228,101,104,121,52,189,79,135,20,25,68,145,107,252,74,110,96,231,95, - 211,42,107,78,234,230,154,136,205,203,158>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - <<153,157,191,5,166,154,48,207,230,159,28,50,23,123,19,188,187,118,12,110, - 235,200,231,70,167,54,130,189,127,223,71,171>>}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.0">>}, - <<144,237,193,93,248,153,119,172,98,173,124,194,8,202,22,226,66,122,169,193, - 130,137,238,155,243,134,208,96,117,166,219,140>>}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.3.0">>}, - <<110,242,4,161,146,102,97,79,26,253,146,158,179,97,109,29,238,246,204,16, - 68,112,136,157,53,109,87,15,3,200,225,9>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - <<139,58,59,201,53,11,160,69,50,244,82,198,7,170,36,213,157,224,58,54,162, - 131,139,30,161,124,39,70,70,226,243,213>>}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - <<140,102,178,169,55,154,72,235,237,246,174,23,188,43,114,195,171,233,203, - 219,247,130,73,57,128,105,103,50,97,1,195,113>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.4.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - <<218,31,129,51,81,87,77,55,61,179,235,87,157,45,159,228,185,29,239,194,50, - 224,8,39,238,90,163,139,86,196,193,210>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.5.2">>}, - <<74,252,89,220,173,247,27,231,237,200,185,52,179,159,85,78,199,179,30,43, - 27,26,71,103,56,58,102,63,134,149,140,227>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.2.0">>},{{2020,3,9},{14,52,0}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.0.0-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.3">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0">>}, - <<15,124,250,155,219,35,254,215,33,236,5,65,155,206,226,178,194,26,119,233, - 38,188,224,222,218,2,155,90,220,113,111,226>>}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"0.1.1">>}, - <<133,128,81,127,114,25,171,182,235,26,100,132,19,211,194,49,151,164,153, - 232,238,12,184,91,99,120,17,14,55,59,18,213>>}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.3.3">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.0">>}, - <<77,136,166,207,49,69,174,71,48,206,151,157,195,38,52,182,223,150,54,59,81, - 222,161,94,32,206,80,184,22,1,35,229>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.13.1">>}, - <<32,148,247,67,145,142,28,56,34,176,168,194,101,235,122,232,17,137,54,221, - 78,15,4,198,43,185,189,243,103,109,206,77>>}, - {{versions,<<"hexpm">>,<<"parallel_stream">>}, - [<<"0.1.0">>,<<"0.1.1">>,<<"0.1.2">>,<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>, - <<"1.0.3">>,<<"1.0.4">>,<<"1.0.5">>,<<"1.0.6">>]}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.3.6">>}, - <<245,81,152,101,10,142,192,29,62,252,4,121,122,190,85,12,125,2,62,127,248, - 181,9,243,115,207,147,48,50,4,155,216>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.0.0-rc.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"3.0.0">>}, - <<129,61,183,144,158,154,162,11,47,77,66,105,39,152,190,239,122,67,6,145, - 180,36,208,230,176,143,124,177,23,39,199,33>>}, - {{retired,<<"hexpm">>,<<"recon">>,<<"2.3.2">>},nil}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.12.1">>}, - <<42,21,119,134,10,1,228,200,30,114,228,168,156,94,55,129,98,9,139,162,0,16, - 146,103,211,28,118,154,142,200,39,5>>}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - <<61,45,231,167,16,185,190,212,207,189,174,4,25,217,139,25,133,99,75,216, - 204,31,38,239,149,118,194,235,154,166,179,94>>}, - {{inner_checksum,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<47,127,203,236,44,53,3,75,173,226,249,113,127,119,5,157,197,78,180,233,41, - 163,4,156,167,186,103,117,192,189,102,205>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.13.2">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{versions,<<"hexpm">>,<<"json">>}, - [<<"0.3.0">>,<<"0.3.2">>,<<"0.3.3">>,<<"1.0.0">>,<<"1.0.1">>,<<"1.0.2">>, - <<"1.0.3">>,<<"1.0.4-SNAPSHOT">>,<<"1.1.0">>,<<"1.2.0">>,<<"1.2.1">>, - <<"1.2.2">>,<<"1.2.3">>,<<"1.2.4">>,<<"1.2.5">>,<<"1.3.0">>, - <<"2.0.0-SNAPSHOT">>,<<"2.0.1-SNAPSHOT">>,<<"2.1.0-SNAPSHOT">>]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.5">>}, - <<54,130,193,140,107,7,72,13,242,18,45,13,175,92,5,69,123,66,193,153,15,25, - 124,227,222,83,136,78,139,168,52,196>>}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.1.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.5.0">>}, - <<114,243,132,15,237,217,79,6,49,92,82,63,108,236,245,180,130,114,51,190, - 215,174,63,225,53,178,160,235,234,181,225,150>>}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.2.5">>},[]}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>}, - <<135,70,99,76,186,2,83,179,168,68,50,96,128,215,141,77,124,129,171,147,194, - 248,161,18,241,10,234,167,248,181,81,137>>}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.2.0">>}, - <<209,58,175,98,35,37,188,63,41,27,181,3,65,188,232,64,202,189,196,173,88, - 90,98,193,228,202,166,173,91,224,0,0>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.5">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"recon">>,<<"2.4.0">>}, - <<59,50,222,86,143,18,144,1,225,207,137,204,91,207,214,219,177,38,15,171, - 178,207,138,52,16,205,192,246,52,235,161,130>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.4">>}, - <<63,208,188,230,213,18,226,108,43,136,22,146,172,159,239,246,137,34,85,58, - 6,102,165,218,96,119,83,232,103,228,27,155>>}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 1.0">>,false}]}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.3">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"2.1.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.9.0">>}, - <<189,7,50,202,74,249,220,189,146,187,33,246,250,40,136,15,241,188,169,205, - 77,7,75,194,228,0,198,145,168,209,85,118>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"2.0.0">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.4">>, - false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.3.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - <<14,251,252,49,4,90,210,247,90,72,103,59,209,190,250,138,106,88,85,233,59, - 140,49,23,174,215,215,218,141,230,91,113>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.4.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{timestamp,<<"hexpm">>,<<"benchee_html">>,<<"0.1.0">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.11.0">>}, - <<207,150,227,40,255,93,105,131,141,216,156,33,169,219,34,113,107,252,198, - 239,119,46,157,157,221,247,186,98,33,2,114,45>>}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.6.0">>}, - <<194,86,85,6,198,33,238,1,14,113,208,95,85,94,57,161,185,55,224,8,16,226, - 132,188,133,70,58,77,78,252,75,0>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.1.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.2">>}, - <<20,151,21,176,8,250,42,138,93,102,63,203,224,145,118,224,55,223,64,46,3, - 70,180,142,177,159,86,181,159,41,141,202>>}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.1">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.6">>}, - <<99,155,46,135,73,225,27,135,185,235,66,242,173,50,93,22,28,23,11,57,178, - 136,172,141,4,196,243,31,143,8,35,235>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.3.4">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.3">>}, - <<98,147,105,231,24,165,10,47,203,35,194,16,182,242,235,47,208,139,10,106, - 44,94,218,222,79,202,36,205,163,104,172,19>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.4.2">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.1.1">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>}, - <<166,14,116,40,77,58,146,60,222,101,192,10,57,221,69,66,253,125,167,194,46, - 131,133,192,55,138,212,25,197,75,46,8>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"4.0.0">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.2">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"1.0.0">>}, - <<104,186,213,50,136,223,34,192,154,2,173,163,162,246,198,21,61,38,39,241,0, - 221,207,182,197,73,6,12,12,124,201,100>>}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"0.3.0">>}, - <<128,143,97,68,230,177,7,27,6,94,239,120,144,128,132,98,39,236,140,208,209, - 97,22,203,135,221,149,155,216,18,239,43>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"1.3.3">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.3.0">>}, - <<243,49,124,145,83,170,55,127,166,185,89,20,120,129,153,155,144,207,208,46, - 107,182,94,252,109,247,132,70,161,188,207,204>>}, - {{outer_checksum,<<"hexpm">>,<<"benchee">>,<<"0.99.0">>}, - <<103,45,142,148,54,71,27,125,91,119,202,91,227,173,105,208,101,85,62,126, - 216,197,219,41,187,61,102,35,120,16,70,24>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.1">>}, - <<220,200,6,171,3,123,85,189,17,164,219,175,110,1,254,197,16,225,235,171,41, - 172,182,83,128,244,240,195,34,240,205,70>>}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.5">>},[]}, - {last_update,{{2020,3,9},{10,43,10}}}, - {{deps,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>},[]}, - {{outer_checksum,<<"hexpm">>,<<"benchee_html">>,<<"0.4.0">>}, - <<170,251,187,150,81,165,231,101,13,123,159,25,62,98,2,0,128,177,162,75,154, - 124,185,199,45,17,191,57,238,255,23,42>>}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"1.5.0">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.2.1">>},[]}, - {{deps,<<"hexpm">>,<<"exjsx">>,<<"3.1.0">>}, - [{<<"hexpm">>,<<"jsx">>,<<"jsx">>,<<"~> 2.4.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.1.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"poison">>,<<"1.0.1">>},nil}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.4.1">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"0.1.2">>}, - {{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - {{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.4">>}, - <<18,52,153,51,188,38,72,236,120,159,155,27,62,139,58,235,92,234,198,54,131, - 247,95,139,203,7,135,0,36,91,135,76>>}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.2.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.8">>}, - <<215,201,232,38,14,156,220,31,178,203,119,226,217,3,149,105,98,193,247,97, - 87,235,130,0,126,198,189,229,218,171,101,210>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.3">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.0.2">>},{{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.6">>,false}]}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.3.1">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"exjsx">>,<<"4.0.0">>}, - <<96,84,136,65,224,33,45,244,1,227,142,99,192,7,142,197,123,51,231,234,73, - 176,50,199,150,204,173,140,222,121,75,92>>}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.4.2">>}, - <<170,252,202,255,79,141,45,31,52,224,172,76,175,193,98,54,166,88,204,228, - 48,180,138,64,56,197,131,141,70,72,161,3>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"0.3.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.2.2">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"benchee">>,<<"0.3.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"jsone">>,<<"1.2.6">>}, - <<62,237,27,195,243,77,87,39,160,17,171,132,162,2,48,244,189,216,187,43,156, - 7,195,173,13,207,65,36,16,35,26,116>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.2.1">>}, - <<154,36,158,30,159,221,180,243,75,252,43,207,43,251,67,191,243,170,98,165, - 95,128,124,114,203,34,73,177,227,145,74,233>>}, - {{outer_checksum,<<"hexpm">>,<<"jsone">>,<<"1.3.0">>}, - <<4,158,11,31,133,208,132,227,248,103,8,40,185,233,250,95,12,139,166,97,1, - 206,158,190,112,254,84,247,65,148,11,179>>}, - {{deps,<<"hexpm">>,<<"json">>,<<"1.2.4">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.8">>,true}, - {<<"hexpm">>,<<"benchee_html">>,<<"benchee_html">>,<<"~> 0.1">>,true}, - {<<"hexpm">>,<<"exjsx">>,<<"exjsx">>,<<"~> 4.0">>,true}, - {<<"hexpm">>,<<"jason">>,<<"jason">>,<<"~> 1.0">>,true}, - {<<"hexpm">>,<<"jsone">>,<<"jsone">>,<<"~> 1.4">>,true}, - {<<"hexpm">>,<<"poison">>,<<"poison">>,<<"~> 3.0">>,true}, - {<<"hexpm">>,<<"tiny">>,<<"tiny">>,<<"~> 1.0">>,true}]}, - {{deps,<<"hexpm">>,<<"jsone">>,<<"1.1.0">>},[]}, - {{timestamp,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.2">>}, - <<125,82,45,99,193,63,55,10,240,85,62,39,241,17,175,46,151,249,79,82,241, - 156,152,189,85,126,220,205,83,211,23,237>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.3.2">>}, - [{<<"hexpm">>,<<"parallel_stream">>,<<"parallel_stream">>,<<"~> 1.0.3">>, - false}]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.3.1">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.5">>,false}]}, - {{deps,<<"hexpm">>,<<"recon">>,<<"2.3.4">>},[]}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"~>2.5.0">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"json">>,<<"1.2.3">>}, - <<71,184,128,141,153,7,132,52,53,26,145,255,10,183,239,226,166,131,80,36, - 207,53,156,206,25,80,127,16,58,100,69,117>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.2.1">>}, - <<97,30,5,50,254,221,69,36,250,157,80,45,165,247,59,154,203,174,132,156,144, - 9,236,40,125,217,158,208,156,33,90,65>>}, - {{outer_checksum,<<"hexpm">>,<<"jason">>,<<"1.0.0-rc.1">>}, - <<157,73,129,3,242,145,156,200,208,187,143,59,95,44,211,110,52,23,4,176,180, - 198,37,162,255,245,156,162,15,247,71,41>>}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.3">>}, - <<89,208,170,245,32,158,59,80,103,69,138,80,59,168,11,115,136,213,101,180, - 134,161,131,77,199,158,216,113,202,46,175,195>>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.4">>}, - <<174,118,224,106,125,26,72,9,28,95,84,35,200,94,240,134,206,108,19,85,140, - 94,14,149,211,176,78,31,86,195,90,134>>}, - {{deps,<<"hexpm">>,<<"benchee_html">>,<<"0.6.0">>}, - [{<<"hexpm">>,<<"benchee">>,<<"benchee">>,<<"~> 0.14">>,false}, - {<<"hexpm">>,<<"benchee_json">>,<<"benchee_json">>,<<"~> 0.6">>,false}]}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"1.0.1">>}, - <<6,226,97,227,131,224,52,157,213,38,1,41,250,163,1,194,149,246,193,17,186, - 67,197,125,164,250,148,154,32,14,198,10>>}, - {{deps,<<"hexpm">>,<<"observer_cli">>,<<"1.0.9">>}, - [{<<"hexpm">>,<<"recon">>,<<"recon">>,<<"2.3.2">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - <<203,247,114,93,87,123,181,54,15,26,132,29,231,129,200,59,140,131,56,79, - 158,10,194,88,127,8,19,128,121,36,154,200>>}, - {{outer_checksum,<<"hexpm">>,<<"json">>,<<"2.1.0-SNAPSHOT">>}, - <<64,95,116,217,92,226,6,190,163,171,188,216,241,63,34,144,224,191,223,138, - 75,210,50,253,14,103,194,242,36,158,40,119>>}, - {{timestamp,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.2">>}, - {{2020,3,9},{14,52,5}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>},[]}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.4.0">>}, - <<253,149,195,248,33,112,38,177,155,78,193,134,22,8,84,223,29,230,41,51,192, - 33,56,76,84,98,69,66,3,239,206,224>>}, - {{retired,<<"hexpm">>,<<"json">>,<<"2.0.1-SNAPSHOT">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.5.0">>},nil}, - {{retired,<<"hexpm">>,<<"json">>,<<"1.1.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.5.0">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"jason">>,<<"1.1.1">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"observer_cli">>,<<"1.0.7">>},nil}, - {{outer_checksum,<<"hexpm">>,<<"tiny">>,<<"1.0.1">>}, - <<18,120,164,87,222,184,217,145,53,195,120,183,31,102,242,30,40,61,138,222, - 164,38,37,42,63,143,94,0,60,83,106,123>>}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.2.0">>},{{2020,3,9},{14,52,5}}}, - {{inner_checksum,<<"hexpm">>,<<"stdout_formatter">>,<<"0.2.3">>}, - <<236,36,134,141,134,25,117,122,104,240,121,131,87,199,25,8,7,161,207,196, - 44,233,12,24,194,55,96,229,146,73,162,26>>}, - {{inner_checksum,<<"hexpm">>,<<"poison">>,<<"2.0.1">>}, - <<129,36,138,54,209,182,2,177,126,166,85,107,250,137,82,73,32,145,240,26, - 240,81,115,222,17,248,178,151,226,187,240,136>>}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.3.1">>},{{2020,3,9},{14,52,0}}}, - {{inner_checksum,<<"hexpm">>,<<"csv">>,<<"1.3.0">>}, - <<38,30,64,121,8,118,140,103,246,243,173,85,119,190,179,66,64,69,24,207,58, - 141,28,37,249,112,76,8,167,126,137,109>>}, - {{registry_etag,<<"hexpm">>,<<"recon">>}, - <<"\"7e2ca92025513cd89d7aafccb513b5fe\"">>}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.5.2">>}, - <<110,147,67,127,116,169,151,8,6,138,50,183,103,176,36,50,209,19,137,98,117, - 66,20,9,227,1,141,152,146,54,166,90>>}, - {{timestamp,<<"hexpm">>,<<"exjsx">>,<<"3.2.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"csv">>,<<"2.2.0">>}, - <<72,227,29,177,140,35,191,51,200,56,93,63,114,178,112,129,75,142,94,101,7, - 17,152,154,152,201,40,95,125,184,34,154>>}, - {{retired,<<"hexpm">>,<<"benchee_html">>,<<"1.0.0">>},nil}, - {{retired,<<"hexpm">>,<<"jsone">>,<<"1.4.0">>},nil}, - {{deps,<<"hexpm">>,<<"jason">>,<<"1.0.1">>}, - [{<<"hexpm">>,<<"decimal">>,<<"decimal">>,<<"~> 1.0">>,true}]}, - {{timestamp,<<"hexpm">>,<<"csv">>},{{2020,3,9},{14,52,5}}}, - {{retired,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.0">>},nil}, - {{inner_checksum,<<"hexpm">>,<<"observer_cli">>,<<"1.3.0">>}, - <<206,105,157,49,102,44,52,218,135,131,255,23,171,152,12,99,80,186,80,189, - 130,71,85,105,219,224,255,146,149,83,217,202>>}, - {{retired,<<"hexpm">>,<<"poison">>,<<"2.1.0">>},nil}, - {{deps,<<"hexpm">>,<<"poison">>,<<"1.5.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"jsone">>,<<"1.4.1">>},{{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"poison">>,<<"4.0.0">>}, - <<100,138,6,120,148,118,36,173,36,113,234,134,221,36,183,85,146,46,13,252, - 198,141,103,234,183,3,39,143,217,90,195,253>>}, - {{retired,<<"hexpm">>,<<"csv">>,<<"0.2.0">>},nil}, - {{timestamp,<<"hexpm">>,<<"recon">>,<<"2.5.0">>},{{2020,3,9},{14,52,0}}}, - {{deps,<<"hexpm">>,<<"benchee">>,<<"0.8.0">>}, - [{<<"hexpm">>,<<"deep_merge">>,<<"deep_merge">>,<<"~> 0.1">>,false}]}, - {{inner_checksum,<<"hexpm">>,<<"benchee">>,<<"0.1.0">>}, - <<132,214,193,90,236,232,30,206,109,107,142,183,225,14,174,108,7,224,0,27, - 148,211,234,62,159,16,168,136,82,238,143,85>>}, - {{deps,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},[]}, - {{timestamp,<<"hexpm">>,<<"observer_cli">>,<<"1.0.3">>}, - {{2020,3,9},{14,52,5}}}, - {{outer_checksum,<<"hexpm">>,<<"parallel_stream">>,<<"1.0.5">>}, - <<158,233,172,54,50,92,173,255,53,126,95,219,121,194,116,101,7,77,182,127, - 154,240,15,64,126,21,191,100,146,57,149,10>>}, - {{timestamp,<<"hexpm">>,<<"csv">>,<<"1.0.1">>},{{2020,3,9},{14,52,5}}}, - {{timestamp,<<"hexpm">>,<<"benchee">>,<<"0.7.0">>},{{2020,3,9},{14,52,5}}}]. +[{read_concurrency,false},{write_concurrency,false},{compressed,false},{heir,none},{name,'Elixir.Hex.Registry.Server'},{named_table,false},{type,set},{keypos,1},{protection,protected}]. +[{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},[]},{{registry_etag,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},<<34,98,53,51,54,98,98,50,97,98,99,55,57,57,51,99,54,57,97,48,55,101,56,53,55,48,101,56,52,101,49,49,51,34>>},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},<<164,193,167,195,13,33,81,182,228,151,108,178,245,44,10,29,73,236,150,90,251,115,126,216,74,104,75,196,40,77,22,39>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},<<255,66,34,18,179,195,245,216,105,141,174,159,245,174,90,98,169,63,129,206,76,236,147,76,248,14,196,63,254,173,29,161>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<156,225,30,255,90,116,160,123,175,55,135,178,177,157,215,152,114,77,41,169,195,164,146,164,29,243,159,106,246,134,218,14>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},<<110,216,76,213,101,167,236,112,146,0,220,53,152,58,23,181,31,118,152,56,180,196,142,200,193,64,28,253,16,50,224,254>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},<<113,54,204,115,154,206,41,95,199,76,55,143,51,105,158,81,69,190,173,79,220,27,71,153,130,45,2,135,72,145,54,251>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},<<152,228,237,44,134,182,51,223,155,1,144,214,179,191,56,188,46,56,91,166,32,15,104,32,31,181,117,211,153,9,129,108>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},<<59,151,167,246,49,247,35,53,197,202,105,173,82,159,74,171,245,78,9,177,14,190,12,114,5,182,175,122,13,146,27,148>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,51,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<236,36,134,141,134,25,117,122,104,240,121,131,87,199,25,8,7,161,207,196,44,233,12,24,194,55,96,229,146,73,162,26>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},<<9,34,102,42,94,22,87,147,197,30,24,201,196,184,166,184,228,130,97,241,131,192,210,137,82,91,53,245,135,195,225,84>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},<<240,71,105,128,125,55,3,221,199,75,125,172,252,7,168,137,217,240,195,33,243,208,145,182,109,158,2,193,87,193,164,125>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},<<253,149,195,248,33,112,38,177,155,78,193,134,22,8,84,223,29,230,41,51,192,33,56,76,84,98,69,66,3,239,206,224>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},<<189,191,147,143,9,109,63,57,160,105,59,91,253,243,226,107,192,112,4,217,179,55,248,204,180,36,64,115,180,82,185,227>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},<<121,217,236,185,73,178,123,204,43,90,3,121,139,93,113,250,129,148,13,153,252,240,217,106,194,6,142,94,242,154,218,192>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},<<251,60,197,214,171,222,88,2,7,87,132,147,178,216,96,62,100,143,44,93,168,223,234,187,26,186,196,121,147,150,228,33>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},<<228,42,101,145,72,233,247,177,231,215,28,123,93,36,153,124,215,189,123,114,215,227,30,165,194,219,22,116,184,238,231,136>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},<<58,213,138,231,135,233,199,201,77,215,206,218,59,88,126,194,198,70,4,86,62,4,155,42,14,139,170,250,232,50,173,219>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,49,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},<<17,125,88,18,60,172,60,104,2,0,82,72,191,3,237,32,165,177,77,221,30,57,216,108,122,229,40,150,2,53,82,144>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},<<169,112,194,61,151,0,174,120,66,181,38,197,118,119,230,227,241,8,148,180,41,82,70,150,234,213,71,233,48,35,145,192>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},<<188,183,85,161,111,172,145,202,215,155,254,159,195,88,91,176,123,147,49,229,12,254,52,32,162,75,204,45,115,87,9,174>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},<<79,120,74,86,127,41,153,226,141,54,193,51,86,73,95,69,95,173,79,184,140,102,169,194,219,96,171,43,96,209,20,121>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},<<221,82,137,92,76,143,33,54,94,138,69,110,63,63,180,18,123,84,143,1,54,24,160,87,216,253,118,164,42,200,244,239>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},<<105,239,141,192,74,76,174,199,209,37,41,162,55,199,180,155,139,177,255,48,198,228,44,186,234,71,245,179,206,145,253,189>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},<<71,99,182,154,138,119,189,119,210,111,71,125,25,100,40,183,65,38,26,118,18,87,255,28,249,39,83,160,212,210,74,99>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},<<165,235,69,46,242,66,123,154,112,20,171,100,152,141,178,66,81,134,95,142,111,174,125,163,240,100,177,227,178,61,51,219>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},<<54,23,39,196,84,172,47,207,55,141,38,16,79,102,79,157,134,244,254,184,32,110,4,45,190,24,116,214,109,132,163,224>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},<<76,120,211,230,117,249,239,248,133,203,226,82,200,154,143,193,210,251,128,60,13,3,169,20,40,30,88,120,52,224,148,49>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},<<212,204,201,230,181,103,60,98,187,149,202,83,251,122,126,231,244,244,217,75,159,14,143,136,177,239,8,191,215,210,33,61>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},<<28,124,91,212,145,116,144,180,221,64,56,135,104,117,230,153,77,150,87,211,161,134,95,252,236,98,167,183,59,95,216,9>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,56,46,48>>,false}]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},<<61,98,119,99,233,68,81,236,33,113,230,208,52,205,163,1,55,45,225,205,240,11,189,224,214,126,14,174,103,116,102,219>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},<<75,20,25,238,44,60,158,230,138,146,199,152,64,3,5,112,242,108,133,120,192,247,226,66,82,255,85,185,75,237,82,22>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},<<170,203,72,169,240,220,55,111,21,223,48,101,202,33,132,115,141,215,201,81,80,174,216,60,40,206,11,171,181,110,91,152>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},<<241,44,133,153,45,45,129,212,251,122,96,34,90,55,175,239,58,240,6,152,35,204,50,26,37,233,223,157,59,203,110,210>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},<<120,45,32,1,18,21,106,160,173,174,245,209,65,156,42,204,229,182,91,99,69,210,69,48,241,27,87,153,24,77,152,231>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},<<44,214,114,64,165,78,156,210,97,107,200,60,12,53,45,71,248,123,204,210,236,89,158,206,237,192,11,203,233,6,63,7>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},<<243,49,124,145,83,170,55,127,166,185,89,20,120,129,153,155,144,207,208,46,107,182,94,252,109,247,132,70,161,188,207,204>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},<<252,245,217,166,247,209,141,138,92,106,52,103,215,189,249,253,215,44,167,105,222,97,216,91,58,2,5,112,196,74,63,240>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},[]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},<<158,101,146,10,32,96,187,77,208,152,73,19,65,107,108,14,183,75,77,107,232,175,32,45,37,244,137,191,158,60,8,166>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,52>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,54>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},<<87,63,110,101,253,118,8,187,24,230,175,36,91,213,105,165,181,56,126,4,204,76,7,123,31,218,233,153,8,74,169,85>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},<<181,87,39,178,6,218,185,111,235,2,82,103,229,193,34,221,180,72,245,91,102,72,249,21,107,141,72,18,21,216,2,144>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},<<76,104,194,190,145,0,21,20,239,142,210,98,97,234,3,141,71,153,18,133,124,86,82,133,2,177,233,13,195,130,236,139>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},<<78,149,60,214,171,60,247,71,60,37,144,249,155,72,255,149,21,190,25,113,189,191,237,213,92,218,18,14,251,45,35,205>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},<<25,16,86,131,36,155,248,172,214,240,77,236,61,14,246,80,210,82,104,170,92,177,100,233,182,61,109,139,152,177,70,187>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},<<81,54,235,143,128,32,164,64,245,248,148,241,193,30,127,169,72,3,21,178,230,227,152,176,228,102,9,203,150,62,118,138>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},<<9,86,102,121,241,147,49,21,246,24,158,108,78,32,94,53,170,234,28,174,220,248,67,135,92,62,182,94,236,131,228,136>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},<<108,84,138,208,244,145,100,149,167,137,119,103,74,37,24,71,134,159,133,181,18,91,124,42,68,218,49,120,149,90,223,209>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},<<14,193,72,255,99,89,118,57,179,255,140,195,239,82,60,251,70,105,244,250,26,46,146,30,5,132,156,143,149,12,124,109>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<101,97,114,109,97,114,107>>,<<101,97,114,109,97,114,107>>,<<62,61,32,48,46,48,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,51,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,54>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},<<222,149,85,197,24,59,28,187,92,189,218,199,35,160,58,204,223,104,105,205,147,48,244,80,100,221,68,17,238,6,11,161>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},<<170,251,187,150,81,165,231,101,13,123,159,25,62,98,2,0,128,177,162,75,154,124,185,199,45,17,191,57,238,255,23,42>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,52,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},<<208,31,56,94,20,110,182,218,61,93,90,7,40,44,144,82,47,110,7,231,100,195,38,27,230,155,172,172,159,182,64,41>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},<<80,24,35,9,68,201,101,196,109,80,116,126,15,148,188,24,34,15,177,124,65,58,146,14,145,238,25,134,200,164,239,91>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},<<164,124,235,26,172,111,178,141,112,119,136,220,212,90,122,233,169,153,62,122,65,64,97,190,190,192,129,132,225,94,55,121>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},<<40,31,44,187,67,159,227,192,67,119,62,230,200,49,114,171,216,3,38,220,198,21,63,100,48,228,212,230,177,77,126,157>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},<<72,67,100,98,6,104,157,95,209,160,235,61,14,8,188,194,70,39,52,17,101,196,9,111,104,119,219,243,240,116,38,190>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},<<254,147,80,109,5,37,42,216,45,114,37,127,101,73,170,177,22,100,8,138,19,7,242,111,10,177,172,177,114,184,195,91>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},<<251,215,141,211,229,171,186,220,23,221,216,153,5,0,47,109,32,160,48,70,247,85,90,96,152,210,138,159,20,254,175,88>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},<<172,88,31,32,233,197,199,224,203,127,65,143,86,7,39,141,113,97,28,101,221,242,233,48,101,241,244,206,17,221,84,24>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},nil},{{tarball_etag,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<34,100,51,53,52,99,57,102,99,98,102,100,53,52,53,53,54,98,56,101,56,101,101,102,54,99,48,53,56,97,49,53,50,34>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},<<23,12,23,28,231,246,221,112,200,88,6,81,84,163,48,91,133,100,131,60,109,204,161,126,16,182,118,202,49,234,151,111>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},<<242,244,244,96,98,58,111,21,70,131,171,174,52,53,37,37,225,217,24,56,2,103,205,189,148,154,7,186,87,80,50,72>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},<<14,251,252,49,4,90,210,247,90,72,103,59,209,190,250,138,106,88,85,233,59,140,49,23,174,215,215,218,141,230,91,113>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},<<80,233,140,137,253,228,76,91,121,125,96,45,137,62,163,15,126,225,180,91,77,1,174,170,62,167,66,214,185,139,30,238>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},<<172,251,194,45,45,206,209,25,136,180,61,243,69,68,241,184,117,230,1,196,19,143,180,148,98,227,234,158,87,172,94,155>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},<<186,119,162,144,135,118,51,176,15,182,15,212,137,226,228,140,9,196,152,138,4,227,160,2,68,188,251,111,6,157,247,36>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},<<211,69,204,226,233,242,86,144,250,158,83,33,6,112,113,98,221,93,141,153,138,197,64,226,68,231,158,219,138,143,60,44>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},<<21,65,73,21,16,131,0,130,100,90,163,191,158,38,141,151,254,169,191,217,126,7,137,84,112,244,23,246,108,243,192,116>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},[]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},<<126,106,131,77,27,49,48,195,34,70,205,62,157,56,3,252,52,28,167,175,148,54,47,51,33,56,139,197,165,119,161,26>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},<<81,222,127,212,160,25,247,150,107,51,19,62,173,183,197,186,145,158,93,130,159,185,169,5,79,1,43,225,62,143,157,1>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},<<98,94,189,100,211,58,226,230,82,1,194,193,77,108,133,194,124,200,182,143,45,13,211,120,40,253,233,198,146,13,209,49>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},<<33,156,184,97,3,253,149,117,90,224,88,186,192,215,182,206,78,182,125,143,226,108,75,46,148,126,124,62,166,8,74,14>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},<<120,201,76,85,220,135,233,31,246,237,228,245,244,103,37,10,222,151,49,232,233,82,110,222,32,154,82,16,238,82,134,146>>},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},<<28,55,228,101,104,121,52,189,79,135,20,25,68,145,107,252,74,110,96,231,95,211,42,107,78,234,230,154,136,205,203,158>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},<<225,176,196,235,165,145,73,137,247,161,169,173,159,137,147,207,116,118,14,70,72,134,240,253,34,10,98,51,126,52,121,20>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<61,45,231,167,16,185,190,212,207,189,174,4,25,217,139,25,133,99,75,216,204,31,38,239,149,118,194,235,154,166,179,94>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},<<154,36,158,30,159,221,180,243,75,252,43,207,43,251,67,191,243,170,98,165,95,128,124,114,203,34,73,177,227,145,74,233>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},<<43,187,237,224,72,117,138,214,127,122,117,84,47,144,246,148,202,128,50,50,162,182,127,221,127,159,218,152,141,186,154,137>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},<<139,58,59,201,53,11,160,69,50,244,82,198,7,170,36,213,157,224,58,54,162,131,139,30,161,124,39,70,70,226,243,213>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},<<16,58,136,179,90,253,98,119,4,200,46,74,189,12,206,172,147,54,164,224,65,214,227,196,113,15,233,60,72,73,65,147>>},{{versions,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},[<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52>>,<<49,46,48,46,53>>,<<49,46,48,46,55>>,<<49,46,48,46,56>>,<<49,46,48,46,57>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,51,46,51>>,<<49,46,51,46,52>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<49,46,52,46,53>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>,<<49,46,53,46,51>>]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},<<213,76,4,154,169,73,135,48,92,115,232,78,66,2,91,38,231,216,196,73,125,253,121,224,196,135,233,238,94,170,246,110>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},<<142,227,116,69,141,59,139,35,236,153,58,203,155,86,56,14,206,241,51,59,106,235,87,206,25,68,246,182,43,108,69,44>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{registry_etag,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},<<34,98,101,99,102,50,52,49,99,55,102,101,99,54,55,51,98,98,54,98,55,54,56,99,56,55,52,57,102,53,52,57,98,34>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},<<200,135,134,160,114,7,168,11,7,30,163,142,26,113,168,171,215,50,62,203,247,5,102,1,39,0,155,32,56,197,161,209>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},<<67,61,148,107,14,71,85,225,134,254,86,69,104,234,212,245,147,176,209,83,55,252,255,169,94,215,213,184,166,97,38,112>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},<<35,233,217,97,4,204,233,231,74,99,53,111,40,10,215,199,171,200,238,104,164,95,176,81,208,132,82,54,188,148,56,108>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},<<24,229,217,170,84,18,236,6,60,249,113,155,207,231,59,249,144,197,254,213,201,163,200,66,44,43,93,149,41,252,139,13>>},{{versions,<<104,101,120,112,109>>,<<106,115,111,110>>},[<<48,46,51,46,48>>,<<48,46,51,46,50>>,<<48,46,51,46,51>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,50,46,53>>,<<49,46,51,46,48>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},<<132,214,193,90,236,232,30,206,109,107,142,183,225,14,174,108,7,224,0,27,148,211,234,62,159,16,168,136,82,238,143,85>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},<<174,118,224,106,125,26,72,9,28,95,84,35,200,94,240,134,206,108,19,85,140,94,14,149,211,176,78,31,86,195,90,134>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},<<189,14,10,17,147,53,136,155,170,147,205,6,251,153,1,163,63,243,132,204,247,131,245,35,135,32,122,194,183,161,148,56>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},<<7,70,231,172,135,119,124,3,107,104,136,211,75,235,196,163,110,83,65,104,59,87,163,225,184,103,14,93,9,182,129,82>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},<<198,111,234,137,186,120,98,185,73,1,186,240,135,18,133,233,183,60,173,137,197,253,181,122,99,134,210,173,207,41,89,62>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},<<120,238,232,187,56,240,190,226,231,54,115,215,27,199,95,198,251,1,245,111,13,35,231,105,162,110,238,54,85,72,122,56>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},{{2020,5,25},{14,32,6}}},{{registry_etag,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},<<34,102,56,48,48,54,101,53,100,53,97,55,56,98,48,56,97,51,56,100,98,49,52,50,57,57,49,55,55,55,57,97,57,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},<<176,61,237,234,103,169,146,35,162,234,249,241,38,76,227,113,84,86,77,232,153,253,61,139,154,33,177,166,253,100,175,231>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},<<45,62,40,47,114,196,225,164,195,164,63,97,249,39,178,20,202,237,38,172,118,27,96,90,20,228,10,132,97,38,13,166>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},<<130,163,223,22,68,204,169,183,106,75,126,192,23,189,164,63,18,214,96,37,232,245,60,212,77,210,176,19,164,69,251,147>>},{{versions,<<104,101,120,112,109>>,<<106,115,111,110,101>>},[<<49,46,48,46,48>>,<<49,46,49,46,48>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,50,46,53>>,<<49,46,50,46,54>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<49,46,52,46,53>>,<<49,46,52,46,54>>,<<49,46,52,46,55>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},<<19,84,186,128,5,249,121,193,119,86,31,224,139,131,202,251,174,67,243,4,110,138,108,242,9,19,43,137,103,182,219,23>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},<<0,214,237,215,48,254,153,35,132,121,150,70,157,1,139,250,210,149,54,105,189,43,99,91,7,84,206,45,213,159,166,37>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},<<227,235,78,191,17,38,38,39,240,183,155,79,209,224,120,250,78,194,190,249,12,248,59,124,125,33,79,110,230,167,191,174>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<212,46,32,5,65,22,196,157,82,66,211,255,158,25,19,172,204,235,230,1,95,68,157,110,49,42,91,193,96,231,154,98>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},<<233,250,128,26,6,80,103,232,165,96,68,74,199,144,121,115,174,138,214,151,226,6,200,187,26,66,45,159,37,206,202,197>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},<<85,88,160,32,2,252,151,72,122,83,69,38,81,20,195,160,164,127,14,44,248,65,131,174,100,131,18,12,40,181,169,45>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},<<59,50,222,86,143,18,144,1,225,207,137,204,91,207,214,219,177,38,15,171,178,207,138,52,16,205,192,246,52,235,161,130>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},nil},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},{{2020,5,25},{14,32,1}}},{{registry_etag,<<104,101,120,112,109>>,<<114,101,99,111,110>>},<<34,55,101,50,99,97,57,50,48,50,53,53,49,51,99,100,56,57,100,55,97,97,102,99,99,98,53,49,51,98,53,102,101,34>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,53>>},<<56,183,89,231,65,206,79,134,87,102,151,38,186,237,121,114,96,39,96,147,19,252,40,47,90,103,30,25,132,140,33,53>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},<<110,147,67,127,116,169,151,8,6,138,50,183,103,176,36,50,209,19,137,98,117,66,20,9,227,1,141,152,146,54,166,90>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},<<245,81,152,101,10,142,192,29,62,252,4,121,122,190,85,12,125,2,62,127,248,181,9,243,115,207,147,48,50,4,155,216>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},<<55,62,180,247,50,31,137,138,214,119,41,153,243,13,175,101,249,243,142,29,61,212,215,152,215,168,45,59,18,63,225,211>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},<<93,43,197,39,177,127,29,127,117,31,104,29,56,234,57,136,166,142,206,162,41,215,41,123,71,219,82,241,176,26,149,42>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},<<42,21,119,134,10,1,228,200,30,114,228,168,156,94,55,129,98,9,139,162,0,16,146,103,211,28,118,154,142,200,39,5>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{tarball_etag,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<34,101,48,57,54,101,57,49,48,55,97,102,50,98,57,48,48,54,50,54,102,98,57,54,49,48,54,57,51,55,50,50,101,34>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},<<10,118,11,81,162,17,78,11,198,237,70,204,202,205,37,92,250,29,159,66,54,195,156,177,113,62,201,78,95,174,197,22>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},<<8,57,84,123,158,93,199,206,138,139,153,28,158,125,154,234,48,58,197,223,224,74,57,54,130,230,113,175,14,4,182,228>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},<<158,233,172,54,50,92,173,255,53,126,95,219,121,194,116,101,7,77,182,127,154,240,15,64,126,21,191,100,146,57,149,10>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},<<215,39,177,232,193,56,141,13,63,26,138,145,247,217,17,174,245,221,100,108,150,7,67,88,21,165,137,133,130,165,50,15>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},<<203,247,114,93,87,123,181,54,15,26,132,29,231,129,200,59,140,131,56,79,158,10,194,88,127,8,19,128,121,36,154,200>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},<<144,31,247,139,57,199,84,251,77,111,215,45,207,13,189,57,137,103,187,210,228,213,156,8,212,215,170,68,167,61,233,29>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},<<129,61,183,144,158,154,162,11,47,77,66,105,39,152,190,239,122,67,6,145,180,36,208,230,176,143,124,177,23,39,199,33>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},<<159,1,192,129,120,215,122,101,122,54,82,135,8,70,212,202,238,122,123,113,202,50,151,29,247,206,87,192,121,218,111,222>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},[]},{{tarball_etag,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<34,101,102,98,55,57,99,97,48,99,101,49,49,97,51,99,99,52,55,51,52,48,102,48,57,100,49,50,52,102,53,53,53,34>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},[]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},{{2020,5,25},{14,32,1}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},<<185,80,65,252,17,144,118,152,187,77,64,117,190,80,75,6,0,168,234,119,129,196,236,127,27,240,142,115,235,238,108,37>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},<<103,45,142,148,54,71,27,125,91,119,202,91,227,173,105,208,101,85,62,126,216,197,219,41,187,61,102,35,120,16,70,24>>},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},<<165,51,161,218,40,55,86,236,147,215,126,152,4,45,49,181,239,211,135,95,108,92,60,238,204,108,216,45,65,12,228,128>>},{version,3},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},<<102,254,225,234,245,54,52,125,73,57,66,203,94,8,83,33,197,30,128,222,18,79,240,15,75,38,81,135,11,145,155,153>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},<<220,199,223,5,177,219,110,77,26,62,164,3,245,148,210,223,129,195,79,185,24,146,201,196,194,204,109,44,245,156,34,154>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},<<18,134,167,155,171,47,24,153,34,1,52,218,249,166,149,88,106,240,14,167,25,104,230,205,137,211,211,175,223,124,236,186>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},<<65,109,94,153,196,194,139,118,254,70,45,153,185,188,212,77,72,28,207,75,64,118,138,103,220,169,212,16,127,162,167,173>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},<<144,235,14,1,159,220,17,222,131,168,140,108,26,139,190,153,105,68,81,76,246,187,206,222,7,44,143,34,45,28,113,35>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},<<155,164,209,166,168,242,208,178,113,109,226,178,165,204,43,170,204,126,246,97,224,35,89,184,212,159,28,14,122,140,94,203>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},<<100,128,181,191,88,169,36,0,19,228,144,60,75,75,247,96,128,68,39,162,206,78,78,248,86,100,248,242,7,75,45,130>>},{{versions,<<104,101,120,112,109>>,<<116,105,110,121>>},[<<49,46,48,46,48>>,<<49,46,48,46,49>>]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},<<34,47,127,11,94,117,136,177,233,233,183,62,72,148,15,18,212,59,190,8,196,116,176,143,213,126,249,135,71,209,197,102>>},{{versions,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,50,46,49>>,<<48,46,50,46,50>>,<<48,46,50,46,51>>]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},<<100,77,109,87,190,251,34,200,225,155,50,77,238,25,215,59,28,0,69,101,0,152,97,168,246,76,104,183,185,230,77,191>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},<<4,158,11,31,133,208,132,227,248,103,8,40,185,233,250,95,12,139,166,97,1,206,158,190,112,254,84,247,65,148,11,179>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},<<19,59,231,97,129,14,192,233,78,5,212,21,105,68,255,195,93,2,214,168,143,168,253,252,42,242,155,165,62,173,179,119>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},<<44,187,218,100,149,12,13,159,201,60,175,106,184,221,155,49,232,55,50,164,156,21,248,17,153,78,214,142,229,155,45,213>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},<<196,149,38,14,55,137,176,144,88,147,32,164,221,109,151,69,54,147,217,186,43,222,120,167,11,98,32,205,246,88,203,255>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},<<37,105,199,33,33,80,209,87,165,122,53,119,190,202,207,162,227,70,163,175,234,105,135,8,133,22,134,172,220,210,141,4>>},{{versions,<<104,101,120,112,109>>,<<99,115,118>>},[<<48,46,49,46,48>>,<<48,46,49,46,49>>,<<48,46,50,46,48>>,<<48,46,50,46,49>>,<<48,46,50,46,50>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,49,46,50>>,<<49,46,49,46,51>>,<<49,46,49,46,52>>,<<49,46,49,46,53>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,50,46,50>>,<<49,46,50,46,51>>,<<49,46,50,46,52>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,51,46,50>>,<<49,46,51,46,51>>,<<49,46,52,46,48>>,<<49,46,52,46,49>>,<<49,46,52,46,50>>,<<49,46,52,46,51>>,<<49,46,52,46,52>>,<<50,46,48,46,48,45,114,99,46,48>>,<<50,46,48,46,48>>,<<50,46,49,46,48>>,<<50,46,49,46,49>>,<<50,46,50,46,48>>,<<50,46,51,46,48>>,<<50,46,51,46,49>>]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},<<61,90,253,0,39,181,86,155,45,27,246,54,221,215,222,213,246,123,10,207,61,96,155,88,64,165,71,198,10,30,157,63>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},<<4,169,229,159,101,162,157,117,225,224,34,182,226,186,4,222,45,15,34,138,192,11,179,255,223,212,21,128,10,36,196,109>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},<<98,147,105,231,24,165,10,47,203,35,194,16,182,242,235,47,208,139,10,106,44,94,218,222,79,202,36,205,163,104,172,19>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},<<124,244,152,104,247,49,234,243,108,241,245,95,175,212,116,192,199,114,218,187,214,90,139,9,202,35,89,24,160,252,11,246>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},<<50,25,48,170,147,181,145,180,139,214,172,185,202,47,23,172,134,195,217,48,91,100,215,40,142,33,246,124,247,186,51,129>>},{{registry_etag,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},<<34,55,57,56,102,51,53,100,102,97,101,99,102,102,50,50,100,52,48,53,99,99,55,53,99,53,53,49,101,51,98,54,101,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},<<0,205,217,118,142,181,178,146,99,138,149,170,87,141,218,217,84,199,175,233,128,141,85,146,244,187,66,220,249,187,175,239>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>},<<180,6,194,252,205,234,160,217,78,35,181,227,10,227,214,53,162,212,97,227,99,165,201,198,49,104,151,3,124,240,80,210>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},nil},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<62,61,32,48,46,57,57,46,48,32,97,110,100,32,60,32,50,46,48,46,48>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,49,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},<<77,136,166,207,49,69,174,71,48,206,151,157,195,38,52,182,223,150,54,59,81,222,161,94,32,206,80,184,22,1,35,229>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},<<109,95,128,33,54,36,158,100,249,212,153,112,67,177,51,85,198,234,195,20,33,125,195,177,155,243,103,126,53,26,6,65>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},<<237,244,27,181,79,195,77,80,10,31,149,28,153,82,162,59,134,174,136,12,189,252,117,59,72,225,183,14,63,184,238,19>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},<<209,152,101,72,132,113,137,181,31,30,251,101,209,150,230,171,159,46,136,166,135,138,54,58,236,14,60,119,226,85,6,22>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<114,243,132,15,237,217,79,6,49,92,82,63,108,236,245,180,130,114,51,190,215,174,63,225,53,178,160,235,234,181,225,150>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},<<166,14,116,40,77,58,146,60,222,101,192,10,57,221,69,66,253,125,167,194,46,131,133,192,55,138,212,25,197,75,46,8>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},<<62,26,107,110,184,70,116,187,13,10,189,144,160,61,7,208,27,242,46,141,86,147,149,102,74,41,138,252,89,164,234,49>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,48>>},<<72,36,218,219,1,225,67,149,246,94,157,24,218,41,77,83,67,38,215,238,215,121,150,243,194,47,116,169,135,1,121,235>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},<<232,37,108,31,91,115,43,205,72,90,169,75,192,19,113,243,36,225,20,154,143,38,38,35,64,124,162,204,19,171,8,74>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},<<15,124,250,155,219,35,254,215,33,236,5,65,155,206,226,178,194,26,119,233,38,188,224,222,218,2,155,90,220,113,111,226>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},[]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},<<186,136,54,254,234,75,57,75,183,24,161,97,252,89,162,136,254,1,9,181,0,109,107,223,151,182,186,223,207,111,15,37>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},<<253,248,67,188,168,88,32,58,225,222,22,218,46,226,6,245,52,22,187,218,93,200,201,231,143,67,36,61,228,188,58,254>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},{{2020,5,25},{14,32,1}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},<<243,239,123,26,226,138,85,229,59,140,181,193,29,14,11,100,231,110,56,213,243,232,48,191,46,59,242,204,10,137,216,72>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},<<217,235,99,102,16,224,150,248,111,37,217,164,111,53,169,250,202,195,86,9,167,89,27,59,227,50,110,153,160,72,70,101>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},<<226,111,246,64,124,87,46,227,117,253,144,19,151,219,230,226,40,138,182,110,71,245,89,90,225,173,188,186,123,187,147,88>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},<<109,44,115,99,187,137,175,235,209,36,27,0,51,60,161,178,176,156,97,30,253,148,104,172,0,236,207,120,210,64,58,4>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},<<210,233,151,147,38,189,170,207,80,171,14,82,200,15,83,215,76,222,217,61,26,226,31,171,207,102,52,98,56,204,3,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},<<122,12,59,31,191,255,219,234,254,33,139,68,53,153,79,38,248,249,130,170,186,128,63,164,215,3,211,138,183,43,43,116>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,51,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},<<245,5,175,141,207,193,255,0,92,117,109,254,27,39,65,9,23,223,171,168,134,128,134,39,11,216,165,8,205,67,113,193>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},<<207,101,129,50,228,228,150,173,232,111,35,114,94,237,64,16,52,240,120,216,88,212,173,10,147,76,123,58,58,204,20,178>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},<<245,131,33,140,237,130,38,117,228,132,100,143,162,108,147,61,98,19,115,240,28,108,118,189,0,0,93,123,212,184,46,39>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},<<156,36,97,56,134,110,216,22,150,116,239,84,148,232,205,120,44,210,38,130,113,83,121,236,189,172,19,247,170,149,212,231>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},<<146,48,109,88,81,27,235,226,12,242,50,205,65,94,151,159,216,143,175,226,159,194,63,30,158,27,67,127,162,208,6,180>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},<<129,36,138,54,209,182,2,177,126,166,85,107,250,137,82,73,32,145,240,26,240,81,115,222,17,248,178,151,226,187,240,136>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},<<163,31,253,175,119,73,79,241,45,108,44,156,176,50,53,212,55,53,150,210,250,246,46,229,185,156,26,228,121,97,132,0>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},<<167,118,4,141,83,165,143,243,181,212,72,231,82,105,45,47,47,255,248,233,98,241,72,127,19,182,62,184,86,155,14,126>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},<<205,90,251,157,183,240,209,148,135,87,47,162,129,133,182,212,222,100,127,20,35,87,70,130,78,119,179,19,155,121,183,37>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,49>>},<<18,120,55,62,72,14,61,187,172,80,45,35,75,247,111,77,173,185,164,174,22,208,182,58,172,75,199,249,79,211,178,228>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,50>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,53>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},<<130,13,172,184,217,233,253,211,206,164,132,51,239,127,49,178,246,251,249,233,63,255,40,220,35,138,5,190,195,76,57,87>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},<<6,79,119,21,219,121,136,118,175,30,184,40,124,132,98,109,32,87,82,237,176,225,163,143,209,38,34,47,103,105,237,172>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},<<139,0,144,177,58,66,52,58,215,9,237,8,129,17,253,64,169,228,194,209,129,158,246,193,230,1,52,113,52,237,52,208>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},<<128,143,97,68,230,177,7,27,6,94,239,120,144,128,132,98,39,236,140,208,209,97,22,203,135,221,149,155,216,18,239,43>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},<<220,200,6,171,3,123,85,189,17,164,219,175,110,1,254,197,16,225,235,171,41,172,182,83,128,244,240,195,34,240,205,70>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},nil},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},<<99,150,69,207,172,50,94,52,147,129,103,178,114,186,224,121,31,234,58,52,207,50,194,149,37,171,241,211,35,237,76,24>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},<<71,184,128,141,153,7,132,52,53,26,145,255,10,183,239,226,166,131,80,36,207,53,156,206,25,80,127,16,58,100,69,117>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},<<84,125,88,219,189,134,76,10,86,12,12,163,120,158,232,132,137,116,232,197,23,205,183,130,124,51,3,227,180,46,117,77>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},<<144,237,193,93,248,153,119,172,98,173,124,194,8,202,22,226,66,122,169,193,130,137,238,155,243,134,208,96,117,166,219,140>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},<<78,125,235,70,12,170,104,171,2,130,210,4,228,58,85,50,98,180,93,64,169,61,208,16,154,133,137,103,171,28,143,191>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},<<123,233,243,178,104,142,253,204,104,144,98,204,210,30,52,14,229,253,62,249,220,209,66,19,96,52,190,181,237,28,46,35>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},<<7,202,4,16,92,47,46,71,50,244,235,97,134,62,24,231,241,183,181,11,109,30,227,30,126,23,205,198,18,154,77,225>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},<<114,39,232,58,184,30,71,83,97,1,37,210,81,187,247,140,153,22,127,190,127,147,26,140,191,188,62,218,133,38,37,156>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},[]},{{versions,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,51,46,48>>,<<48,46,51,46,49>>,<<48,46,52,46,48>>,<<48,46,53,46,48>>,<<48,46,54,46,48>>,<<49,46,48,46,48>>]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},<<204,30,48,54,44,84,234,91,230,196,12,140,160,37,46,105,227,103,226,22,134,157,107,154,241,123,89,58,246,167,104,36>>},{{repo,<<104,101,120,112,109>>},<<104,116,116,112,115,58,47,47,114,101,112,111,46,104,101,120,46,112,109>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},<<109,35,233,51,19,120,181,254,34,48,148,241,46,107,129,154,0,98,25,249,232,203,36,48,2,244,67,227,124,183,31,58>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},{{2020,5,25},{14,32,1}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},<<32,81,15,21,98,72,37,163,109,219,84,162,68,143,219,195,192,253,104,216,90,139,229,208,195,81,73,244,140,232,140,95>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},<<1,123,136,115,118,56,207,113,196,97,112,248,67,81,6,110,253,61,18,28,104,204,142,220,191,198,92,140,70,60,124,188>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},<<227,14,75,190,99,54,83,165,194,218,67,202,180,42,97,98,62,10,204,128,239,64,195,33,188,41,240,214,152,105,123,211>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},[]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},<<37,176,134,181,185,240,219,77,168,137,42,78,21,67,87,112,109,29,219,116,166,190,176,5,234,235,228,11,96,67,46,140>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},<<37,60,24,199,220,111,194,114,144,177,245,7,243,173,198,134,63,67,150,176,153,208,235,57,110,60,14,88,220,254,14,228>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,49,46,48>>},<<254,200,102,14,183,115,62,228,17,123,133,245,87,153,253,56,51,235,118,154,109,247,28,207,137,3,232,220,84,71,207,206>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},<<62,237,27,195,243,77,87,39,160,17,171,132,162,2,48,244,189,216,187,43,156,7,195,173,13,207,65,36,16,35,26,116>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},<<88,138,11,103,237,12,69,178,31,1,133,21,252,71,142,250,200,60,8,134,97,189,88,136,49,228,28,144,115,168,24,251>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},<<245,131,207,95,146,14,6,187,25,227,36,29,139,227,242,66,199,98,16,105,185,125,1,19,130,88,232,183,165,73,55,89>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},<<38,30,64,121,8,118,140,103,246,243,173,85,119,190,179,66,64,69,24,207,58,141,28,37,249,112,76,8,167,126,137,109>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,55>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,50>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},<<239,16,142,100,198,224,134,54,75,159,21,176,7,60,247,148,6,22,112,175,143,51,29,84,93,115,8,192,186,46,103,249>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},<<244,176,215,37,57,47,193,87,159,2,33,179,207,112,170,174,89,243,238,225,104,54,215,40,142,180,84,243,238,92,236,34>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},<<6,226,97,227,131,224,52,157,213,38,1,41,250,163,1,194,149,246,193,17,186,67,197,125,164,250,148,154,32,14,198,10>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},<<110,125,164,69,241,34,142,178,227,58,182,153,25,226,63,248,245,119,212,177,213,64,199,18,55,58,247,109,196,24,107,86>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},<<68,68,200,121,190,50,59,27,19,62,236,82,65,203,132,189,56,33,234,25,76,116,13,117,97,126,16,107,228,116,67,24>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,49>>},<<133,128,81,127,114,25,171,182,235,26,100,132,19,211,194,49,151,164,153,232,238,12,184,91,99,120,17,14,55,59,18,213>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<79,89,119,17,222,247,188,179,135,133,25,245,127,149,88,219,60,157,134,138,238,65,83,94,220,220,32,170,192,179,158,104>>},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},<<139,206,65,63,178,82,52,228,110,97,243,99,163,106,208,125,204,229,50,39,152,45,198,78,39,33,182,228,14,218,121,129>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},<<81,246,136,145,163,141,81,134,186,106,76,12,20,143,89,179,61,32,176,104,22,137,118,253,37,189,252,15,87,52,127,11>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},<<195,69,224,144,224,166,27,243,62,3,133,170,58,211,148,252,183,216,99,227,19,188,63,202,82,46,57,12,127,57,22,110>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},<<42,36,205,38,187,111,153,246,43,113,23,68,183,101,166,2,86,8,105,191,53,227,14,136,204,113,61,233,238,209,143,84>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},<<247,30,210,221,230,58,44,168,206,231,133,5,145,64,254,121,160,122,142,67,65,133,52,199,94,32,21,56,185,12,31,185>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},<<37,197,50,228,112,40,226,226,200,173,244,33,206,111,103,148,142,12,240,189,28,82,181,235,239,93,174,30,205,11,213,57>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},<<102,119,195,9,132,22,101,46,0,16,158,203,221,72,26,117,90,45,1,123,86,124,29,233,255,150,17,77,155,211,112,222>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},<<200,66,29,78,110,110,240,221,124,43,100,255,99,88,159,133,97,17,104,8,250,0,61,221,253,83,96,205,231,187,70,37>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},<<110,242,4,161,146,102,97,79,26,253,146,158,179,97,109,29,238,246,204,16,68,112,136,157,53,109,87,15,3,200,225,9>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},<<77,59,189,15,115,5,117,64,83,222,177,167,29,64,142,111,86,197,20,166,97,46,12,55,146,237,131,198,208,64,83,56>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},<<145,11,107,111,136,138,168,176,247,155,220,168,171,244,206,33,214,76,152,252,135,182,186,139,106,231,242,237,34,85,28,250>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},<<250,117,237,79,53,92,212,171,70,140,37,88,129,113,248,0,42,114,116,211,213,251,55,108,24,130,45,223,199,195,63,31>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},<<55,22,115,65,12,47,255,214,210,143,212,1,46,20,129,42,194,174,6,189,33,143,251,177,14,66,125,144,48,22,123,164>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},<<58,232,236,78,152,164,72,80,212,148,216,68,28,136,150,99,28,41,91,53,65,202,199,145,229,110,160,136,91,167,223,63>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},<<61,185,230,46,44,28,161,19,175,18,170,70,80,45,240,194,135,37,230,108,123,136,85,141,215,79,126,9,208,150,16,97>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},<<156,134,0,130,46,137,78,60,49,190,216,0,199,138,90,4,129,43,113,166,229,165,101,100,38,198,206,1,235,226,207,28>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},<<176,130,101,218,0,52,39,160,71,207,77,50,70,74,228,200,25,201,193,58,33,248,106,182,237,228,254,60,75,17,130,13>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},<<193,161,143,73,89,230,43,235,247,57,148,115,147,245,50,120,152,244,141,35,155,229,70,99,224,124,118,140,27,4,35,95>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},<<54,130,193,140,107,7,72,13,242,18,45,13,175,92,5,69,123,66,193,153,15,25,124,227,222,83,136,78,139,168,52,196>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},nil},{{registry_etag,<<104,101,120,112,109>>,<<101,120,106,115,120>>},<<34,57,55,55,51,50,101,97,48,57,57,99,48,50,52,54,49,48,100,101,98,50,56,48,98,53,99,51,48,53,48,54,57,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},<<130,21,194,175,29,228,95,184,230,195,55,162,116,96,70,107,74,199,100,242,153,214,66,233,10,59,99,52,115,106,73,247>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,48>>},<<2,74,88,8,199,219,172,173,7,228,200,251,223,183,96,201,108,45,40,115,94,67,214,95,26,241,22,67,164,211,163,242>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,52>>},<<63,208,188,230,213,18,226,108,43,136,22,146,172,159,239,246,137,34,85,58,6,102,165,218,96,119,83,232,103,228,27,155>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},[]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},<<237,23,149,15,205,126,155,227,41,243,69,35,98,160,227,11,231,58,5,81,27,11,147,229,222,71,25,123,128,187,20,150>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},<<18,178,40,37,226,47,70,140,2,235,62,75,153,133,243,208,203,141,196,11,155,215,4,115,14,250,17,171,210,112,140,68>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,49>>},<<27,197,191,30,79,210,73,16,65,120,240,136,80,48,188,215,90,69,38,244,210,161,233,118,244,180,40,211,71,97,79,15>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},<<33,232,214,152,48,145,102,15,57,79,68,167,193,31,140,241,244,103,175,178,170,218,31,207,89,194,241,181,144,164,47,104>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},<<119,30,145,149,5,203,227,153,223,95,73,184,162,28,86,175,82,37,84,44,165,200,119,224,186,160,197,3,239,180,230,38>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,51,46,48>>},<<44,107,172,83,3,113,61,27,67,202,111,60,136,23,103,245,123,42,223,102,140,222,48,19,189,113,87,220,101,239,41,156>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},<<206,219,47,35,1,113,230,209,4,35,174,232,206,144,81,40,51,176,126,151,135,71,204,131,107,15,44,3,127,207,119,157>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},<<216,179,241,114,0,115,65,60,54,162,30,86,161,209,17,42,77,103,169,173,14,201,0,67,126,254,208,139,57,229,21,178>>},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},<<140,102,178,169,55,154,72,235,237,246,174,23,188,43,114,195,171,233,203,219,247,130,73,57,128,105,103,50,97,1,195,113>>},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},<<143,86,163,52,2,26,42,207,236,45,147,7,8,208,240,25,53,241,101,76,138,222,121,119,187,241,248,235,72,67,9,114>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},<<211,204,184,64,223,176,111,47,144,166,211,53,181,54,221,7,77,183,72,179,231,245,177,26,182,29,35,149,6,88,94,178>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},<<84,1,54,83,199,46,117,255,59,75,72,115,66,223,229,103,21,201,116,159,249,195,26,125,232,248,77,24,160,158,28,60>>},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},<<34,76,89,87,237,225,240,215,135,68,94,165,238,52,99,79,186,176,6,253,161,30,77,66,240,37,11,97,16,216,237,49>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<185,103,190,43,35,240,246,120,127,171,126,214,129,180,196,90,33,90,129,72,31,182,43,1,165,183,80,250,143,48,247,108>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<99,155,46,135,73,225,27,135,185,235,66,242,173,50,93,22,28,23,11,57,178,136,172,141,4,196,243,31,143,8,35,235>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,50>>},<<121,81,11,127,243,186,89,124,117,140,230,243,151,226,59,63,194,252,114,157,214,51,40,129,196,104,183,103,183,28,119,193>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,55>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},nil},{{versions,<<104,101,120,112,109>>,<<106,97,115,111,110>>},[<<49,46,48,46,48,45,114,99,46,49>>,<<49,46,48,46,48,45,114,99,46,50>>,<<49,46,48,46,48,45,114,99,46,51>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,49,46,50>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},<<91,77,36,239,254,189,6,15,70,111,180,96,236,6,87,110,123,52,160,15,194,107,35,79,228,241,44,79,5,201,89,71>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},<<169,93,11,105,81,121,24,152,163,206,220,239,254,220,191,5,237,12,236,64,183,236,156,58,96,112,180,210,34,162,42,171>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},<<218,31,129,51,81,87,77,55,61,179,235,87,157,45,159,228,185,29,239,194,50,224,8,39,238,90,163,139,86,196,193,210>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,54>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},<<101,91,237,185,64,198,75,180,213,141,96,128,203,130,4,177,249,36,215,227,22,137,13,7,134,172,127,144,251,154,104,212>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},<<144,94,191,180,229,77,90,141,108,61,184,90,151,227,68,244,0,142,188,59,117,227,37,235,243,184,143,105,204,82,97,188>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},<<82,128,175,154,172,67,47,245,202,66,22,208,62,138,147,243,34,9,81,14,146,91,96,231,242,124,51,121,111,105,230,153>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},[]},{{registry_etag,<<104,101,120,112,109>>,<<106,97,115,111,110>>},<<34,97,98,52,56,99,97,51,48,52,98,55,49,98,51,50,48,99,48,50,97,55,99,102,101,57,102,56,99,56,100,56,97,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,49>>},<<73,140,248,154,223,216,198,35,93,172,33,119,155,217,73,161,64,219,168,206,68,37,100,73,113,229,156,39,240,188,73,145>>},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},<<125,82,45,99,193,63,55,10,240,85,62,39,241,17,175,46,151,249,79,82,241,156,152,189,85,126,220,205,83,211,23,237>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},<<99,43,159,92,76,46,86,152,127,18,59,159,53,229,43,53,108,45,226,140,231,105,45,102,190,207,18,223,16,204,16,18>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},<<32,50,152,90,157,33,167,28,203,229,214,196,231,128,37,49,94,140,60,195,226,85,245,7,161,55,153,84,146,227,240,190>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},<<135,173,234,40,60,156,242,71,103,180,222,237,68,96,41,137,165,51,17,86,223,93,96,162,102,14,156,145,20,213,64,70>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},<<84,102,52,26,40,153,179,37,138,232,168,133,67,208,189,207,235,42,41,50,199,49,193,102,143,19,211,49,85,17,94,25>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},<<218,15,103,101,22,13,120,222,103,107,141,110,93,175,57,171,250,254,43,57,3,184,187,249,186,217,7,116,185,172,32,81>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},<<87,98,95,24,53,198,99,53,131,106,213,107,2,224,21,248,208,190,199,234,139,100,211,5,241,134,255,216,60,134,175,63>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},<<0,44,170,249,57,185,124,132,83,62,240,246,33,211,237,65,78,215,3,252,208,60,145,236,13,214,32,67,223,16,44,99>>},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},<<1,188,142,12,255,50,126,103,99,78,150,23,184,80,53,125,59,119,91,58,2,46,45,24,194,254,146,217,115,115,178,173>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,52>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,50,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},<<84,122,239,236,28,103,254,50,131,247,123,172,77,175,133,243,245,147,0,39,100,247,104,250,170,66,56,117,165,26,35,32>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},nil},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},<<36,170,165,33,61,173,49,64,42,227,123,151,158,11,91,183,126,152,210,219,190,163,38,237,145,161,0,12,145,196,17,19>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},<<110,207,210,201,30,22,244,142,21,53,116,59,87,208,26,66,198,93,125,213,26,139,67,229,114,59,31,121,146,113,105,168>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},<<221,158,21,194,160,108,229,114,231,154,103,96,57,12,160,35,72,192,241,193,134,58,34,145,8,98,133,129,134,36,121,114>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},<<18,192,208,123,207,0,180,26,155,61,161,233,207,82,235,5,192,76,185,237,23,20,177,174,34,9,208,212,27,25,175,60>>},{{registry_etag,<<104,101,120,112,109>>,<<106,115,111,110>>},<<34,56,98,48,98,51,57,54,50,101,54,99,55,102,102,102,51,57,50,100,102,51,97,51,57,57,56,97,48,53,55,57,51,34>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},<<74,252,89,220,173,247,27,231,237,200,185,52,179,159,85,78,199,179,30,43,27,26,71,103,56,58,102,63,134,149,140,227>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},<<122,235,9,94,73,65,128,174,217,87,243,88,187,139,146,21,54,10,58,167,226,61,174,125,154,240,251,21,72,66,17,100>>},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},<<132,183,103,162,219,142,204,47,7,187,132,252,180,245,79,37,22,12,7,161,218,226,124,70,11,63,12,64,191,203,247,159>>},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},<<90,37,120,140,106,49,22,1,230,80,215,11,31,65,165,48,229,2,135,187,16,203,136,231,38,235,222,72,243,27,160,19>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<47,127,203,236,44,53,3,75,173,226,249,113,127,119,5,157,197,78,180,233,41,163,4,156,167,186,103,117,192,189,102,205>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},<<87,231,124,218,254,52,118,157,204,17,76,108,36,152,71,182,99,4,229,72,152,145,48,107,151,98,227,33,21,32,215,103>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},<<228,10,21,153,48,36,160,203,79,94,34,129,109,107,227,64,2,204,68,99,198,23,137,237,53,236,148,196,25,17,235,238>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},<<65,15,82,8,188,174,84,27,249,65,179,242,117,110,91,181,164,200,105,77,127,253,107,52,185,9,174,136,38,38,41,192>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,32,50,46,50,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,48>>},<<114,192,119,214,28,104,4,106,65,50,246,197,185,28,62,118,157,147,111,245,38,78,44,46,155,203,221,7,141,223,92,139>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,48>>},<<158,206,25,186,234,42,11,160,204,226,167,220,175,197,212,98,51,88,47,253,21,126,117,89,227,31,149,135,213,169,181,63>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},<<51,221,215,227,240,137,141,26,124,212,235,117,88,77,41,16,14,43,149,75,115,25,59,120,255,172,203,118,182,37,87,124>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},<<29,227,205,145,60,190,39,174,240,172,159,191,122,176,110,194,117,248,93,162,139,55,96,100,128,73,153,209,214,51,54,122>>},{{tarball_etag,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},<<34,56,102,55,99,97,50,51,97,98,99,57,49,97,50,55,51,54,49,56,49,48,53,101,50,50,48,101,50,54,101,56,54,34>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,48>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},<<10,15,244,148,212,41,101,199,80,103,93,163,225,174,2,244,58,151,127,76,237,209,79,159,115,152,247,177,247,37,52,29>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,52>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{tarball_etag,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},<<34,98,53,57,50,48,50,55,100,97,54,55,57,54,50,52,53,51,52,98,102,50,97,54,102,98,53,56,55,53,50,48,55,34>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},<<0,37,224,56,226,242,232,197,200,36,13,24,188,252,17,177,239,225,162,86,113,101,111,197,178,253,214,112,245,72,222,52>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},<<195,82,1,177,8,228,28,72,227,114,232,11,96,68,62,247,80,197,149,184,170,81,79,194,0,203,163,102,160,198,148,126>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},<<202,206,70,199,228,211,195,137,83,97,35,95,153,209,171,40,0,66,70,95,65,24,43,199,248,227,12,128,57,234,141,238>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},<<134,98,110,28,137,164,173,154,150,208,217,198,56,249,232,140,35,70,184,155,75,161,97,25,136,89,78,190,114,181,213,238>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},<<32,148,247,67,145,142,28,56,34,176,168,194,101,235,122,232,17,137,54,221,78,15,4,198,43,185,189,243,103,109,206,77>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},<<186,18,120,225,178,159,95,62,106,182,103,31,102,14,69,51,3,211,120,198,158,96,125,120,128,129,117,114,146,160,144,252>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},<<16,236,251,46,47,210,22,214,69,26,247,28,241,79,39,110,6,58,9,110,21,182,133,222,117,53,253,104,4,102,201,181>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},<<162,54,21,16,103,251,60,169,201,96,54,128,105,50,209,5,210,224,199,188,179,119,133,19,239,254,106,108,59,35,58,96>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},<<104,186,213,50,136,223,34,192,154,2,173,163,162,246,198,21,61,38,39,241,0,221,207,182,197,73,6,12,12,124,201,100>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},<<185,108,64,14,4,183,183,101,192,133,76,5,164,150,99,35,233,12,13,17,254,224,72,59,21,103,205,160,121,171,178,5>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,51>>},<<107,156,170,216,147,0,6,249,187,53,104,12,93,51,17,145,122,198,118,144,195,175,27,160,24,98,51,36,192,21,171,229>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},<<75,178,27,173,213,26,50,173,80,237,204,229,78,83,18,172,240,121,163,188,119,15,38,108,25,151,7,28,127,202,223,23>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,51>>},<<221,84,236,175,169,116,61,21,164,128,166,157,237,246,104,174,139,137,135,221,19,11,237,83,29,1,222,45,224,219,114,231>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,53>>},nil},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,54>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,50,46,48>>},<<72,227,29,177,140,35,191,51,200,56,93,63,114,178,112,129,75,142,94,101,7,17,152,154,152,201,40,95,125,184,34,154>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},<<157,73,129,3,242,145,156,200,208,187,143,59,95,44,211,110,52,23,4,176,180,198,37,162,255,245,156,162,15,247,71,41>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,51,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},<<247,113,245,135,196,139,72,36,180,151,226,163,227,116,247,94,147,239,1,252,50,152,115,176,137,163,245,221,150,27,128,184>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,56,46,48>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},<<107,98,70,96,40,214,224,171,62,198,128,92,81,244,168,134,41,230,152,183,29,248,224,31,165,92,92,74,49,174,190,107>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,52,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},<<217,80,154,44,34,147,65,79,12,138,178,35,105,23,194,141,154,6,6,227,139,49,72,11,47,118,177,203,206,191,151,106>>},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},<<50,233,88,32,169,124,255,234,103,131,14,145,81,74,42,213,59,136,136,80,68,45,109,57,95,83,161,172,96,200,46,7>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,49,46,48>>},<<78,11,98,214,130,174,195,158,78,57,14,68,30,160,215,192,105,236,113,7,125,50,29,14,191,107,107,132,184,187,224,14>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},<<189,147,202,5,190,120,188,182,21,156,113,118,35,14,254,218,47,114,79,127,253,72,85,21,23,92,164,17,223,244,137,62>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,49>>},<<169,229,80,242,36,189,255,58,16,215,240,101,26,114,153,139,19,9,138,176,142,116,249,197,115,127,195,192,9,193,73,244>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},<<207,150,227,40,255,93,105,131,141,216,156,33,169,219,34,113,107,252,198,239,119,46,157,157,221,247,186,98,33,2,114,45>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},<<153,68,136,43,113,245,91,37,3,102,61,156,181,77,63,28,123,189,247,204,109,208,28,196,14,168,239,81,32,118,1,236>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,50>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},<<82,54,119,31,28,24,178,146,208,95,163,243,177,122,136,230,32,65,105,41,167,111,111,118,7,160,99,84,190,131,223,24>>},{{outer_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},<<135,127,234,43,242,218,43,254,7,15,21,41,123,8,7,71,49,179,188,18,38,45,143,107,78,19,192,216,24,213,249,168>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,46,48>>},<<189,7,50,202,74,249,220,189,146,187,33,246,250,40,136,15,241,188,169,205,77,7,75,194,228,0,198,145,168,209,85,118>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},<<149,118,239,96,88,227,41,46,166,187,103,13,17,248,78,112,72,72,8,195,85,212,132,253,23,194,167,73,212,11,194,62>>},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,53,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,48>>},<<16,133,39,148,221,224,88,193,239,122,91,157,83,212,8,217,4,194,7,110,159,171,116,172,67,252,103,109,50,227,218,211>>},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},<<104,88,36,229,132,191,61,160,87,32,192,27,172,250,97,83,74,146,65,218,18,153,47,252,202,228,121,91,78,60,255,13>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},<<14,162,56,244,6,131,29,242,159,119,29,183,115,21,64,93,136,12,158,247,184,24,166,176,224,171,162,102,83,9,225,162>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,50>>},<<166,205,48,197,65,197,88,166,153,53,225,143,53,60,152,143,83,17,120,10,34,121,62,7,25,7,215,99,1,102,158,87>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},<<96,84,136,65,224,33,45,244,1,227,142,99,192,7,142,197,123,51,231,234,73,176,50,199,150,204,173,140,222,121,75,92>>},{{registry_etag,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>},<<34,102,55,101,51,53,50,53,49,100,57,98,98,56,97,55,53,52,102,56,50,101,57,50,48,55,54,49,97,101,55,100,48,34>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},<<119,62,225,102,102,158,178,27,82,151,206,65,179,199,180,116,190,9,110,184,237,5,45,69,112,129,40,154,28,242,80,122>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,51>>},<<222,146,226,188,133,188,9,236,103,111,25,246,236,45,170,89,186,31,1,3,209,218,150,207,12,202,54,52,44,144,217,63>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,53>>},<<128,220,240,222,73,203,3,63,153,109,104,148,40,239,110,246,39,234,5,148,48,125,245,11,76,26,253,160,152,224,73,57>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},<<150,52,188,163,15,47,116,104,221,227,231,4,213,134,83,25,177,235,136,228,168,205,237,92,153,91,175,10,169,87,82,79>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,49>>},{{2020,5,25},{14,32,1}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},<<89,208,170,245,32,158,59,80,103,69,138,80,59,168,11,115,136,213,101,180,134,161,131,77,199,158,216,113,202,46,175,195>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},<<83,93,248,66,116,16,163,147,66,189,186,61,17,181,60,80,132,232,115,81,105,99,126,190,213,196,76,215,14,171,0,35>>},{{inner_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},<<83,94,167,230,0,203,28,107,161,123,83,2,146,102,217,215,236,84,206,41,191,176,93,144,108,67,57,7,172,250,1,202>>},{{timestamp,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,50>>},<<48,205,79,245,245,147,253,210,24,169,178,111,60,36,213,128,39,79,41,125,136,173,67,56,58,254,82,91,21,67,177,101>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{versions,<<104,101,120,112,109>>,<<101,120,106,115,120>>},[<<51,46,48,46,48>>,<<51,46,48,46,49>>,<<51,46,48,46,50>>,<<51,46,49,46,48>>,<<51,46,50,46,48>>,<<51,46,50,46,49>>,<<52,46,48,46,48>>]},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},nil},{{retired,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,49>>},[]},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<51,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<50,46,51,46,52>>,false}]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},<<124,16,141,227,48,56,16,40,44,161,17,236,192,147,138,120,230,2,246,180,240,203,107,144,253,245,47,149,209,152,5,159>>},{{registry_etag,<<104,101,120,112,109>>,<<99,115,118>>},<<34,97,100,100,55,56,54,48,50,49,54,100,56,97,49,56,57,54,51,97,101,97,97,102,53,100,98,54,55,50,52,49,100,34>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,49,45,83,78,65,80,83,72,79,84>>},nil},{{versions,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>},[<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,49,46,48>>,<<49,46,49,46,49>>,<<49,46,50,46,48>>,<<49,46,50,46,49>>,<<49,46,51,46,48>>,<<49,46,51,46,49>>,<<49,46,52,46,48>>,<<49,46,53,46,48>>,<<49,46,53,46,49>>,<<49,46,53,46,50>>,<<50,46,48,46,48>>,<<50,46,48,46,49>>,<<50,46,49,46,48>>,<<50,46,50,46,48>>,<<51,46,48,46,48>>,<<51,46,49,46,48>>,<<52,46,48,46,48>>,<<52,46,48,46,49>>]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},<<137,28,32,233,180,214,31,0,187,29,21,255,46,29,244,81,14,48,42,7,254,77,205,184,84,193,108,34,59,72,29,163>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},<<64,95,116,217,92,226,6,190,163,171,188,216,241,63,34,144,224,191,223,138,75,210,50,253,14,103,194,242,36,158,40,119>>},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},<<219,220,236,81,73,70,188,141,202,177,215,125,255,119,25,67,122,133,217,134,23,144,134,74,177,33,85,237,163,253,111,175>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,53>>},<<64,60,123,48,80,27,93,51,205,168,188,107,254,48,127,89,219,1,95,199,37,86,122,86,4,218,231,246,5,165,30,23>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,51>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,51>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},<<23,26,137,155,34,80,224,72,191,89,178,41,171,37,52,247,77,137,44,170,243,29,184,245,90,242,156,26,6,1,71,84>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,49,46,48>>},<<212,25,22,44,178,213,190,128,7,8,53,194,194,184,199,140,140,69,144,119,6,201,145,210,63,55,80,218,229,6,209,233>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},<<98,26,26,62,83,107,158,33,99,236,107,176,120,77,253,229,236,19,218,138,190,196,107,183,101,189,126,177,248,173,21,2>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},<<16,4,241,79,86,196,247,98,133,76,72,46,15,233,45,98,116,227,208,7,139,61,112,228,178,238,179,183,158,39,81,7>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,49,48>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<126,62,32,48,46,52>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,49,46,48,45,83,78,65,80,83,72,79,84>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,53>>},[]},{{retired,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},<<127,124,167,45,243,210,158,82,45,55,170,37,73,44,171,71,77,10,229,214,151,31,14,228,151,173,141,53,228,113,230,18>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},[]},{{tarball_etag,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},<<34,52,97,49,99,50,56,100,54,102,99,101,99,101,52,55,98,57,100,99,55,50,99,55,98,51,55,54,97,98,54,57,100,34>>},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,53>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,50>>},<<194,18,58,158,240,37,55,126,12,183,146,202,226,3,176,251,111,81,83,62,45,9,138,157,207,126,43,240,18,221,33,194>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},<<65,187,150,11,83,70,108,214,173,17,69,125,17,35,97,202,136,39,117,191,125,180,99,135,76,143,51,51,188,33,103,11>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},<<206,105,157,49,102,44,52,218,135,131,255,23,171,152,12,99,80,186,80,189,130,71,85,105,219,224,255,146,149,83,217,202>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},<<160,88,176,66,166,90,171,75,107,220,254,73,23,150,200,208,67,105,54,44,172,223,141,93,75,234,156,81,112,151,208,56>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},<<212,141,245,144,223,87,155,221,0,80,100,173,189,113,121,215,58,16,127,66,211,111,231,208,3,30,84,74,107,99,80,70>>},{{deps,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},[{<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<114,101,99,111,110>>,<<126,62,50,46,53,46,48>>,false}]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},nil},{{timestamp,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,51>>},<<11,227,252,24,76,188,187,142,189,106,131,138,205,120,113,127,255,251,223,137,247,195,149,152,149,248,127,212,147,195,55,79>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,51>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},<<222,148,84,174,200,249,97,163,28,227,188,38,197,39,87,121,10,152,130,7,85,93,208,130,110,90,96,165,229,244,16,167>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},<<215,201,232,38,14,156,220,31,178,203,119,226,217,3,149,105,98,193,247,97,87,235,130,0,126,198,189,229,218,171,101,210>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,50,46,48>>},<<137,43,68,99,179,173,216,203,10,28,104,252,69,224,60,98,151,137,89,121,189,12,119,40,52,96,186,217,13,2,157,195>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,57>>},nil},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<49,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,50>>},<<86,11,223,183,68,158,61,221,35,160,150,146,159,185,252,33,34,247,9,188,199,88,178,213,213,165,199,208,234,132,137,16>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},<<135,70,99,76,186,2,83,179,168,68,50,96,128,215,141,77,124,129,171,147,194,248,161,18,241,10,234,167,248,181,81,137>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},<<109,146,154,92,130,248,99,214,32,28,161,252,218,171,38,179,85,143,41,221,224,211,160,34,229,242,200,221,175,180,203,22>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,49>>},<<33,182,157,95,117,31,169,225,236,145,71,77,68,247,183,80,73,20,184,249,214,168,53,45,56,133,111,119,129,224,124,53>>},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,49>>},<<182,89,184,87,29,238,223,96,247,156,90,96,142,21,65,64,133,250,20,19,68,226,113,111,189,105,136,160,132,181,249,147>>},{{registry_etag,<<104,101,120,112,109>>,<<106,115,111,110,101>>},<<34,49,57,98,48,101,54,101,54,53,97,53,48,102,52,98,97,98,57,100,51,102,54,99,52,100,55,49,56,57,55,102,97,34>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,52>>},<<18,52,153,51,188,38,72,236,120,159,155,27,62,139,58,235,92,234,198,54,131,247,95,139,203,7,135,0,36,91,135,76>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,48>>},<<3,204,80,111,88,227,177,218,36,255,228,114,121,197,14,205,7,16,167,169,40,52,192,58,35,38,244,226,34,80,213,77>>},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},{{2020,5,25},{14,32,1}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},<<142,100,15,158,141,162,129,223,90,1,24,144,127,209,142,52,140,31,35,205,199,71,41,100,142,232,55,174,217,27,140,41>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},<<110,77,136,127,221,142,139,234,129,238,215,150,170,88,155,200,14,52,183,137,97,121,182,132,249,117,202,184,58,27,23,62>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},<<243,164,124,34,50,116,36,41,23,88,22,125,243,196,96,13,207,139,243,71,149,163,120,118,18,1,154,165,184,106,92,33>>},{{registry_etag,<<104,101,120,112,109>>,<<116,105,110,121>>},<<34,52,56,50,102,99,55,97,98,97,101,97,53,57,51,100,55,57,48,56,51,98,56,102,57,51,56,51,50,49,54,53,99,34>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,49,46,48>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,52>>},<<223,18,100,181,135,27,186,248,218,79,17,254,173,250,13,198,97,244,213,17,73,58,37,248,249,199,214,21,224,214,20,213>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<48,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{registry_etag,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},<<34,52,54,57,51,51,55,102,53,98,99,52,97,98,101,52,53,101,102,102,102,52,49,100,55,102,51,53,97,56,101,56,99,34>>},{{deps,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,50>>},[]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,52>>,false}]},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},<<153,47,46,20,24,132,154,50,111,209,217,40,120,1,250,45,134,9,29,180,249,97,31,96,120,29,166,210,54,246,76,212>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},<<188,191,142,48,184,96,93,175,22,10,140,42,41,213,74,23,46,82,15,75,160,227,94,17,122,106,162,64,96,208,159,6>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,49,46,48>>},nil},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},<<134,43,66,142,238,151,53,86,202,20,87,227,90,179,116,64,212,100,70,163,29,10,225,195,21,84,14,86,121,107,130,18>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<48,46,49,46,49>>},<<121,180,219,142,142,93,115,110,206,124,216,109,238,5,68,39,61,188,79,192,147,122,157,207,219,65,51,176,151,41,238,29>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,48>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,49>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,50>>},[]},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},<<236,46,10,245,110,159,244,179,185,65,1,43,210,244,121,186,27,11,70,167,34,228,39,178,62,59,94,154,116,170,30,7>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},<<24,34,98,146,249,177,109,241,247,196,117,36,59,152,185,133,59,170,233,18,101,88,198,253,222,53,77,27,159,120,134,56>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},<<93,247,164,66,223,130,94,189,46,62,187,41,162,225,127,106,224,29,28,211,74,91,252,182,200,47,50,23,125,76,241,48>>},{{timestamp,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},<<43,202,208,207,98,31,178,119,202,187,182,65,49,89,205,58,163,2,101,194,222,228,44,150,134,151,152,139,48,16,134,4>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},<<156,4,35,121,62,187,118,245,82,245,191,173,131,219,120,194,17,60,104,78,153,237,178,24,144,111,162,40,179,216,152,119>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,49>>},<<222,84,131,50,37,176,230,127,33,219,71,51,58,8,104,90,237,80,215,120,162,241,28,247,227,106,233,227,254,78,225,7>>},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,52,45,83,78,65,80,83,72,79,84>>},<<239,82,71,134,18,4,215,101,218,196,201,174,239,141,242,228,84,208,44,85,221,176,130,198,199,103,181,203,151,45,101,25>>},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<50,46,48,46,48,45,83,78,65,80,83,72,79,84>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,50>>},<<166,252,251,218,190,26,239,145,25,184,113,48,72,70,177,206,40,45,154,65,36,188,221,175,199,97,108,26,37,108,117,150>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,50>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},nil},{{timestamp,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,55,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,52>>},<<195,39,7,44,190,185,154,8,86,82,207,17,10,122,61,93,123,153,249,69,104,209,73,124,167,105,113,200,128,97,85,90>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,49>>},[]},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>},{{2020,5,25},{14,32,6}}},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,51,46,48>>},<<157,237,151,116,241,241,18,204,84,77,130,229,249,169,5,160,22,134,47,147,186,137,249,131,214,167,226,80,145,239,226,61>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,48>>},<<227,19,177,246,201,71,212,213,150,103,66,219,100,159,247,226,103,54,224,132,176,162,127,161,246,74,202,120,50,120,28,196>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,49>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,50>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,true},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<126,62,32,48,46,49>>,true},{<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<101,120,106,115,120>>,<<126,62,32,52,46,48>>,true},{<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<106,97,115,111,110>>,<<126,62,32,49,46,48>>,true},{<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<106,115,111,110,101>>,<<126,62,32,49,46,52>>,true},{<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<112,111,105,115,111,110>>,<<126,62,32,51,46,48>>,true},{<<104,101,120,112,109>>,<<116,105,110,121>>,<<116,105,110,121>>,<<126,62,32,49,46,48>>,true}]},{{versions,<<104,101,120,112,109>>,<<114,101,99,111,110>>},[<<50,46,50,46,48>>,<<50,46,50,46,49>>,<<50,46,51,46,48>>,<<50,46,51,46,49>>,<<50,46,51,46,50>>,<<50,46,51,46,51>>,<<50,46,51,46,52>>,<<50,46,51,46,53>>,<<50,46,51,46,54>>,<<50,46,52,46,48>>,<<50,46,53,46,48>>]},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,52>>},<<105,102,54,18,176,225,123,172,122,29,127,26,69,235,225,149,15,19,218,24,10,69,123,7,223,63,175,139,223,24,200,149>>},{{retired,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,53,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,48>>},<<205,13,176,11,249,85,42,18,87,148,80,64,244,222,235,41,152,176,92,122,1,134,215,152,246,224,234,5,150,141,178,69>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,48>>},<<115,202,129,241,107,232,194,63,12,196,113,10,2,108,189,79,223,95,106,26,181,126,18,239,173,150,230,121,68,48,145,183>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<52,46,48,46,48>>},<<100,138,6,120,148,118,36,173,36,113,234,134,221,36,183,85,146,46,13,252,198,141,103,234,183,3,39,143,217,90,195,253>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,49>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,48>>},<<245,199,26,148,95,141,215,232,196,255,70,217,165,239,28,179,84,167,13,19,17,210,130,238,249,36,12,66,39,157,53,206>>},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,48,46,49>>},[]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,54,46,48>>},<<194,86,85,6,198,33,238,1,14,113,208,95,85,94,57,161,185,55,224,8,16,226,132,188,133,70,58,77,78,252,75,0>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},<<137,173,179,41,68,72,116,128,150,65,204,47,100,90,236,43,211,141,253,132,30,127,228,193,179,188,162,230,249,26,26,243>>},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,49>>},<<97,30,5,50,254,221,69,36,250,157,80,45,165,247,59,154,203,174,132,156,144,9,236,40,125,217,158,208,156,33,90,65>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},<<16,4,52,24,196,45,36,147,208,238,33,45,63,221,210,93,127,254,72,67,128,175,173,118,154,10,56,121,89,56,228,72>>},{last_update,{{2020,5,24},{12,2,37}}},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,49,46,48>>},<<8,68,93,118,243,173,53,7,188,74,243,14,175,216,130,96,192,243,92,80,56,84,42,242,119,171,208,151,91,225,234,38>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,49>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{timestamp,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,57,57,46,48>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,52,46,48>>},[]},{{versions,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>},[<<48,46,49,46,48>>,<<48,46,50,46,48>>,<<48,46,51,46,48>>,<<48,46,52,46,48>>,<<48,46,53,46,48>>,<<48,46,54,46,48>>,<<48,46,55,46,48>>,<<48,46,56,46,48>>,<<48,46,57,46,48>>,<<48,46,49,48,46,48>>,<<48,46,49,49,46,48>>,<<48,46,49,50,46,48>>,<<48,46,49,50,46,49>>,<<48,46,49,51,46,48>>,<<48,46,49,51,46,49>>,<<48,46,49,51,46,50>>,<<48,46,49,52,46,48>>,<<48,46,57,57,46,48>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>]},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},<<37,36,182,192,229,65,48,157,150,154,204,247,95,119,225,209,101,62,70,20,42,252,104,233,234,79,243,85,89,167,148,188>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},<<20,151,21,176,8,250,42,138,93,102,63,203,224,145,118,224,55,223,64,46,3,70,180,142,177,159,86,181,159,41,141,202>>},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,49>>},<<22,126,93,61,210,231,113,110,88,101,245,168,208,100,215,169,247,0,69,22,199,150,104,64,131,241,205,24,12,45,66,150>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<52,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},<<14,242,17,138,101,206,8,117,186,112,255,37,243,141,34,183,238,117,142,105,157,107,69,214,18,238,190,251,138,78,156,223>>},{{deps,<<104,101,120,112,109>>,<<101,120,106,115,120>>,<<51,46,50,46,48>>},[{<<104,101,120,112,109>>,<<106,115,120>>,<<106,115,120>>,<<126,62,32,50,46,54,46,50>>,false}]},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},nil},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>},{{2020,5,25},{14,32,1}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,54>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,48>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},<<57,207,144,243,58,96,58,98,157,34,38,230,75,17,40,154,45,77,70,176,162,107,166,24,211,104,11,188,120,28,232,230>>},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,49>>},<<215,231,114,197,69,168,223,20,71,144,195,137,29,9,227,190,159,145,121,101,235,192,190,211,1,248,253,141,59,49,144,89>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,52>>},<<118,22,145,160,177,206,15,76,126,133,17,176,155,95,44,211,24,192,13,165,39,3,149,99,126,78,13,90,127,71,188,69>>},{{retired,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,51>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,54,46,48>>},<<165,252,198,94,200,215,66,117,153,236,145,91,159,135,228,53,41,209,80,151,173,249,228,60,150,236,86,115,175,87,212,46>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,50>>},<<217,196,187,165,244,253,121,45,191,150,34,0,67,83,251,201,249,118,86,33,218,135,58,172,135,166,143,252,81,205,108,102>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,50,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,53,46,48>>},{{2020,5,25},{14,32,6}}},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,50,46,51>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},<<253,239,107,136,195,29,76,34,224,117,107,33,94,103,115,31,76,39,57,250,253,19,168,240,150,226,247,69,122,201,252,195>>},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,50,46,48>>},<<209,58,175,98,35,37,188,63,41,27,181,3,65,188,232,64,202,189,196,173,88,90,98,193,228,202,166,173,91,224,0,0>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,49,46,48>>},[]},{{retired,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,49>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48,45,114,99,46,48>>},<<83,185,186,191,253,24,107,180,251,159,221,71,232,164,66,184,241,141,184,20,151,255,163,165,91,90,95,89,111,90,200,20>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,50,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<116,105,110,121>>,<<49,46,48,46,49>>},<<18,120,164,87,222,184,217,145,53,195,120,183,31,102,242,30,40,61,138,222,164,38,37,42,63,143,94,0,60,83,106,123>>},{{deps,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,49,46,50>>},[{<<104,101,120,112,109>>,<<100,101,99,105,109,97,108>>,<<100,101,99,105,109,97,108>>,<<126,62,32,49,46,48>>,true}]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,48,46,48>>},[]},{{deps,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,53>>},[]},{{timestamp,<<104,101,120,112,109>>,<<101,120,106,115,120>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<50,46,48,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,50,46,48>>},<<17,103,71,219,224,87,121,76,58,62,78,20,59,124,131,144,178,159,99,78,22,199,138,127,89,186,117,191,166,133,46,127>>},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},[{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<98,101,110,99,104,101,101>>,<<126,62,32,48,46,56>>,false},{<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<98,101,110,99,104,101,101,95,106,115,111,110>>,<<62,61,32,48,46,51,46,49>>,false}]},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,49>>},<<127,52,144,106,8,57,243,180,155,155,118,71,70,28,81,68,120,118,17,245,153,232,215,67,33,66,128,118,22,153,223,43>>},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,52,46,48>>},<<178,113,90,174,185,245,73,244,227,7,57,212,57,147,227,193,177,5,58,78,214,157,80,198,96,98,27,221,30,185,102,6>>},{{inner_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,48,46,48>>},<<27,101,19,39,242,48,107,254,16,227,73,222,227,142,116,11,12,85,4,38,19,142,188,67,255,207,5,134,97,188,172,191>>},{{retired,<<104,101,120,112,109>>,<<115,116,100,111,117,116,95,102,111,114,109,97,116,116,101,114>>,<<48,46,49,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,51>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<48,46,50,46,48>>},nil},{{timestamp,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,52,46,48>>},{{2020,5,25},{14,32,6}}},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,52,46,52>>},nil},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,55>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<49,46,48,46,48>>},<<59,28,140,11,227,44,39,32,207,5,135,132,129,87,236,95,14,20,247,84,219,99,34,156,52,187,19,90,94,236,181,40>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,52,46,50>>},<<170,252,202,255,79,141,45,31,52,224,172,76,175,193,98,54,166,88,204,228,48,180,138,64,56,197,131,141,70,72,161,3>>},{{inner_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},<<102,178,17,249,191,216,75,217,126,109,27,234,221,248,252,35,18,170,171,225,146,247,118,232,147,28,176,193,111,83,165,33>>},{{outer_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,48,46,50>>},<<99,11,135,164,61,90,213,41,40,103,253,138,103,49,217,123,60,131,58,11,150,140,210,3,25,183,9,32,254,241,64,107>>},{{outer_checksum,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,48>>},<<197,103,12,1,118,217,143,197,134,60,112,72,163,173,92,172,44,1,81,110,133,253,40,176,162,35,166,106,125,235,140,234>>},{{inner_checksum,<<104,101,120,112,109>>,<<106,115,111,110>>,<<49,46,49,46,48>>},<<139,29,56,94,0,231,8,1,161,47,107,212,62,182,79,116,124,79,114,200,142,82,63,143,13,50,118,165,19,92,160,11>>},{{retired,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,53>>},nil},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<49,46,51,46,49>>},[]},{{outer_checksum,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},<<81,155,194,9,228,67,57,97,40,65,116,196,151,200,82,76,0,30,40,91,121,189,248,2,18,180,122,31,137,128,132,204>>},{{retired,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,48,46,56>>},<<153,157,191,5,166,154,48,207,230,159,28,50,23,123,19,188,187,118,12,110,235,200,231,70,167,54,130,189,127,223,71,171>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,49,46,48>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,49,46,52>>},<<136,22,143,146,203,209,35,224,41,13,135,208,161,202,128,3,232,99,170,67,10,225,114,87,177,231,195,222,195,33,119,158>>},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,50,46,51>>},[]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,56,46,48>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,48,46,49>>,false}]},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,51,46,49>>},<<107,28,158,90,196,46,147,42,252,22,12,197,14,199,233,99,80,198,218,241,185,31,141,68,60,125,126,195,82,41,208,197>>},{{timestamp,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,51,46,50>>},{{2020,5,25},{14,32,6}}},{{deps,<<104,101,120,112,109>>,<<99,115,118>>,<<49,46,51,46,50>>},[{<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>,<<126,62,32,49,46,48,46,51>>,false}]},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,49,46,48>>},nil},{{inner_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,52,46,49>>},<<140,130,155,178,142,63,49,106,54,18,22,49,68,5,254,41,109,141,210,253,116,9,223,165,63,164,172,28,255,55,151,160>>},{{outer_checksum,<<104,101,120,112,109>>,<<111,98,115,101,114,118,101,114,95,99,108,105>>,<<49,46,51,46,51>>},<<60,195,226,58,205,234,110,131,64,115,25,39,91,193,250,174,216,30,159,132,1,73,217,241,199,203,174,78,19,145,128,169>>},{{retired,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,50,46,49>>},nil},{{outer_checksum,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101,95,104,116,109,108>>,<<48,46,53,46,48>>},<<237,219,26,93,59,77,123,35,81,161,38,128,137,110,199,146,141,6,221,79,48,163,15,78,229,139,66,151,205,242,65,111>>},{{retired,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<48,46,49,52,46,48>>},nil},{{retired,<<104,101,120,112,109>>,<<106,115,111,110,101>>,<<49,46,50,46,48>>},nil},{{versions,<<104,101,120,112,109>>,<<112,97,114,97,108,108,101,108,95,115,116,114,101,97,109>>},[<<48,46,49,46,48>>,<<48,46,49,46,49>>,<<48,46,49,46,50>>,<<49,46,48,46,48>>,<<49,46,48,46,49>>,<<49,46,48,46,50>>,<<49,46,48,46,51>>,<<49,46,48,46,52>>,<<49,46,48,46,53>>,<<49,46,48,46,54>>]},{{deps,<<104,101,120,112,109>>,<<98,101,110,99,104,101,101>>,<<49,46,48,46,49>>},[{<<104,101,120,112,109>>,<<100,101,101,112,95,109,101,114,103,101>>,<<100,101,101,112,95,109,101,114,103,101>>,<<126,62,32,49,46,48>>,false}]},{{timestamp,<<104,101,120,112,109>>,<<114,101,99,111,110>>,<<50,46,51,46,54>>},{{2020,5,25},{14,32,1}}},{{deps,<<104,101,120,112,109>>,<<112,111,105,115,111,110>>,<<50,46,50,46,48>>},[]},{{timestamp,<<104,101,120,112,109>>,<<106,97,115,111,110>>,<<49,46,48,46,48,45,114,99,46,50>>},{{2020,5,25},{14,32,6}}}]. diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.API.beam index 89e9372a03baf38c3df14982e244237363410fa4..166a8db0e5398a8243c86662f215cfca80384382 100644 GIT binary patch delta 103 zcmeB??~&iIgqh{iRxZKGE0}k%TzU#*q_F6)Ug8zt65KqM#eo^fGz2nlv9Dv6VcdO8 vje&u|9*7x%*a}KBfW$X1;jUs7@Y)g@)%fwjxsDk5s~3+{m~YnOjbj1;Il3QZ delta 103 zcmeB??~&iIgqej)aO+eYyVm{9oE`sx$Js^KI7Sjbj1;-+CK* diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Config.beam index 6600dacb10e2149c95274182282f3f95c1d163f8..4b74b3e28199603123362da736d8fe3387ef111e 100644 GIT binary patch delta 93 zcmX>jb4F%EHX|2vUSgH0$<1CCSn{C+^GXklH?Db4CZ1+wmF)%Q=0Wl*G nTR~|Ckoe{rE;U90m210pEohCpI9WAqMHI`;+nYCW&td`q_SPJY delta 93 zcmX>jb4F%EHX|2nT4GLdDsx_D&gN3a<1CD-n{C+^GXklH?Db4CEW)qnFfcH<0Wl*G mTR~|Ckoe{rE;UAhzqfk5jsLE!>H9iMZBlV<)88eXvkh2UZxUWsB&1_-BFn^&xvvw@LA0?Zdq*5Q>*)@*=qfGQ=6 zJs~QE!74R3H?i0;N&)3%0u(@s<&r`2AWpG1uS~J#=3A^R>;kWUTnHAL`p0i_jK$8E Ni+FlBzvE$J1^{FbCOrTE delta 135 zcmew&|3!X-9g9mt4X;>&LU6GTuS7BD0SKpAn^&w^lYx;#0?Zdq*5Q>*)?|QifGQ=6 zH6hxB!74pBH?i0;N&)3%0u(@s<&r`2AWpG1uS~J$=3A^R>;gv9Kcw8a^<(u;&&{Dq NrSo2Ge#gVc3;Y7yG-hf(}MO=*IFaIwzRVoe4xvst^enX_TCFjEdtZfk&maI((TWS|^~S**Ra kn6qK?G^Q=g0=Mq`yKu5`f$jbvXev8`eP076h8%K!iX delta 86 zcmZn>Y7yG-hf%ztrZho7xL9XuG3Nm=vst^eS(9P1FjEdtZfk&maI((TWS|^~S**Ra kSd(G%G^Q=g0*Vqn($`j+togU8^x3<^EH;~?*j6zC04O&g761SM diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.ContentEncryptor.beam index f9667ecb1ec87ed1537a96354c8a31326dbb2597..88d9b1ae87cf042f035908a0175a658ee0208ab3 100644 GIT binary patch delta 353 zcmV-n0iOQE7Q_~?X9<5%gHQkf1N?ZLrIW!+!!Q)a(^;*|>F^+U(N$znp-jAZ@LEK{ zKO)5B*=FsMlD*Xp@qag)v+bs|iiaNZzAwM`%`XrE6Q$3{;GX&GuBX&Z_z^lW~@1&y1&4vVOCz zc9q91&gwy(HaoY6J!rOX-S|bbdvjKoKbT!y286)#5?$qK!x)La2E0;I)W? zA7WW|$7Y*!H*BY|rTE?5#x{SdB#MVUWZv7~yv(qnD~KyJpV9P=wFNnVST3ZQ5<-p< z7I-^lCKCExSt*o4fI=&g*q&avAMOcq_%>G@rM8X^r86{hj+B2g!n$iyYfZWwJi}r* zGRp+@aHJJl%A?}hw^@Bm1aXvBkdbSltrGO4sQXcRQx98oRcrpzmSSxE)x)>h4w|d6@Bsv*-R>Fle!9u*4(Mb diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.KeyManager.beam index 2fb7a095e3fec0453110507841bfaf3c6893a334..a8fdaa73fcd680497c6a1733af94d105548de1f3 100644 GIT binary patch delta 267 zcmV+m0rdXp6X+ALX$XJO&r8EF6bJBhtyaY!2nvFiUBn4x;@z7ULHrxSTi(-V?UItd z%@*;0HyyQ|FuEOb`Mz&HNt-lA5u;V5Ts^@E#UbUo(rzJyIAf~#aRDwv`(^wn)re%+ zk3{a*ae9!3D2_gsMzOZOaUx~OZmC#G5OCU*f=0Tzd!=gn;_82b?evZ6cQEit?)zts zA~M#{+8pG94eq?pC)w&@7>SWob1;PP+zIz>I4PWEQcReP$*dznnNgjLZNcR(y4?aJ zNcwMW!%cb*E7C?c&}|1@H_2X#f;^vr%6jEuxYk`fgv%YxzrPp3)s|+&bwMZs_Rk&v Ro6mm%qsXbw005I`34xzbhkgJ6 delta 267 zcmV+m0rdXp6X+ALX$XIjO-sW-5QaBRG%9`|R1m!MB31|$@7}x=#NV)tJEPeq-3^;* zO%VUPo07H>O4`F-p7-5nXV^4G5u;V5Tt349#WCf&(rzwSI~a`x(ij_z{H$Jz3+UlJp!=3xloWn*|~;ka;?NiktEBC|q-GNU>f*@DY`>h=l@ zAldHP!mj!NSEP+@M0Xp}O+yZ{D9G~)AuN?r*LqyV_BUxGo4q!2Y}A RfBEbW%wVa`005I`34wsCh1CE6 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Crypto.PBES2_HMAC_SHA2.beam index 8ef3a66ae4a2c1de747865802db7ffde7715927c..8ddc584abe1b6f8f520e230603a40e676e69dabe 100644 GIT binary patch delta 42 zcmV+_0M-A*7Q_~?A_E7~4HEJV65_Kd15E`Glaju4QLT>GriUvD1cjF>vxW%10#lt3 A8~^|S delta 42 zcmV+_0M-A*7Q_~?A_E8F4HD7~67sVt15E`GGsK74#iqV+Bcz*+riqxIvxW%10%Ted A`v3p{ diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.SSL.beam index f8511d53e7480896b92c4619545b6d00ed01e7cf..57a368d70b424ec47a476cd5e848ed9d14440d87 100644 GIT binary patch delta 194 zcmdlWvq5GtO&#`KnzoF2V{cuYXC7TNEoEvC$nU8 fKW8|TfK~m$bv>>^@07z=L@6eG)!F=w+lmPQc;Ox$ delta 194 zcmdlWvq5G&L1uOgT9l$BM>t%L&QCROpv%Qlx75pZ%*NDViYK-=zRM3 V&K!5f_w5YwNqPyJzwvEi0swl@94-I= delta 149 zcmZ3Xyh3?H3>&L7uOgT32 V?9nx5U-vNYSsYil`5WIRCID(3A#eZy diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.HTTP.beam index 67dc69335f2a22f41be1f9342dadc49a79550e60..6f1b9ab599e9d4c00e1884bb8f4c811db1c52f67 100644 GIT binary patch delta 311 zcmca(amQlA6?Q>AUIk5kAT|bK6Cl=|{FGgdRf<=UOLMaT$00@_(~e7X@^wy62y3${ zmpw?(5h$O@?FnLr0_C^!XaiZ{K*8rceIUVfpkNiB43L!p6r9cH$jCa8x0F+1@gUIk4(Al3(BV<0w}{FGgdRg+hdOKP(K$00@_(~e7O@^wy62y3${ zmpw?(5h$O@?FnLr0_C^!XaiZ{K*8rceIUVfpkNiB43L!p6r9cH$jHj6z*{~x-*ybNH5NPA|TCnuO g=KEsHnFL<;EO5OS-!2y{lwyFhT1&xJDFolJMr634- z0YQtj<_&xSpTX}BGhvI5^X-4m%U9^clX6_@E(86!Qahy81@D2fROnxne7f|0d`4z6YX9$9wub^SL zRRlpZe~D{e`>EfXzreL|4I*G0B~%O4kAlrlQRS+AVDl4HFLDI^5HJTH$U!v*c77iv zuQ+?ifUluvE!cv%FW)u!1~uW!H%-1wP5N@pX`e+H^yRC#E<6V*&hNd^x)kQY1N-T= zaV=PZA+R^wG5H!b?aPnla0tU-Z+wm_R~>}=Er2zh`sA}aBI0Y$`1VMI*=5!6N`s9<4{QV@h~ ztSrQ0>wOR*Z{YdX9dY6CpZ(^ancW$$;#J{TwsK+&~0g!2uKImskv*LF17yZ{g~Df+*Pj zIu?g((7b5ae}SuC>uLP2{~XoAO-O(ps9~C*@g&&%2ve@w12#Xz^dbAu3r@K4Zs5kK zroi^^V60O&+en}CaDv{o!8)YD=3AKZRmgzN*D&RakOiBoPx(CbgUy#P{qQX0*q`V3 z3RW;3*&O7-9^D462~`*X`)8YBzDzCr%MSuKW{)}ucKs7fAEY`2K|V}rfHrPJ5rR8* dr$%2QxrtKi)aiV9-R|_`Ncp|b{T^RP`~cU{RIUI3 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Parallel.beam index e5b0efe036fc5c60292b31a5b686aa2119828f2c..309778d603c1752311c4ff8d44a9fab35f55af72 100644 GIT binary patch delta 130 zcmbPWKEZrLISZ=@uOOHB<{B0!Mj%rP$UMv{&je)Z1DVg+uYyEvfXsuO%{(%!f#)tV zFffDxF%u9^1Y$-I28mBj5EEemF*a9-RWS;5Zm<#8@jJ0*bL`zKs<$jxZDx`PW#+u) Qc|VgglRr~%a)Pu0020?D!vFvP delta 130 zcmbPWKEZrLISZ>euOOGm<{B0!Mj%rP$UMv{&je)Z1DVg+uYyEvfXsuO%{($}o2utA zFffDxF%u9^1Y$-I28mBj5EEemF*a9-RWSQDTY%mm;$;BS#)LD~E)!=422%-vKClU*sMm(4>80mzaQN zOq5gsa<)ktGBQd|ej%j{;p4u!adL3XGDQH>yN{oW`Z@#VNxgD|4TLfngI6GchnQ z$^vOd5C(})E-(;*DcArMWCn^0LudwOu!02$1zUjvg WnZ0J=yyba6lQWY)Q*g47br}E_oP(7B delta 630 zcmYk1%_~Gv7{>3JJJZ}b2y=(-#fx|N+eAed69@} ze0X|@YIe{GepvNJkuSVUZZ%ppD^kUX%NbrTpf>mAW}+C3hD4c2sS1~*bhfSWI?d26 z`W^^2UDe+?up_T(I9#Z4f{~|&2o9BvN9dTBeuZ=Qff0z&5^P2u46XpX367%S3*~uZ zFFZliLZky_%*xYN)+1@yT6>)uVO`>ewCRrNO!P6jB{QlT{aPscuS2AFCOR42=FR^D zos8~S1G*L@ig~Jy^QY0)VNa8zm>UxW;SAvr1mcGh9^5xFG2bt60#k%9msJogV9N&1 z(QpEYLS4MJfLj|de}FL5{RWV%!_}k~>OlzBf|v~)at{C>u0WLEIBf&FWkC3Z zR{a6G4Qy}|Q9@KB%2!<5zyUn|Oa1}=4(pfZOFZDLkt&J*q<8AEdSIupPG2X@KzGUM Rc^-O8G$q0b&G7aue*-=;jAZ}- diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Registry.beam index 4906874c21a3678c2738eaa1b984a5de5faa2eed..edfff98c22267a4b76fa73d8bba680b661dec73d 100644 GIT binary patch delta 197 zcmV;$06PD$2(SpSHv@mRgHQkf0i1Z8eb8MFf-npK;L49ckh2(1WGbz0Ft#}+;_a=* z7o+gdv`N3TO;tfqkZZ@|bijmQ%SO*S3;@tXp5uPN(387cX(>&_HcAVOM5S_-5|k|( zbHcWl(g!|sY!z;>?g%pLEWiCPoj8oz*%1@mt<#LykC!q$W&V0U~F?t#J9H^ zZ;YZBO`G&f|D>uQD9E+re%fI|ux6uY9R>hsBF}LQ0y3b+mjR)t;_j^D0+;iT{Vo@y?)yD0ZQ;YVv z>EKSR+T`p+XWfb5T&H70A4C1FvLcq;^rPMG`=pn^o2UN>`~b|wQ=~0mA>J>r3Jekg ze~|VP-$}o?-b}8_%zff`UnSzyyd*I(SZN^owC)U@iPyZ0oAxqlAT#P-u`hU8HE=0y zd)bcBns=G@UaurCXNW(CCt2q`;N?iFOnM0Xomy+mtE;oVWm#WPgJr1#u0)!D)_lJ1 zT-5tNake?l)%}0}w&v4#1eyMd=J#+%u%46Ok^?n`A42BAN6qizheP~5Sr$*?jmQjo zN0uLO3vUYXx0+AjZiokxEi13a2uF}v{Dvrla`@2@-;fsSIvx%2bQ2-Xd7@vSccOw<6R3LL$|J9}n@8=G}N(h(Fi76F*_N z?0<%2aXT(Di&rI6GNc2U#VeZ2$H*|lpAuz`gP#ZF@=~?1TgaUa+Or4tKVFQCn*aa+ delta 901 zcmYk2%WD%+6vpp#GHnx0>?5W%jZI2hY-?vBK|zWp(JTa!`~#&GOQ5B6(RO7YgmzP~ zK>~vt1uMp2H`?MwG@5`{f5lMHJl*Wzbf zxI>OixNw)8Ux_cg{gvdKo(;F>AChDJbswnRLozW`Z{V0BXMeaij+7xgV+>@{fotX^ zJ8KMF88Pi_M;bdodUXRnfTAz9(HPV#$lv$H50jvy33!zfj{BtQmMCqz}ARd>Y>5;jfW- za30bDsYQ;=vI(OAp@QjKxhlAU*h@;(QryrultD?qk7ELAuXp&R8XQ6w>vd m5LGJQZDAa%pBIV#GK;Pjq5o$7zH=);JC%YD6n}luOSnoz~rO+en3)0KnqCP z3nT-{#R6GCl233ikUS%(03_cEt^#V9A@qcgh3Vjp(#Z{qA~GNb0|P@15HkYtAs}V~ zVg|5+4G0C5P>Fp&ngxg%!3rKA6qJJmfp`}XvjH*01OX)xuw9!ql!90ULf_AJJ8mkX SQMTvY$2EM`5u3Zz)K~zNRXzm( delta 224 zcmdlGx*>GJQZClC#GK+(=Df_Djq5o$7zH-(;JC%YD7bktuOSno;N+wHen3)0KnqCP z3nT-{#R6GCl233ikUS%(03_cEt^#V9A@qcgg_R}AYI1|3hzy9qz`#%g#Ed|E2#A@0 zm;tO{142P1RAL{HW&vVGu!08&1?3FVCIU~`w68Vdm7I5LC) diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.Backtracks.beam index ba6a2cfdc7fa9a47ba626734a2e7c3c43af10633..b87cfe5e25e349536a97631bccfef686dd804985 100644 GIT binary patch delta 773 zcmYk3&r1|x7{~XW*WDT4b=rAn*M;pM=oEqrp-3Ub)=CFsbFi>(1qrS{YAZ_Htk6|a z5F%7Iq{SjaB#5G7woAkw>agG;?{(|aKOlPW;`g!ljSipp`M#fd=9zb9s<~=zr7HOC z@j`fHs4$WLR2z#hS#CFLZ7z>9t2u2aJ(0?a!(Fn+mb{mDpG(`)6K-Hy`wZP&JYsHn zMyxX#9F4v=OqsSb-9iRG>;yX|xqBUxauw^;dCsg06)R)7B72cp{b}2e3z-$N9Et5< z(0;59Ym1Y?xU0@_)-hl?7 z`|l&t{5K#Bw4W>~v56W14QkK?G7Z`QCSc0nqYPdH3+O?25vl(bXau_dj`A;2#ee=5 zWl&nj5(Rot0g)~|2Tefx8;Imrfep0JBa(jtjsWe45y>xs7|?zUk^C}n@ce%lMj_}8 zo&pK<4L1?VuK^cmUqqx&{1(JXt1mQ18Pq@m9R8aA@yW}0?pbV4PQAEx$shRM+2q%A e^}uhbaOXtV)@nGm@w4$tzP|U+EC#!+XZQg`n}ZGj delta 773 zcmYk3&r1|x7{~XW*WI1ob=sMC*M;?9_x#B^Y97^n1P>|)1&3-o`sJ~Ei!s0>7yES`*38XcZsW?jZgxgwnthr3jplXn@=E5pZqCdLB{OSCk-Nmqo{Z%ugv<$9jKuda zXg}VFwZYC}+!gx-^0d8;>^na(x<&RGP&3J9tn0}|dom}|bjVUHY`SjOe9%{S8s`aS zQ@e)18Ma&+?gZoMA4cKs=VPHzXc92+Rn-vx>z}Co7gPgiKS2>}s%ohIhuBl!M^FQF z{{uvt{~m;a_G1Ml-l0Z7jT$tHOoQHnC}7Iprwmqs3G|?Qh}8cE909ujj`FWj#ee=b zWl&hb5(9cr9+56Afm)#b5F+^nU;*v>5y?LXM}hV?5XnCSaiIMGBKbLBhF%~&Z$40sgdB<@$>uu1T}hO diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Resolver.beam index 2b646641605a99b97425a06b7da786310faf3115..48f99ce81fff038526176b4578058050de78fc56 100644 GIT binary patch delta 638 zcmYL_J4nMo7{{AjW7CvkE@@S?DPoKG0>z?(pahC^5Y$NrCo2jq$n7#mJZjAqa4 zMUEP8ViL8--H*ECo+_cSa7>~`Kniix)TNw&yisn)Brd=5n6#-WPBBl^D2FWP^P(BQ z{x~K>WlsdHu5yRh6x~pDiH7tMk`|X-EiFyn3nI~cRg8~7Gj>s})`jGfNQ%*=?N(5t za^h`T)ObbOlsWOvBZv`fGJdo{CuOhd4ff>+=0T7+16-z|%HeQq0}ebEx`XA$b&c;| z*unx29sprdUih+w4HkkMAOP!x>QM27b(VoE-~yJ=Zwsr)*cDme29_{q3(LsZ-Dki9 zEFohH3oHYNzzZzl-4^Cq2KGQHumm|=eB><4KpIeB3A!!JAY+eYpR2O<{C`N~pfC%+GKKksG4-vlEdSrSoO0don7to2_-<{2$j>b*}&b delta 638 zcmYL_PbdUY9LHzo?bzATX6DWAl6EA!i6|lt4w`asQ0!?PoUA{kB;`gT2g-j&w5*Un zxhPESMM;Q~gOr1E;3g+=arAxr*g1UO@4fGQ-uu0Id-1*a;-M<{cJ>eTkb%DblhblV zr1pz4fU(6F!fq3UkOCDC1?m_RdH!- z66#?AvQ`77CyMETq@MwqM`XEyCh6(}RbEkD4P==C1zXhKu-CKfVK8A}U|0;qj6mcD zp&1yU;tPR%CZMCDC1?m_RdI=I z66#?AvQ`77CyMETq@MwqM`XEyCh6(}RbEkD4P==C1zXhKu-7v#PCLxNz_1vI8G*6Od;Ep&1yV;`5>Et$;K$5X02Z1u{YEO@TBENEoVq7KjZ*T0oi=h+*n= zXF?@3fHWJD#2g?SsF2YZNV9|3AcHo`=<6{HG;E3Yi diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Server.beam index 88d2c18add7a10eeb33dc16f60d58d2f2fa336f2..57aebdfb6c2196a07e231770c33899b8bcd9ee15 100644 GIT binary patch delta 25 hcmZ1?xkPe9J`e9L&-b%7 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.Process.beam index 0a4b45b709a76885bf0650f5643a097f85fc1c63..87db28f903608181a6724f5a871ce23dd164a4a7 100644 GIT binary patch delta 94 zcmeAX?-Ad?#=@$=E5juWwRts51S61X4rFq$tznd5Q2k-Tz`&pn#Ed{} l45b-B;*&41e-kiF`!FqB-(I+RkHD#Rw*4%duW@W+0sw9{78d{j delta 94 zcmeAX?-Ad?#=uz5901S61X4rFq$tznd5%q;!Nz`&pn#Ed{} l45b-B;*&41e-p6SzTtg-@1$zxIo{v4?$guVe2rrp69BOE83X_T diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.Shell.beam index 7ab69bbb49d2c6d00c0d50621d31ed15a8635844..a4e82989a3e30c12380cdc753dd2dde5604b2304 100644 GIT binary patch delta 78 zcmca3dq;Ld6Elm*RW50AWM`>U~>YC4I2x?=aiq57jTJy8Jl-- e1u+V&V87B8AABh1y4waB)%iJco27UTF#!O*(;5!| delta 78 zcmca3dq;Ld6ElmzRW6aqZOqQB0=xo1);Z>0AWM`>WOD+G4I2x)nds%o3%EqUjLkc^ df*1u-a-4gF|B0}~bY{J)*mdaHW+|RSOaN%B7<2#t diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.State.beam index efcc5ffd408b65fc3fb5ea75d0063d0dff72ca40..6c541e75cd94cc47f12059252f16df6e94b0fd82 100644 GIT binary patch delta 321 zcmaFk@Wx?7B0H-vuN;^D3Ts?RvBhKkrfOK4EaFJ1jGw~m=T0Q z;*&RsiNF-(0tK0Ycs7(~0xNicP>>0f0GTiuh*^OcVuFA;+=O(HAQ1NgF*^`5fK6~f zC`bj0ffRHCF((j16civ7Bm>1jRzHxPrZ*t|ge8;iiH3yccFjOEV@cr~u delta 321 zcmaFk@Wx?7B0H--uN;@~3Ts?RvE_S9rqa+81jLb35XW}F(U|r z#3yeM6M-qn1qw0)@oXr~1Xl0>p&%0|0Wx7S5VHa?!~_9xxC!YXK_Ko0Vs;>A0Gr@| zP>>1|1L95~<^*Dhf&zqsWS|(xiZ&qT2FZg=*t|ge8;ii=zD+BCOtKZ=oSaknP5PtB J=4CR+m;r&mNG1RP diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.UpdateChecker.beam index ae92b01eeef56787d3f04f90e1f23144963352a1..4a9b8d65b54c9f9c0b647ab6b65eb95837d2063c 100644 GIT binary patch delta 109 zcmcbiazkap9WLg)%pBIV#GK;Pjn5`CGYU_xVliVB+PslPfDy`oq$CI_I+r4;ljq?Md*JF@` zD@dY^`xYZma}ZE-D(^NRE0jxWvjX2tCLps6$lNCo#uRsnw}(rLw}+9V+d+hRCWi&P z0EY}CM~^iNZ?Cw+CEh-uWFI3(uLBEE(vn4hw~~>g&sv0c0!XqSDA~`*(GQfg<(RJ;W${tQSnA&ECb#h*ZFnEG0f8X&$6#4JF}05zu?$OP%X4#ccL3{$UL1>}G% zz6!)_Kn&B+0Azv;x(meYKnxb&{6{W`Szv2`_>Fg}>k6_SpPaTw$ujI=?Ct{Eywc2j1vhmoV(L4IY48*NK z%m`vb#XX_?W+2T3Vnf9}p!{ke4bsO168Fh02?4Ud1C@QMm{S_)n0Ht~AjaDF&WfO` zVO>Stv)G@ocm5XHvMrFu@BzcSjpFrt>R*?tF533c;LIDo#jFeuSQT#f$THY$uVmhR z%6pGSwU}Gv^P|hZI9h7I5_=n2mtZ%u>()%UlP9v01MU~E<2knLud3MOh#-dvGYXr3 z)`_jxX_Z~5yvzrHR1C;TP8*?*1m{goOq@@dI}N@23SXRWi)yB>tWmh}sr-Wh|3&S?w-ri@_6n~# z#_{>q#`$;r#d>pC?x$5G)Ny4$Q+-{k`N&KJJ5(v6>~}_9?Uzez|%IjBsa`= z);7=3{HwnhYMaffMV_dvP~@G!bhB{!p86j>#+_NwmN)L_*Xb}bd|;Z8yG)K@-t9e& zu}@XvrdV>X?J0c}Y_)!kU}^U=9eacRWs9~|IT&ramGS1CWw?~{-G4&e8q=;E@IF(~ zTxs7OE_UeT>lJgZTx!`}`tH}a<^L|f*w1UX@tgDdrVY*Wdt3P}#<{?&SSodT%zKfr z;D*Y#H~inJH%FN@#? diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Hex.beam index c044a17b372e693df2a4fdaeb1037ad8737eb672..5eb13a1a349b9699765c28e26641de3f5fe0667e 100644 GIT binary patch delta 606 zcmV-k0-^oDE5IwT7!Q90$7zyGX>?Qo00Jxk00ZNAoMlr@Zxb;Pb=tI4*+RufM7g;? zAgfY@gnH?r0>Om?<-*Bwb|;Cc*S2hLnx6B=xO3$PF*6RKfy>(aX7PV5Me25=IJqTT}kc4Ne@ewxkMr4szNX+sd{FnZ0BUQ$4ySPf!-NFxA$|8Fmcq zrTl=0q)z3XP7=D1?`x#3nEc>%{jR>ii(Iphbd#}XikyESUn^;|l2)A%8u2H?i}U&o zo?rRx^C!2|)|5>0z$G>nCKi@pw^)*mcFt$X{*YSY{-9%i)i-^BxHQSLc(018yowM#wbF`xRG5NaILN=w zai>@4*F-#RBz;8Cn4nvLpm4G!dL7&x|Ck|L>j9ok2foi!G5Ga^SYNV+6%MM{ywH}4 sv~(8h@VrLx-u?#9D=~|cP!U=Xh8@fQE|SVP48BEuLNe``v$_!m1iL&d?f?J) delta 606 zcmV-k0-^oDE5IwT7!Q93?Qo00Juj00ZNAoMlrza}zNTl@ljqa)AsV9zv)5 z0N;eKf;1^IFwjt78Y+!^TH7Kzokr3*PVGNNPs%qSOXH=b**M$$0F$anrQ{RioIb z#E@hGD>Va>FjC;#n(`+ToH$@@Nfq=Q=?|Y z{D6m~PUWpm655dOYNV~0{NQE%u6~0Txn>{fCS%VOIYoayBWbgeR-F(!=1+#NF6!5K ze&x5%pZrogTQbQ5m)KMoJ6M9-Vo5gI`z}lNhtv}HuYIv^$V4904Bdh!`+#_j7`2u5;T{l||6pXvi{Wwnv$_!m1ScOWZ~y=R diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Build.beam index 44306cd6e9e63bfca5544ddfc126031cf631c8cc..3c6980e4eb6035e6ed9cc17398315b2420009611 100644 GIT binary patch delta 954 zcmYk2O-K}B7{_Pa-CTE@S!=%>b%R};StW&(q7@8W#q8k0PF^E~!i$)Y$3^MTp}^RP zE@kvdCbYDDgO!&~5*;I?h$ZS^R|!$<_iXPA1MhF2-~Qj{d1vO`oHsY;&B|Idl(X6+ zUiD+NXog1zyRCdYk}Joo*W^7Bue@%Z#Cox`eF{5Tfq zt12&2gTDNY%Dbr{UtW5pHnP-xzKxeS4>S)^8-4i;mA6yFV5%2=F3xJDHi3T8Dk|r+ zP$QuGpNShr$xI|2``DUyzT``8`z5*@7h0&pCrE$shOz zavOT!HYx)fkOuwWTjKBqzVrL+_(sj@y;L4A Kq^g63mGD38O_Hnt delta 954 zcmYk2OK1~O6o&6K9g|L+Nj1;uLuhc4iY;idn1Vu5sddqXuDTU0D&0se=rXozl}be1 zXvIgxTCke>gsMewB`!ro6e-$G-HHfBzZ36;f&1lr`R_S*X72iwwLWDnuEgzv+u`Kv zZ{rm!=Hz?aVsf}#OSsR-d!2mkoqG`5jb*(mZu}N$>J&K)S#LtXa=rlT>O^Tjpe>!&=yMVR(0XBmT z`9HC%H12J)rSS$@X`gLEU!dPR_eaoGwAeMyd-Ud+x)Kzy?bu4ti3Qkda0J_d4HU+( zUD(aSX>1SX7bme2cBx_eIIyLAEn1D1?2AgN*I==R|5v4S{z~UV)Fv?bOPwE}Mnd_r z&MVaBQ2t!!JybiCSD)&QF6ySx#uJNr7Eu{UQ8$Abcp%R5s4kfP1)WQ;?3w&N%FS5v@(D2K%!{++)>>7S zU;PF5^ah)13z&Qkm8;)?tzZtiBMyHc38w!xD*11ak1+WyRL=PYX=t2t6q%Jj@CD>H z%)oV220lX;%!99q!$**7HT`!{>HiBpH2Ui!eednoW9OV7b05m(+*1GXHxJcX?Qkhm JFP9c#{{Z;0iPHc8 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Config.beam index 95282ab30a74cd45ae68bd3c39f136700e396e0a..549f6bc533d9912255c44575698882600df5a011 100644 GIT binary patch delta 249 zcmeA$>M)w{n~OOwGlw-TF{e0nGArXuL5}47+=9}Q)D-rV)U?FXoRZD!8P78@if^uG zdBMmiJ~@LenNec$8MdR05}PNnhXRE*zu@=>l6lT$B_Yl%%*YWulS7M1h|5oakt2kg zl|zD=OMJ2=w-r!H33nU2xDIa&Gnd37B2D43OqGTER0vfIVUgR6OjQi z7#JA*ftV49!+@9xh#9~NE+7>6fW&|}5QtfT7_49tzX;f*%@X`xOaim=Lqa`1zVYUm Q^1ol@;VP@mMS|1V0pbBYC;$Ke delta 249 zcmeA$>M)w{n~OCqF{e0{IWIG3GArXuLH3l?w8YY!5{~5j+=9}Q)RfKZ8P78@N^GuY zdBMmiF*$=RnNfW58MdR0;+rS2hXRE*zu@=>l6lT$B_Y8q%*YWulS7M1h|5oakt2kg zl|zD=OJcGmw-r!H33nU2gbr^EGne>eMji=v32oju7A}d+3OqGTEKFrf&QD&zCn5u4 zFfcIq12H2IhXFAY5Ho-kTtF!B0g8bX1OhP&5Q7y=;uis%v{{1Ri%H-mXX_K|*$!sK RqM-}_&b;EcxkzvtI{@%1K@|W1 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Docs.beam index a955a36726493265cace0f9e600a94c76f6cef79..ad147b73759cd8704e3b950bf76485929ee76c32 100644 GIT binary patch delta 1036 zcmYk1c}$XF9LL{RFkV@&A%ZE*QhLh+mDoBowK0lFLsKGZOVV0aibaYM*+FGE?NXyl zleEKf>-5MxsJ2@7s!`f9*GgAu^8gL4)U4l|vh~Mj&*%C6j`w*F$Z}=a;$<=cf&?Iy zm>hHV!&!7r^;(QY1r4Edj9C+JgUtq;i>HHyf?dV;fJK1uUGu;eg57bQ>g9)v=p0;x zVj>}x5>CMvO%~F}s&?0I=!=HFFO#%jv0zDzU10I>xi*FZ1ziJS1e08&gf&VOQ;w}k z{I`azYM4#Xw*gG*9tE}$tk_)&mIl`4PR^=eR)u1!vDwZ4X2~j-bsYLK!5Ucvm=^3a zs|IWjn28+*rUz?f%UvWGi-+e>=zhjfk7tk30y|hC6tP9uBcsd%lJ((@`?^M_#EyjZ9yX;tFs}9SMQO%tpBehzWIOd% z>WRy(AJVKz!{wEMuLrc+!z*TXS>B(RG32{R9`1R%@Knpst??J)9Xs z|6Ld@Y$+pTwj-(M2DjvJMVWC)EH)7t$2hLSnJPl8@RxF}$wSI~&W=zBt02puF{cz&H8~seGB&;uerHOZe8tki(AGy! zb5=F%4K}J@{W`XKAo%hP@yue$#P})`ucIPgd(xv_64EhTWYSzC^ji}*c(oxFYl=>@hW=kv?T=uMm#?KP+uOmpcKldfd;F$ZCSTop1y#)2I=DR(JuAV@QQvU)pTtp@S delta 1036 zcmYk%eNfAB90%~tw)Sh+FVlV%m02^EbUoaqLejDx#zeD?&?Cie$wkUdTCvD*y0$}V zl)57eX+2OVI(6pk@(`-)Ve+s}ana!rK0mcPf4uMe`n|v3?`Pi?ic}&bVx7p3K=Al= z0}&$>7Zjs$4M_+_271%D8iidG$R8AdW`Ke~HE1p<802Gr473V#$DTRI1r4Kd(J&$s z7D^^9C!u`jP}ypBZfZ=z zzcKjkUWey!E)^tX2tYeP=NLjz8t4N9zbl8kav~z1y1VP&U3`~~Y2jQZs0HJIvOsUJ zdQdJ%=eQK41ob(JZE4)a=n+yRf@y-BjL;XsBdN|T{E;ONvho`@9!#V?E?GH_VH^WN$ug?eLb8bS&|Mhubyl;e1Al5m`956n(9%2KrZX5vO z7wRBXh_zP$@xB&5TB!m*g}Z-9}vni#ZbdT$n*A>6>M0$`?)WDNy}KHSHWU2 zBI9tP=NIgGC*>XYB!`Px6*Tvk=Q#sE=GW=^+xGoIxxd}AJE9v$G)XLXB1LnUwLm#w zviPNr#s@6CEYSz|e@s0t?Im_dv3+F|Yx@P@Z{=lP&7Uq)AMJo@w4pH$WM&@P0*Vj5UD(xyqEKsRYT_1ps@>D!{A0zhR-#F7u!UnOPWng(<`2_FkcrlCvA4E#+Tz{U~w$uzh`4l A;s5{u diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Info.beam index 8a6805c0404ef7a573d235a6b63b80ef8465eb3a..5b4857ef10092a4f01dd253c4a1bd28172148121 100644 GIT binary patch delta 676 zcmbQ@GsS1a0#>$9+E3_e+W3Z z4tsnq7d&2EINRc2+3G{t{|jrx*LN~Z^w{?P`R{%67i(0>xn4YJ^*vkv^{EVdalW;? z4QDLgps|bP+Zm^BzPZ2rZtN7jc;>bIhS237yzA>ZJSPcQL`?R%&o}><@oQ*d; z|7^N1QP%DdR$a4mt4ng|%D*2qSC?@1K0L7?nCj_~R`>3?^xk2}CXBC4NPmlZeD!tD$j(A z4wKKzYq2+eowf4ziQSVFWO?`uN;TXIV^)a%D4#f4Q^AYn(LtVfn=2HI7zKEO4*f`Z Zvf#MIHkl*|3s-~54-~~VUr=;m0RU*h2J`>` delta 677 zcmbQ@GsS1a0#-J61MREEpEfUJ6=q}yvU!DooC9oGjEn}GwK)u#S-Dhs4L@y8w7G{jjuFK4`?UEzA0rcp8U1PUR{=W^EB4c53qdsyEB@2u zWWm3@Kvwc6-eg9OWCwSH&ACFxV7-N(CNC9k0Vyl~G+9q12xwKK$OaI<>eFU3Q4g@G z6FyCD7H0RUp5f%i@vroN1I1w!i2VWoVhEyF34#!&RTGw z#bjAy#mr?7kGVfKD{Oij)_VQl;~#o)!i-82bM8O?T|0lVMwOiF#gkUwv-Mw}%9z02 ze(kQrnZO8(SA2}ie5bPT7E<5@(-u$uL(?2Q7kAwThz9?i?3GfK{)pFnq(;xaQl>qUz3LtAc(%4i0-MBz1VA<8q!;$@2FXxVo!3n^k`ETOp&mLuk*W zz#T3tT&%={S(fgfzD!`OS)S$&88CtX2=d%TB9Ww8|q_c2YJ^@zh1z zGG8(Fi`cQ)#o7)(x= zS72N|xkFx7JN?7)MN{86yM4c()Ec$OZ)*R|b6>X^7^SYsuSvSI{y+oM+OL}zU%SdP zAuxXO1$iy@eP3s-ynUj2GNXblkCH*DhI?Vm3eg|plO}5^c(Hz7&GU|7bA^Htqreo^ dznfM+NNHYJH~sxQn@N`^KTs6gd_mEL1pr#}4c7nw diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Install.beam index d3a8b8422fed8616824ea94e5de875058cf373fe..b3dec5cfc6505db4c98f229f2c982740aed7d8bb 100644 GIT binary patch delta 107 zcmZ3ZyheFLIwKczUSgGbmJZ46j$q!g$faG766^t^Qm$CA(%do_m?_pqI zum)l#Aa(>|Mi2&xPrkq-!UAG!e!+8&QNVQi+{nqS>^pBeo%lHW`?2oL$M~Kx0RTbC BAus>{ delta 107 zcmZ3ZyheFLIwKcrT4GLdDsx_D&gMeKJZ47O$q!g$faG766^yc*m$CA(%P>zcj%8qA zum)l#Aa(>|Mi2&xPrkq-!UAG!e!+8&QNTL;6#t=9E;b(zzgxUNo2_W`F}`O^059?& AJOBUy diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Organization.beam index c02958bd55358149a85575a0cd154ccf0ea1ab17..cc210a675c87aedc00e7bb04b4c29489ba415745 100644 GIT binary patch delta 108 zcmX?MaKc~%4-3nssa%4S1z5USE?wmk+&rJfnUVDpuN08^ob?zpkZA^FZsJ_VEW?tv zSCD~$!3&5Pf!GO3Gl0Z5m+)R=66k+BkH@E4B_(^???oz$uJ=rC5D?p3AaH{n0HXsS Aa{vGU delta 108 zcmX?MaKc~%4+{&I;M7Z#1z5U)jH{P6&u4LFWaSd%mAbU~IqNZI5Yz0^=1rW-m}Quy z7G^OpFn9qmBM>`5X$Fw^<`Uj(Oai|@?o$s`-_t7gpfoo~Hzav-gMirP0)ZRs0FOQ& Aj{pDw diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Outdated.beam index cda48f70cb9468465bfecb587032964bf18f71cd..97838756589a6b2b5989ddaf99e23b5c1f88a197 100644 GIT binary patch delta 395 zcmbPXKEr%N4J*s1sa!&n8(1?~J{<)z-mq%1e7Xu`NU<$o{lqH*WbJ4Bulb2ro=b>V zo{>Y|flHm)mRFIHL&1SdjhT@{(Se!8T7*|w+~E_i5>WMX_K!e)`asrQjwB$<7|3$r zYy`3_xr8>K;uK;6GTniK54q<7SzbWF79JP2dd58#Cm9$RGJ%*8h>M{#15`W%$Y%oL zLMY7$6;Fk#%LmfTKnzo#2xNlPgXCF2!cg^bP<{fCW(8tqsCaBFkOQ(f3W(W&7-mom zkO?v<0*Ki`!cYwfAT|&u12G2>!_=n$nIMN`12HEMGlA4^ULqXEETEv+_@?UMr{?rC U7m7?J+s!8%h>LAj5U*eX01Zt|Q~&?~ delta 395 zcmbPXKEr%N4J!+m(9}zhTt^GOm7_EXB5fl}m_MnSmIlJ`u_ z43GsfC<2Jtff!~`0+`LfkPM_bfEcDe1;_$9BpZl1ftU$o!R95xVax)tXU{Gze;r~~ Vv2M1A*=q*A$p+$Ln-#<>SOCPqL%9F| diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Owner.beam index b2b10d3d6feafbac68d467fa5f9d7024ae87d1ea..e27d4c5b5bcafc00c3953542adfa4b8eccc29ad5 100644 GIT binary patch delta 614 zcmV-s0-61=C#)w3Mo&^P000xDu?Qju4I>RC3Kk6{0SF{OM?Qo00Hy>00e({oQ+gbZ__Xk4uc|8 zCWHh?AgE-GM<#y2o))19O>{67c&?7bN!&ShWjkHR>wYRv{0r_bbSwIlto5 zv$QCbsf4{kj3_~AS>W|48&A&63bZOZtFP5kXt|R5SjhEK=0T#xNMXwpL8QlGC)^X} zc(jE45-RC&|CVniQ{_X9S%_#Kg1_#HBkU+cO3k||MP3Xn7oA_sT!y?R(w=|iF~deR zrrIzmtuJP>v8#U+oN-K+@u3e+<)Ih&(7FnY`UycP%t`3gs zmUo70e4+^6GsX8Bqg-oNZB&2rTTT9303lvtvv~n#BYv=vtRpzOy()s8e%rwOR$tmu zKx89gFgDc4)OuVj{f0N}qTMP9*TnrIw~{WMZFbW>+!l-LpavJ9^(MbAxk|01+4bya zgAVU{uYMxB0r_z)uoRKE&S4{QMbv0V+-Ps27=2H(9Q#usX^e&=_w5|;m2h%ty$aS{ z4_^rbjU0x!4vn6-PX7Us%v5!gunvk4D}J#pB9O`RWfMvY>1KlBlW-3fvtSQU1clWS A?Qo00H#?00e({oQ+i9Z__Xk4uc|; zO$Z5)K&+BA9+~(9_Ou8^XrhCugXiisE2?-M^frsS+!O^?mGWfwE*5*{3hr=bYu|+1X_FZ94mLnNPoF=lM>ox1e2xn}=So zp>O`+aEVV8gLho}Mk!KJ>TxiRcF8=MBSFSkYRGLZXg>(2huGhmnk4(?rMa6!0)c!;v6#JA4-`Ul=F6 zu{Xn)LxbYO5I0`QS!?BAe&kej0001!tPYA0ELw~n_gZzp%FHx6q`kyVvqleQ1TQrj AtpET3 diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Package.beam index 64c5cd24e1cd636ff0eea6a17bd5a42eff79f408..84606bb2933f6dbba4d1ef8db1ca4a7916bec278 100644 GIT binary patch delta 51 zcmca$cEM}|Cnu{muO^q;WuG diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Publish.beam index 2d8508b55c20da6dab5438effdae65899224c72e..985a9f9d2e1556493ec6678550e6d18f4433a2e3 100644 GIT binary patch delta 393 zcmdl`u%Tc>2qPDBUSgG5`bxuZw&23zgjEoAC7jS=Pm)GGnVdhepJdZ~b z#5M)7_wj6El%HJ4tHdb3c?xeM6Huv`Kn1S?Z!9B6lml0^ume!hYyl;p_&xz?AbCr` z5lG4i0@<4_1S=UqCKUip+Pp)kj0tFzzGwnaeuAiojy&^Bj!-`V4h=?*zL^|hOhR0R z0*oB}+Po8(-9I>RsWA&Pa!lZ6<Tl1W3v%XUxUHB8Bwdwy zfod-+IkL*Iyjwnvfq`Kb5HkYtKPb%r5}$0KAp%n{2`cdoNHYU5L_vav2n$H%<_e8V htO6G&`O8!|ne)8N-pO>~)0MfC8}!6B7w8?}1ORO~WK;kE delta 393 zcmdl`u%Tc>2qPD3T4GLdDsx_D&gM8qbxub4&23zgjEwS=7jS=PSJ2@#Vdj#bJdZ~b z#5M)7_wj6ERG3`ItHh|Vc?xeM6Huv`Kn1TnZ!9B6lml0^ume!hYyl;p_&xz?AbCr` z5lG4i0@<4_1S=UqCKUip+Pp)kj0tFzzGwnaeuAiojso*cj!-`V4h=?*zL^|hOhR0R z0*oB}+Po8(xfC3@)R=`CIVNzka%eKUf7pCMbO{Skcd3-3q&%}N?;b{u-5@259D5v? zSsb_=fbLM(yk4pgWQCoqGSIb2vg;Xv93gpEAQ>Tl1W3v%XUxUHB8Bwdwy zfod-+IkL(y>t^y{1N{E delta 74 zcmdm?xkGcq8#Y!hOJ4Oyn?JHKv&k@LGJj-XVDJTECLs0#Vnz@KiEkF*Wn&VU8z$AS VWs}Vq%z0VDzD^-`vl{;-Rsf)?5mNvF diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Retire.beam index ce896d0ad2860e1ffd30c588143d704497e2ee49..34dc9d001f95157415dd0fddfd6dba4c0a4922d8 100644 GIT binary patch delta 40 ycmV+@0N4NU8t@vh&jSV04HF6~v(y9n1Q0`sXs!&SRT?GtPGwa_r1rDk2$BR&y%3E6 delta 40 ycmV+@0N4NU8t@vh&jSStDh(6Tv(y9n1Q5|f61!tWnWJi!oiIRKNqDo~2$BR+x)62% diff --git a/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam b/deps/.mix/archives/hex-0.20.5/hex-0.20.5/ebin/Elixir.Mix.Tasks.Hex.Search.beam index 627ad9157575b63261b90ff7add84f7c53e68b4f..48cdc7e7716a76bdc92e75bf4d2522aa79f3d77a 100644 GIT binary patch delta 300 zcmaDL`#^TWZ7$}#%pBIV#GK;PjZarHGm1>^XXyu$@~pK$axSYlpNO)93G+-2DRzSf z2QHDxhgel)phD6>p_v@gECQ_#%q$M>974h%1x##8K%J^==0Gx*P1YHx*afIx7O2>k zSCf%L1E`3Zkwepg*~G#90Z0o(fgH#JW)%nb4+t@NsHJ<^z?Oo{Q2<-2fM)4mu%!y@ z)<8>R*tHl%Hn+2vGP1BZulJn9DIx=+85kH$ftV49)q$7^h#5fQlMOgUzzR2ea7r-= bTn}8*b7aXm`BgDDGZkKzc5E)<&SM4uwWLL6 delta 300 zcmaDL`#^TWZ7$Zd#GK+(=Df_DjZarHGm1{`XXyu$@~pK$axSYlpQy5f3G+-2DRzSf z2QJachgel)phD6>p_v@gECQ_#%q$M>974h%1x##8K%J^==0Gx*P1YHx*afIx7O2>k zSCf%L1E`3Zkwepg*~G#90Z0o(fgH#JW)%nb4+t@NsHJ<^z?Oo{Q2<-2fM)4mu%!y@ z)<8>R*tHl%H@CBwGO{pbW&NAPDIx=+85kH$ftV49)q$7^h#5fQlMOgUzzR2ea7r-= aH0%B-pI)EidpeF$;%2SC;%@U|@&k;yd>R-4 delta 96 zcmaE0`M`3+EH+jPUI{MQ&GXruSb$6;AoCfQEEACF0%UUVcCg5>=FSmeU|@&Ivq}78b^qCeT$l3H(iKF(hhpQh{^Ys z!C`v+yXiIc;DL04UdUr|;SQQW_bZs}Z=o4o

$Wht@C*Ua t2Rcyw7unj-@2mck41)QdQnb_O@P9-qnZ(4mGd_A=ovIE;ONp*0$3F*%XJP;V delta 625 zcmYk0Pbh<79Du+5`LJ()Y-X)AJGi*uKpaFa?hd;+IPM@hs$FOfE||1NTg_oYE)-Tu zNfH-Hi-VT@&A2G-ptyN{ykEZ6)9?A7_kH)ixp*$VGwO1NK8-+T+|{Rtyp2Ynxb5n; zqaDOIcN*&%H;Yc7gTXE*nrG`|IDxGZzrqJ{{tVr3nz5nR=s@IK^p&ms z(Jb~(EJqVHN!!?q#%~MkPyrigs&A_AXQr&1eO-OuF&&cC{#9|f1t*yM3!+d4U0m%? zuBe3@W(}AJvZ`M(Yb||Q^%Aqr(wA^~;3c@gydWbE7hr(-|7n!{N$nhQOII&i{9DjY znI21DQ2m7Iwe*xY9D@(c3uaMy&>_@=+2=&z2>ja6|H1|;2Oc0GSv_b^^(wQ$(sxz= iU ok = socket_send(Socket, ?AMQP_PROTOCOL_HEADER), {next_state, hdr_sent, State}; -sasl_init_sent(#'v1_0.sasl_outcome'{code = {ubyte, 1}}, - #state{} = State) -> +sasl_init_sent(#'v1_0.sasl_outcome'{code = {ubyte, C}}, + #state{} = State) when C==1;C==2;C==3;C==4 -> {stop, sasl_auth_failure, State}. hdr_sent({protocol_header_received, 0, 1, 0, 0}, State) -> diff --git a/deps/amqp10_client/src/amqp10_msg.erl b/deps/amqp10_client/src/amqp10_msg.erl index b57c7d4..a1b1779 100644 --- a/deps/amqp10_client/src/amqp10_msg.erl +++ b/deps/amqp10_client/src/amqp10_msg.erl @@ -411,12 +411,18 @@ set_message_annotations( Anns1 = #'v1_0.message_annotations'{content = maps:to_list(Anns)}, Msg#amqp10_msg{message_annotations = Anns1}. +wrap_ap_value(true) -> + {boolean, true}; +wrap_ap_value(false) -> + {boolean, false}; wrap_ap_value(V) when is_integer(V) -> {uint, V}; wrap_ap_value(V) when is_binary(V) -> utf8(V); wrap_ap_value(V) when is_list(V) -> - utf8(list_to_binary(V)). + utf8(list_to_binary(V)); +wrap_ap_value(V) when is_atom(V) -> + utf8(atom_to_list(V)). %% LOCAL diff --git a/deps/amqp10_common/rabbitmq-components.mk b/deps/amqp10_common/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/amqp10_common/rabbitmq-components.mk +++ b/deps/amqp10_common/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/amqp_client/rabbitmq-components.mk b/deps/amqp_client/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/amqp_client/rabbitmq-components.mk +++ b/deps/amqp_client/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/amqp_client/src/amqp_direct_connection.erl b/deps/amqp_client/src/amqp_direct_connection.erl index 8231c29..89f0c57 100644 --- a/deps/amqp_client/src/amqp_direct_connection.erl +++ b/deps/amqp_client/src/amqp_direct_connection.erl @@ -214,10 +214,11 @@ ssl_info(Sock) -> case rabbit_net:ssl_info(Sock) of {ok, Infos} -> {_, P} = lists:keyfind(protocol, 1, Infos), - case lists:keyfind(cipher_suite, 1, Infos) of - {_,{K, C, H}} -> {P, K, C, H}; - {_,{K, C, H, _}} -> {P, K, C, H} - end; + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value( + selected_cipher_suite, Infos), + {P, K, C, H}; _ -> {unknown, unknown, unknown, unknown} end, diff --git a/deps/amqp_client/src/amqp_ssl.erl b/deps/amqp_client/src/amqp_ssl.erl index 36acca6..ff2bddd 100644 --- a/deps/amqp_client/src/amqp_ssl.erl +++ b/deps/amqp_client/src/amqp_ssl.erl @@ -38,15 +38,9 @@ maybe_add_sni_0({server_name_indication, SniHost}, _Host, Options) -> maybe_add_sni_1(false, _Host, Options) -> % NB: host is not a DNS host name, so nothing to add Options; -maybe_add_sni_1(true, _Host, Options) -> - % NB: For RabbitMQ 3.7.x, log a warning - ?LOG_WARN("Connection (~p): Server name indication is not enabled for this TLS connection. " - "Please see https://rabbitmq.com/ssl.html for more information.~n", [self()]), - Options. - % TODO FUTURE 3.8.x - % SNI will become the default in RabbitMQ 3.8.0 - % Opts1 = [{server_name_indication, Host} | Options], - % maybe_add_verify_fun(lists:keymember(verify_fun, 1, Opts1), Host, Opts1). +maybe_add_sni_1(true, Host, Options) -> + Opts1 = [{server_name_indication, Host} | Options], + maybe_add_verify_fun(lists:keymember(verify_fun, 1, Opts1), Host, Opts1). maybe_add_verify_fun(true, _Host, Options) -> % NB: verify_fun already present, don't add twice diff --git a/deps/credentials_obfuscation/README.md b/deps/credentials_obfuscation/README.md index 71814d0..80f4e3c 100644 --- a/deps/credentials_obfuscation/README.md +++ b/deps/credentials_obfuscation/README.md @@ -10,6 +10,25 @@ the Erlang runtime (`error_logger`). Note that this application **cannot protect against heap dumping attacks** and only helps avoid sensitive data appearing in log files. +# Usage + +First, make the `credentials_obfuscation` application a dependency of your project. + +Then, during the start-up of your application, and after the `credentials_obfuscation` application starts, provide the secret value: + + +``` +CookieBin = atom_to_binary(erlang:get_cookie(), latin1)), +credentials_obfuscation:set_secret(CookieBin) +``` + +To use a random value, do the following: + +``` +Bytes = crypto:strong_rand_bytes(128), +credentials_obfuscation:set_secret(Bytes) +``` + ## License and Copyright See [LICENSE](./LICENSE). diff --git a/deps/credentials_obfuscation/include/credentials_obfuscation.hrl b/deps/credentials_obfuscation/include/credentials_obfuscation.hrl new file mode 100644 index 0000000..e10071c --- /dev/null +++ b/deps/credentials_obfuscation/include/credentials_obfuscation.hrl @@ -0,0 +1 @@ +-define(PENDING_SECRET, '$pending-secret'). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation.app.src b/deps/credentials_obfuscation/src/credentials_obfuscation.app.src index 60a8101..4f5726b 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation.app.src +++ b/deps/credentials_obfuscation/src/credentials_obfuscation.app.src @@ -1,11 +1,11 @@ {application,credentials_obfuscation, [{description,"Helper library that obfuscates sensitive values in process state"}, - {vsn,"1.1.0"}, + {vsn,"2.0.0"}, {licenses,["MPL1.1","ASL2"]}, {links,[{"GitHub", "https://github.com/rabbitmq/credentials-obfuscation"}]}, {registered,[]}, {mod,{credentials_obfuscation_app,[]}}, {applications,[kernel,stdlib,crypto]}, - {env,[{ets_table_name,credentials_obfuscation},{enabled,true}]}, + {env,[{enabled,true}]}, {modules,[]}]}. diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation.erl b/deps/credentials_obfuscation/src/credentials_obfuscation.erl index f765af7..02fa4da 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation.erl @@ -16,28 +16,48 @@ -module(credentials_obfuscation). --export([encrypt/1,decrypt/1]). +%% Configuration API +-export([enabled/0, cipher/0, hash/0, iterations/0, secret/0]). -encrypt(none) -> - none; +%% API +-export([set_secret/1, encrypt/1, decrypt/1, refresh_config/0]). + +-spec enabled() -> boolean(). +enabled() -> + credentials_obfuscation_svc:get_config(enabled). + +-spec cipher() -> atom(). +cipher() -> + credentials_obfuscation_svc:get_config(cipher). + +-spec hash() -> atom(). +hash() -> + credentials_obfuscation_svc:get_config(hash). + +-spec iterations() -> non_neg_integer(). +iterations() -> + credentials_obfuscation_svc:get_config(iterations). + +-spec secret() -> binary() | '$pending-secret'. +secret() -> + credentials_obfuscation_svc:get_config(secret). + +-spec set_secret(binary()) -> ok. +set_secret(Secret) when is_binary(Secret) -> + ok = credentials_obfuscation_svc:set_secret(Secret). + +-spec encrypt(term()) -> {plaintext, term()} | {encrypted, binary()}. +encrypt(none) -> none; +encrypt(undefined) -> undefined; encrypt(Term) -> - case credentials_obfuscation_app:enabled() of - true -> - credentials_obfuscation_pbe:encrypt( - credentials_obfuscation_app:cipher(), credentials_obfuscation_app:hash(), credentials_obfuscation_app:iterations(), - credentials_obfuscation_app:passphrase(), Term); - false -> - Term - end. - -decrypt(none) -> - none; -decrypt(Base64EncryptedBinary) -> - case credentials_obfuscation_app:enabled() of - true -> - credentials_obfuscation_pbe:decrypt( - credentials_obfuscation_app:cipher(), credentials_obfuscation_app:hash(), credentials_obfuscation_app:iterations(), - credentials_obfuscation_app:passphrase(), Base64EncryptedBinary); - false -> - Base64EncryptedBinary - end. \ No newline at end of file + credentials_obfuscation_svc:encrypt(Term). + +-spec decrypt({plaintext, term()} | {encrypted, binary()}) -> term(). +decrypt(none) -> none; +decrypt(undefined) -> undefined; +decrypt(Term) -> + credentials_obfuscation_svc:decrypt(Term). + +-spec refresh_config() -> ok. +refresh_config() -> + credentials_obfuscation_svc:refresh_config(). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl index 797051b..ad0822c 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_app.erl @@ -20,50 +20,10 @@ -export([start/2, stop/1]). -%% Dummy supervisor - see Ulf Wiger's comment at -%% http://erlang.2086793.n4.nabble.com/initializing-library-applications-without-processes-td2094473.html --behaviour(supervisor). --export([init/1]). - --export([enabled/0, passphrase/0, cipher/0, hash/0, iterations/0]). - +-spec start(_,_) -> {'error', _} | {'ok', pid()} | {'ok', pid(), _}. start(_StartType, _StartArgs) -> - _ = case enabled() of - true -> - T = ets:new(table_name(), [set, protected, named_table]), - ets:insert_new(T, {secret, crypto:strong_rand_bytes(128)}), - %% cipher/decipher attempt to crash now instead of at some awkward moment - check(); - false -> - ok - end, - supervisor:start_link({local, ?MODULE}, ?MODULE, []). - -check() -> - Value = <<"dummy">>, - Encrypted = credentials_obfuscation:encrypt(Value), - Value = credentials_obfuscation:decrypt(Encrypted). + credentials_obfuscation_sup:start_link(). +-spec stop(_) -> 'ok'. stop(_State) -> ok. - -init([]) -> {ok, {{one_for_one, 1, 5}, []}}. - -enabled() -> - application:get_env(credentials_obfuscation, enabled, true). - -passphrase() -> - [{secret, PassPhrase}] = ets:lookup(table_name(), secret), - PassPhrase. - -table_name() -> - application:get_env(credentials_obfuscation, ets_table_name, credentials_obfuscation). - -cipher() -> - application:get_env(credentials_obfuscation, cipher, credentials_obfuscation_pbe:default_cipher()). - -hash() -> - application:get_env(credentials_obfuscation, hash, credentials_obfuscation_pbe:default_hash()). - -iterations() -> - application:get_env(credentials_obfuscation, iterations, credentials_obfuscation_pbe:default_iterations()). diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl index d2c5b27..1fc94ed 100644 --- a/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_pbe.erl @@ -16,6 +16,8 @@ -module(credentials_obfuscation_pbe). +-include("credentials_obfuscation.hrl"). + -export([supported_ciphers/0, supported_hashes/0, default_cipher/0, default_hash/0, default_iterations/0]). -export([encrypt_term/5, decrypt_term/5]). -export([encrypt/5, decrypt/5]). @@ -84,14 +86,18 @@ default_iterations() -> %% Encryption/decryption of arbitrary Erlang terms. -encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term) -> - encrypt(Cipher, Hash, Iterations, PassPhrase, term_to_binary(Term)). +encrypt_term(_Cipher, _Hash, _Iterations, ?PENDING_SECRET, Term) -> + {plaintext, Term}; +encrypt_term(Cipher, Hash, Iterations, Secret, Term) -> + encrypt(Cipher, Hash, Iterations, Secret, term_to_binary(Term)). -decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - binary_to_term(decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary)). +decrypt_term(_Cipher, _Hash, _Iterations, _Secret, {plaintext, Term}) -> + Term; +decrypt_term(Cipher, Hash, Iterations, Secret, Base64Binary) -> + binary_to_term(decrypt(Cipher, Hash, Iterations, Secret, Base64Binary)). %% The cipher for encryption is from the list of supported ciphers. -%% The hash for generating the key from the passphrase is from the list +%% The hash for generating the key from the secret is from the list %% of supported hashes. See crypto:supports/0 to obtain both lists. %% The key is generated by applying the hash N times with N >= 1. %% @@ -99,26 +105,31 @@ decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> %% function accepts that same base64 binary. -spec encrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText) -> + pos_integer(), iodata(), binary()) -> {plaintext, binary()} | {encrypted, binary()}. +encrypt(_Cipher, _Hash, _Iterations, ?PENDING_SECRET, ClearText) -> + {plaintext, ClearText}; +encrypt(Cipher, Hash, Iterations, Secret, ClearText) when is_binary(ClearText) -> Salt = crypto:strong_rand_bytes(16), Ivec = crypto:strong_rand_bytes(iv_length(Cipher)), - Key = make_key(Cipher, Hash, Iterations, PassPhrase, Salt), + Key = make_key(Cipher, Hash, Iterations, Secret, Salt), Binary = crypto:block_encrypt(Cipher, Key, Ivec, pad(Cipher, ClearText)), - base64:encode(<< Salt/binary, Ivec/binary, Binary/binary >>). + Encrypted = base64:encode(<>), + {encrypted, Encrypted}. -spec decrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> + pos_integer(), iodata(), {'encrypted', binary() | [1..255]} | {'plaintext', _}) -> any(). +decrypt(_Cipher, _Hash, _Iterations, _Secret, {plaintext, ClearText}) -> + ClearText; +decrypt(Cipher, Hash, Iterations, Secret, {encrypted, Base64Binary}) -> IvLength = iv_length(Cipher), << Salt:16/binary, Ivec:IvLength/binary, Binary/bits >> = base64:decode(Base64Binary), - Key = make_key(Cipher, Hash, Iterations, PassPhrase, Salt), + Key = make_key(Cipher, Hash, Iterations, Secret, Salt), unpad(crypto:block_decrypt(Cipher, Key, Ivec, Binary)). -%% Generate a key from a passphrase. +%% Generate a key from a secret. -make_key(Cipher, Hash, Iterations, PassPhrase, Salt) -> - Key = pbdkdf2(PassPhrase, Salt, Iterations, key_length(Cipher), +make_key(Cipher, Hash, Iterations, Secret, Salt) -> + Key = pbdkdf2(Secret, Salt, Iterations, key_length(Cipher), fun crypto:hmac/4, Hash, hash_length(Hash)), if Cipher =:= des3_cbc; Cipher =:= des3_cbf; Cipher =:= des3_cfb; diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl new file mode 100644 index 0000000..10d2800 --- /dev/null +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_sup.erl @@ -0,0 +1,49 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019 Pivotal Software, Inc. All rights reserved. +%% + +-module(credentials_obfuscation_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%% =================================================================== +%% API functions +%% =================================================================== + +-spec start_link() -> 'ignore' | {'error', _} | {'ok', pid()}. +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%% =================================================================== +%% Supervisor callbacks +%% =================================================================== + +init([]) -> + SupFlags = #{ + strategy => one_for_one, + intensity => 1, + period => 5 + }, + ChildSpec = #{ + id => credentials_obfuscaton_svc, + start => {credentials_obfuscation_svc, start_link, []} + }, + {ok, {SupFlags, [ChildSpec]}}. diff --git a/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl b/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl new file mode 100644 index 0000000..f8e61b3 --- /dev/null +++ b/deps/credentials_obfuscation/src/credentials_obfuscation_svc.erl @@ -0,0 +1,160 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019 Pivotal Software, Inc. All rights reserved. +%% + +-module(credentials_obfuscation_svc). + +-behaviour(gen_server). + +-include("credentials_obfuscation.hrl"). + +%% API functions +-export([start_link/0, + get_config/1, + refresh_config/0, + set_secret/1, + encrypt/1, + decrypt/1]). + +%% gen_server callbacks +-export([init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + terminate/2, + code_change/3]). + +-record(state, {enabled :: boolean(), + cipher :: atom(), + hash :: atom(), + iterations :: non_neg_integer(), + secret :: binary() | '$pending-secret'}). + +%%%=================================================================== +%%% API functions +%%%=================================================================== + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +-spec get_config(atom()) -> term(). +get_config(Config) -> + gen_server:call(?MODULE, {get_config, Config}). + +-spec refresh_config() -> ok. +refresh_config() -> + gen_server:call(?MODULE, refresh_config). + +-spec set_secret(binary()) -> ok. +set_secret(Secret) when is_binary(Secret) -> + gen_server:call(?MODULE, {set_secret, Secret}). + +-spec encrypt(term()) -> {plaintext, term()} | {encrypted, binary()}. +encrypt(Term) -> + gen_server:call(?MODULE, {encrypt, Term}). + +-spec decrypt({plaintext, term()} | {encrypted, binary()}) -> term(). +decrypt(Term) -> + gen_server:call(?MODULE, {decrypt, Term}). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +init([]) -> + init_state(). + +handle_call({get_config, enabled}, _From, #state{enabled=Enabled}=State) -> + {reply, Enabled, State}; +handle_call({get_config, cipher}, _From, #state{cipher=Cipher}=State) -> + {reply, Cipher, State}; +handle_call({get_config, hash}, _From, #state{hash=Hash}=State) -> + {reply, Hash, State}; +handle_call({get_config, iterations}, _From, #state{iterations=Iterations}=State) -> + {reply, Iterations, State}; +handle_call({get_config, secret}, _From, #state{secret=Secret}=State) -> + {reply, Secret, State}; +handle_call(refresh_config, _From, State0) -> + {ok, State1} = refresh_config(State0), + {reply, ok, State1}; +handle_call({encrypt, Term}, _From, #state{enabled=false}=State) -> + {reply, Term, State}; +handle_call({encrypt, Term}, _From, #state{cipher=Cipher, + hash=Hash, + iterations=Iterations, + secret=Secret}=State) -> + Encrypted = credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, Secret, Term), + {reply, Encrypted, State}; +handle_call({decrypt, Term}, _From, #state{enabled=false}=State) -> + {reply, Term, State}; +handle_call({decrypt, Term}, _From, #state{cipher=Cipher, + hash=Hash, + iterations=Iterations, + secret=Secret}=State) -> + Decrypted = credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, Secret, Term), + {reply, Decrypted, State}; +handle_call({set_secret, Secret}, _From, State0) -> + State1 = State0#state{secret = Secret}, + {reply, ok, State1}. + +handle_cast(_Message, State) -> + {noreply, State}. + +handle_info(_Message, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + + +-spec init_state() -> {'ok', #state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::pos_integer(), secret::'$pending-secret'}}. +init_state() -> + {ok, Enabled, Cipher, Hash, Iterations} = get_config_values(), + ok = check(Cipher, Hash, Iterations), + State = #state{enabled = Enabled, cipher = Cipher, hash = Hash, + iterations = Iterations, secret = ?PENDING_SECRET}, + {ok, State}. + +-spec refresh_config(#state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::non_neg_integer(), secret::'$pending-secret' | binary()}) -> + {'ok', #state{enabled::boolean(), cipher::atom(), hash::atom(), iterations::non_neg_integer(), secret::'$pending-secret' | binary()}}. +refresh_config(#state{secret=Secret}=State0) -> + {ok, Enabled, Cipher, Hash, Iterations} = get_config_values(), + ok = case Enabled of + true -> check(Cipher, Hash, Iterations); + false -> ok + end, + State1 = State0#state{enabled = Enabled, cipher = Cipher, hash = Hash, + iterations = Iterations, secret = Secret}, + {ok, State1}. + +get_config_values() -> + Enabled = application:get_env(credentials_obfuscation, enabled, true), + Cipher = application:get_env(credentials_obfuscation, cipher, + credentials_obfuscation_pbe:default_cipher()), + Hash = application:get_env(credentials_obfuscation, hash, + credentials_obfuscation_pbe:default_hash()), + Iterations = application:get_env(credentials_obfuscation, iterations, + credentials_obfuscation_pbe:default_iterations()), + {ok, Enabled, Cipher, Hash, Iterations}. + +check(Cipher, Hash, Iterations) -> + Value = <<"dummy">>, + TempSecret = crypto:strong_rand_bytes(128), + E = credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, TempSecret, Value), + Value = credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, TempSecret, E), + ok. diff --git a/deps/cuttlefish/Makefile b/deps/cuttlefish/Makefile new file mode 100644 index 0000000..49eae6f --- /dev/null +++ b/deps/cuttlefish/Makefile @@ -0,0 +1,26 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += +'{parse_transform, lager_transform}' + +DEPS += getopt +dep_getopt = hex 1.0.1 getopt +DEPS += lager +dep_lager = hex 3.7.0 lager + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/cuttlefish/README.md b/deps/cuttlefish/README.md new file mode 100644 index 0000000..eba4a9e --- /dev/null +++ b/deps/cuttlefish/README.md @@ -0,0 +1,104 @@ +# Cuttlefish + +[![Build Status](https://travis-ci.org/Kyorai/cuttlefish.svg?branch=develop)](https://travis-ci.org/Kyorai/cuttlefish) +[![Coverage Status](https://coveralls.io/repos/github/Kyorai/cuttlefish/badge.svg?branch=master)](https://coveralls.io/github/Kyorai/cuttlefish) +[![Hex version](https://img.shields.io/hexpm/v/cuttlefish.svg "Hex version")](https://hex.pm/packages/cuttlefish) + +Cuttlefish is a library for Erlang applications that wish to walk the +fine line between Erlang `app.config`s and a sysctl-like syntax. +The name is a pun on the pronunciation of 'sysctl' and jokes are +better explained. + +This repository retains full history of the original repository, [basho/cuttlefish/](https://github.com/basho/cuttlefish/), +but intentionally cut ties with that repo to avoid confusion as to +where is the most up-to-date, maintained version is. + +This is the repository used to produce [Hex.pm releases](https://hex.pm/packages/cuttlefish) of the project. + +## Riak Disclaimer + +While this readme and test suite is Riak-heavy, the fact is that this +library can be used with any Erlang application that wants a more +universally accessible configuration syntax. Still, I built this for +Riak, and it's nice to have a concrete example to work with. + +## The Vision + +Currently, Riak's `app.config` is **the** definitive place for +configuring Riak. It's not odd for Erlang applications to be +configured this way, but it is a struggle for non-Erlang programmers +and automated deployment tools to manipulate these files. On the other +hand, the `app.config` is a useful construct for Erlang programmers, +and it is pretty coupled to OTP applications. + +Cuttlefish's goal is to put a layer of abstraction on top of the +`app.config` that is easier to work with outside of the Erlang world. +It will allow Erlang programmers to write a schema for their +application's configuration file, which is independent of the +applications included in the project. The schema is one of the more +important parts of Cuttlefish, so we'll go into more detail on it +below, but it is written in Erlang and defines how the non-Erlang +configuration file works. + +From this schema, you can generate a default `.conf` file for your +application. This will be the file that is packaged with your +application as the default configuration. + +The schema is also used to generate an `app.config` that will be used +to start your application. Using the schema alone will generate all +the proper defaults. Your users can make changes to the `.conf` file +and those changes will overwrite the schema's defaults. + +You an also have an `advanced.config` which looks like the old +`app.config` for anything that no schema mapping is created for. + +What does this look like for an application like Riak? + +Well, the authors of Riak maintain a schema for Riak's config. It +defines all sorts of things we'll get into later. When we build Riak, +Cuttlefish generates a `riak.conf` file that contains the default +shipping configuration of Riak. When a script to start Riak is run, a +Cuttlefish escript is spun up, reads the `riak.conf` file and combines +that with the Schema to generate an `app.config`. The script then +exits, and a new Erlang VM (destined to run Riak) is started with that +generated `app.config`. Down the line somewhere, you may be +troubleshooting some part of Riak, and the support organization at +Basho may need you to manipulate a configuration setting that is not +exposed by the schema because it is so infrequently used. In that +case, we can set that setting directly in an `advanced.config` which +sits in the same directory as `riak.conf`. + +I hope that gives you a good idea about how this works at a high +level. + +## What's it look like to Erlang Developers? + +You can learn more about the technical implementation of schemas at: +https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Erlang-Developers + +## What's it look like to users? + +Riak uses the semantic of `$conf_dir/app.config` for configuration. +We're going to replace that with a file called `riak.conf`, with a +syntax that looks like this: + +```ini +ring_size = 32 +anti_entropy = debug +log.error.file = /var/log/error.log +log.console.file = /var/log/console.log +log.syslog = on +``` + +More information for users here: +https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Application-Users + +## What's it look like to application packagers? + +* [node_package](https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-node_package-users) +* [non node_package](https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-non-node_package-users) + + +## Current Status + +Cuttlefish is ready for production deployments. diff --git a/deps/cuttlefish/priv/erlang_vm.schema b/deps/cuttlefish/priv/erlang_vm.schema new file mode 100644 index 0000000..287ef91 --- /dev/null +++ b/deps/cuttlefish/priv/erlang_vm.schema @@ -0,0 +1,351 @@ +%%-*- mode: erlang -*- + +%% @doc Starts the Erlang runtime system with SMP support +%% enabled. This may fail if no runtime system with SMP support is +%% available. The 'auto' setting starts the Erlang runtime system with +%% SMP support enabled if it is available and more than one logical +%% processor are detected. -smp disable starts a runtime system +%% without SMP support. +%% +%% NOTE: The runtime system with SMP support will not be available on +%% all supported platforms. See also the erlang.schedulers settings. +%% +%% NOTE: Some native extensions (NIFs) require use of the SMP +%% emulator. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.smp", "vm_args.-smp", [ + {default, enable}, + {datatype, {enum, [enable, auto, disable]}}, + hidden +]}. + +%% @doc Sets the mapping of warning messages for error_logger. +%% Messages sent to the error logger using one of the warning +%% routines can be mapped either to errors (default), warnings +%% (w - default), or info reports (i). +{mapping, "erlang.W", "vm_args.+W", [ + {default, "w"}, + hidden +]}. + +%% @doc Sets the number of scheduler threads to create and scheduler +%% threads to set online when erlang.smp support has been enabled. The +%% maximum for both values is 1024. If the Erlang runtime system is +%% able to determine the amount of logical processors configured and +%% logical processors available, schedulers.total will default to +%% logical processors configured, and schedulers.online will default +%% to logical processors available; otherwise, the default values will +%% be 1. Schedulers may be omitted if schedulers.online is not and +%% vice versa. +%% +%% If schedulers.total or schedulers.online is specified as a negative +%% number, the value is subtracted from the default number of logical +%% processors configured or logical processors available, +%% respectively. +%% +%% Specifying the value 0 for Schedulers or SchedulersOnline resets +%% the number of scheduler threads or scheduler threads online +%% respectively to its default value. +%% +%% This option is ignored if the emulator doesn't have SMP support +%% enabled (see the erlang.smp flag). +%% +%% More information at: http://erlang.org/doc/man/erl.html +%% +S Schedulers:SchedulerOnline +{mapping, "erlang.schedulers.total", "vm_args.+S", [ + {default, undefined}, + {datatype, integer}, + {validators, ["=<1024"]} +]}. + +%% @see erlang.schedulers.total +{mapping, "erlang.schedulers.online", "vm_args.+S", [ + {default, undefined}, + {datatype, integer}, + {validators, ["=<1024"]} +]}. + +{translation, "vm_args.+S", + fun(Conf) -> + Total = cuttlefish:conf_get("erlang.schedulers.total", Conf, undefined), + Online = cuttlefish:conf_get("erlang.schedulers.online", Conf, undefined), + case {Total, Online} of + {undefined, undefined} -> cuttlefish:unset(); + {undefined, O} -> ":" ++ integer_to_list(O); + {T, undefined} -> integer_to_list(T); + _ -> integer_to_list(Total) ++ ":" ++ integer_to_list(Online) + end + end +}. + +{validator, "=<1024", "has a maximum value of 1024", + fun(X) -> X =< 1024 end}. + +%% @doc Enables or disables the kernel poll functionality if the +%% emulator supports it. If the emulator does not support kernel poll, +%% and the K flag is passed to the emulator, a warning is issued at +%% startup. +%% +%% Similar information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.K", "vm_args.+K", [ + {default, on}, + {datatype, flag}, + hidden +]}. + +%%%% Tunables +%% @doc Name of the Erlang node +{mapping, "nodename", "vm_args.-name", [ + {default, "{{node}}"} +]}. + +%% @doc Cookie for distributed node communication. All nodes in the +%% same cluster should use the same cookie or they will not be able to +%% communicate. +{mapping, "distributed_cookie", "vm_args.-setcookie", [ + {default, "erlang"} +]}. + +%% @doc Sets the number of threads in async thread pool, valid range +%% is 0-1024. If thread support is available, the default is 64. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.async_threads", "vm_args.+A", [ + {default, 64}, + {datatype, integer}, + {validators, ["range:0-1024"]} +]}. + +{validator, "range:0-1024", "must be 0 to 1024", + fun(X) -> X >= 0 andalso X =< 1024 end}. + +%% @doc Suggested stack size, in bytes, for threads in the +%% async-thread pool. Valid range is 16-8192 kilowords. The default +%% suggested stack size is 16 kilowords, i.e, 64 kilobyte on 32-bit +%% architectures. This small default size has been chosen since the +%% amount of async-threads might be quite large. The default size is +%% enough for drivers delivered with Erlang/OTP, but might not be +%% sufficiently large for other dynamically linked in drivers that use +%% the driver_async() functionality. Note that the value passed is +%% only a suggestion, and it might even be ignored on some platforms. +%% +%% More information at: http://erlang.org/doc/man/erl.html +{mapping, "erlang.async_threads.stack_size", "vm_args.+a", [ + {datatype, bytesize}, + {validators, [ "stack-size-divisible", "stack-size-range"]}, + hidden +]}. + +{validator, "stack-size-divisible", ("must be divisible by " ++ integer_to_list(erlang:system_info({wordsize,external}))), + fun(X) -> X rem (erlang:system_info({wordsize, external})) == 0 end}. + +{validator, "stack-size-range", + begin + WordSize = erlang:system_info({wordsize, external}), + ("must be in the range of " ++ cuttlefish_bytesize:to_string(16 * 1024 * WordSize) + ++ " to " ++ cuttlefish_bytesize:to_string(8192 * 1024 * WordSize)) + end, + fun(X) -> + Scaled = X div (1024 * erlang:system_info({wordsize, external})), + Scaled =< 8192 andalso Scaled >= 16 + end}. + +{translation, "vm_args.+a", + fun(Conf) -> + RawValue = cuttlefish:conf_get("erlang.async_threads.stack_size", Conf), + RawValue div (1024 * erlang:system_info({wordsize, external})) + end}. + +%% Note: OTP R15 and earlier uses -env ERL_MAX_PORTS, R16+ uses +Q +%% @doc The number of concurrent ports/sockets +%% Valid range is 1024-134217727 +{mapping, "erlang.max_ports", + cuttlefish:otp("R16", "vm_args.+Q", "vm_args.-env ERL_MAX_PORTS"), [ + {default, 262144}, + {datatype, integer}, + {validators, ["range4ports"]} +]}. + +{validator, "range4ports", "must be 1024 to 134217727", + fun(X) -> X >= 1024 andalso X =< 134217727 end}. + +%% @doc A non-negative integer which indicates how many times +%% generational garbage collections can be done without forcing a +%% fullsweep collection. In low-memory systems (especially without +%% virtual memory), setting the value to 0 can help to conserve +%% memory. +%% +%% More information at: +%% http://www.erlang.org/doc/man/erlang.html#system_flag-2 +{mapping, "erlang.fullsweep_after", "vm_args.-env ERL_FULLSWEEP_AFTER", [ + {default, 0}, + {datatype, integer}, + hidden, + {validators, ["positive_integer"]} +]}. + +{validator, "positive_integer", "must be a positive integer", + fun(X) -> X >= 0 end}. + +%% @doc Set the location of crash dumps +{mapping, "erlang.crash_dump", "vm_args.-env ERL_CRASH_DUMP", [ + {default, "{{crash_dump}}"}, + {datatype, file}, + hidden +]}. + +%% Note: OTP R15 and earlier uses -env ERL_MAX_ETS_TABLES, +%% R16+ uses +e +%% @doc Raise the ETS table limit +{mapping, "erlang.max_ets_tables", + cuttlefish:otp("R16", "vm_args.+e", "vm_args.-env ERL_MAX_ETS_TABLES"), [ + {default, 256000}, + {datatype, integer}, + hidden +]}. + +%% @doc Raise the default erlang process limit +{mapping, "erlang.process_limit", "vm_args.+P", [ + {datatype, integer}, + {default, 256000}, + hidden +]}. + +%% @doc For nodes with many busy_dist_port events, Basho recommends +%% raising the sender-side network distribution buffer size. +%% 32MB may not be sufficient for some workloads and is a suggested +%% starting point. Erlangers may know this as +zdbbl. +%% The Erlang/OTP default is 1024 (1 megabyte). +%% See: http://www.erlang.org/doc/man/erl.html#%2bzdbbl +{mapping, "erlang.distribution_buffer_size", "vm_args.+zdbbl", [ + {datatype, bytesize}, + {commented, "32MB"}, + hidden, + {validators, ["zdbbl_range"]} +]}. + +{translation, "vm_args.+zdbbl", + fun(Conf) -> + ZDBBL = cuttlefish:conf_get("erlang.distribution_buffer_size", Conf, undefined), + case ZDBBL of + undefined -> undefined; + X when is_integer(X) -> cuttlefish_util:ceiling(X / 1024); %% Bytes to Kilobytes; + _ -> undefined + end + end +}. + +{validator, "zdbbl_range", "must be between 1KB and 2097151KB", + fun(ZDBBL) -> + %% 2097151KB = 2147482624 + ZDBBL >= 1024 andalso ZDBBL =< 2147482624 + end +}. + +%% @doc Set scheduler forced wakeup interval. All run queues will be +%% scanned each Interval milliseconds. While there are sleeping +%% schedulers in the system, one scheduler will be woken for each +%% non-empty run queue found. An Interval of zero disables this +%% feature, which also is the default. +%% +%% This feature is a workaround for lengthy executing native code, and +%% native code that do not bump reductions properly. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+sfwi +{mapping, "erlang.schedulers.force_wakeup_interval", "vm_args.+sfwi", [ + {commented, 500}, + {datatype, integer} +]}. + +%% @doc Enable or disable scheduler compaction of load. By default +%% scheduler compaction of load is enabled. When enabled, load +%% balancing will strive for a load distribution which causes as many +%% scheduler threads as possible to be fully loaded (i.e., not run out +%% of work). This is accomplished by migrating load (e.g. runnable +%% processes) into a smaller set of schedulers when schedulers +%% frequently run out of work. When disabled, the frequency with which +%% schedulers run out of work will not be taken into account by the +%% load balancing logic. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+scl +{mapping, "erlang.schedulers.compaction_of_load", "vm_args.+scl", [ + {commented, "false"}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc Enable or disable scheduler utilization balancing of load. By +%% default scheduler utilization balancing is disabled and instead +%% scheduler compaction of load is enabled which will strive for a +%% load distribution which causes as many scheduler threads as +%% possible to be fully loaded (i.e., not run out of work). When +%% scheduler utilization balancing is enabled the system will instead +%% try to balance scheduler utilization between schedulers. That is, +%% strive for equal scheduler utilization on all schedulers. +%% +%% More information: http://www.erlang.org/doc/man/erl.html#+sub +{mapping, "erlang.schedulers.utilization_balancing", "vm_args.+sub", [ + {commented, "true"}, + {datatype, {enum, [true, false]}} +]}. + +%% @doc For ease of firewall configuration, the Erlang distribution +%% can be bound to a limited range of TCP ports. If this is set, and +%% erlang.distribution.port_range.maximum is *unset*, only this port +%% will be used. If the minimum is *unset*, no restriction will be +%% made on the port range; instead Erlang will listen on a random +%% high-numbered port. +%% +%% More information: http://www.erlang.org/faq/how_do_i.html#id55090 +%% http://www.erlang.org/doc/man/kernel_app.html +{mapping, "erlang.distribution.port_range.minimum", "kernel.inet_dist_listen_min", [ + {commented, 6000}, + {datatype, integer}, + hidden +]}. + +%% @see erlang.distribution.port_range.minimum +{mapping, "erlang.distribution.port_range.maximum", "kernel.inet_dist_listen_max", [ + {commented, 7999}, + {datatype, integer}, + hidden +]}. + +%% @doc Set the interface/IP to listen for distributed Erlang connections. +%% +%% More information: http://erlang.org/doc/man/kernel_app.html +{mapping, "erlang.distribution.interface", "kernel.inet_dist_use_interface", [ + {commented, "true"}, + {datatype, string}, + {validators, ["ip_strict"]}, + hidden +]}. + +{translation, "kernel.inet_dist_use_interface", + fun(Conf) -> + IPStr = cuttlefish:conf_get("erlang.distribution.interface", Conf), + {ok, IP_address} = inet:parse_strict_address(IPStr), + IP_address + end +}. + +{validator, "ip_strict", "must be a valid IPv4 or IPv6 address", +fun(String) -> + try inet:parse_strict_address(String) of + {ok,{_,_,_,_}} -> true; + {ok,{_,_,_,_,_,_,_,_}} -> true; + _ -> false + catch _:_ -> + false + end +end}. + +%% @doc Set the net_kernel's net_ticktime. +%% +%% More information: http://www.erlang.org/doc/man/kernel_app.html#net_ticktime +%% and http://www.erlang.org/doc/man/net_kernel.html#set_net_ticktime-1 +{mapping, "erlang.distribution.net_ticktime", "vm_args.-kernel net_ticktime", [ + {commented, 60}, + {datatype, integer}, + hidden +]}. diff --git a/deps/cuttlefish/rebar.config b/deps/cuttlefish/rebar.config new file mode 100644 index 0000000..ddd41ff --- /dev/null +++ b/deps/cuttlefish/rebar.config @@ -0,0 +1,23 @@ +{minimum_otp_vsn, "R16"}. + +{erl_opts, [warnings_as_errors, + {parse_transform, lager_transform}, + debug_info, + warn_untyped_record]}. + +{deps, [getopt, {lager, "~>3.7.0"}]}. + +{escript_emu_args, "%%! -escript main cuttlefish_escript +S 1 +A 0\n"}. +{escript_incl_apps, [goldrush, getopt, lager, cuttlefish]}. +{escript_main_app, cuttlefish}. + +{provider_hooks, [{post, [{compile, {default, escriptize}}]}]}. + +{eunit_opts, [verbose]}. +{cover_enabled, true}. +{cover_print_enabled, true}. +{cover_export_enabled, true}. + +{profiles, [{dev, [{deps, [neotoma]}, + {plugins, [rebar3_neotoma_plugin]}]}, + {test, [{deps, [bbmustache]}]}]}. diff --git a/deps/cuttlefish/rebar.config.script b/deps/cuttlefish/rebar.config.script new file mode 100644 index 0000000..20a57a8 --- /dev/null +++ b/deps/cuttlefish/rebar.config.script @@ -0,0 +1,15 @@ +%% vim:ft=erlang: + +case os:getenv("TRAVIS_JOB_ID") of + false -> CONFIG; + JobId -> + %% coveralls.io. + [{plugins, [{coveralls, + {git, "https://github.com/markusn/coveralls-erl", + {branch, "master"}}}]} + ,{coveralls_coverdata, "_build/test/cover/eunit.coverdata"} + ,{coveralls_service_name, "travis-ci"} + ,{coveralls_service_job_id, JobId} + |CONFIG + ] +end. diff --git a/deps/cuttlefish/rebar.lock b/deps/cuttlefish/rebar.lock new file mode 100644 index 0000000..d5a5db0 --- /dev/null +++ b/deps/cuttlefish/rebar.lock @@ -0,0 +1,10 @@ +{"1.1.0", +[{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}, + {<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1}, + {<<"lager">>,{pkg,<<"lager">>,<<"3.7.0">>},0}]}. +[ +{pkg_hash,[ + {<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}, + {<<"goldrush">>, <<"F06E5D5F1277DA5C413E84D5A2924174182FB108DABB39D5EC548B27424CD106">>}, + {<<"lager">>, <<"563AB17CD32134A3DD17EC3B3622E6D8F827506AA4F8C489158879BED87D980B">>}]} +]. diff --git a/deps/cuttlefish/src/conf_parse.erl b/deps/cuttlefish/src/conf_parse.erl new file mode 100644 index 0000000..ad6f6c3 --- /dev/null +++ b/deps/cuttlefish/src/conf_parse.erl @@ -0,0 +1,435 @@ +-module(conf_parse). +-export([parse/1,file/1]). +-define(p_anything,true). +-define(p_charclass,true). +-define(p_choose,true). +-define(p_label,true). +-define(p_not,true). +-define(p_one_or_more,true). +-define(p_optional,true). +-define(p_scan,true). +-define(p_seq,true). +-define(p_string,true). +-define(p_zero_or_more,true). + + + + +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +%% This module implements the parser for a sysctl-style +%% configuration format. Example: +%% +%% ``` +%% riak.local.node = riak@127.0.0.1 +%% riak.local.http = 127.0.0.1:8098 +%% riak.local.pb = 127.0.0.1:8087 +%% riak.local.storage.backend = bitcask''' +%% +%% This would parse into the following flat proplist: +%% +%% ``` +%% [{<<"riak.local.node">>,<<"riak@127.0.0.1">>}, +%% {<<"riak.local.http">>,<<"127.0.0.1:8098">>}, +%% {<<"riak.local.pb">>,<<"127.0.0.1:8087">>}, +%% {<<"riak.local.storage.backend">>,<<"bitcask">>}]''' +%% +%% Other modules in this application interpret and validate the +%% result of a successful parse. +%% @end +-define(line, true). +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc Only let through lines that are not comments or whitespace. +is_setting(ws) -> false; +is_setting(comment) -> false; +is_setting(_) -> true. + +%% @doc Removes escaped dots from keys +unescape_dots([$\\,$.|Rest]) -> + [$.|unescape_dots(Rest)]; +unescape_dots([]) -> []; +unescape_dots([C|Rest]) -> + [C|unescape_dots(Rest)]. + +-ifdef(TEST). +file_test() -> + Conf = conf_parse:file("test/riak.conf"), + ?assertEqual([ + {["ring_size"],"32"}, + {["anti_entropy"],"debug"}, + {["log","error","file"],"/var/log/error.log"}, + {["log","console","file"],"/var/log/console.log"}, + {["log","syslog"],"on"}, + {["listener","http","internal"],"127.0.0.1:8098"}, + {["listener","http","external"],"10.0.0.1:80"} + ], Conf), + ok. + +utf8_test() -> + Conf = conf_parse:parse("setting = thingŒ\n"), + ?assertEqual([{["setting"], + {error, {conf_to_latin1, 1}} + }], Conf), + ok. +-endif. + +-spec file(file:name()) -> any(). +file(Filename) -> + AbsFilename = filename:absname(Filename), + case erl_prim_loader:get_file(AbsFilename) of + {ok, Bin, _} -> parse(Bin); + error -> {error, undefined} + end. + +-spec parse(binary() | list()) -> any(). +parse(List) when is_list(List) -> parse(unicode:characters_to_binary(List)); +parse(Input) when is_binary(Input) -> + _ = setup_memo(), + Result = case 'config'(Input,{{line,1},{column,1}}) of + {AST, <<>>, _Index} -> AST; + Any -> Any + end, + release_memo(), Result. + +-spec 'config'(input(), index()) -> parse_result(). +'config'(Input, Index) -> + p(Input, Index, 'config', fun(I,D) -> (p_zero_or_more(fun 'line'/2))(I,D) end, fun(Node, _Idx) -> + [ L || L <- Node, is_setting(L) ] + end). + +-spec 'line'(input(), index()) -> parse_result(). +'line'(Input, Index) -> + p(Input, Index, 'line', fun(I,D) -> (p_choose([p_seq([p_choose([fun 'setting'/2, fun 'comment'/2, p_one_or_more(fun 'ws'/2)]), p_choose([fun 'crlf'/2, fun 'eof'/2])]), fun 'crlf'/2]))(I,D) end, fun(Node, _Idx) -> + case Node of + [ Line, _EOL ] -> Line; + Line -> Line + end + end). + +-spec 'setting'(input(), index()) -> parse_result(). +'setting'(Input, Index) -> + p(Input, Index, 'setting', fun(I,D) -> (p_seq([p_zero_or_more(fun 'ws'/2), fun 'key'/2, p_zero_or_more(fun 'ws'/2), p_string(<<"=">>), p_zero_or_more(fun 'ws'/2), fun 'value'/2, p_zero_or_more(fun 'ws'/2), p_optional(fun 'comment'/2)]))(I,D) end, fun(Node, _Idx) -> + [ _, Key, _, _Eq, _, Value, _, _ ] = Node, + {Key, Value} + end). + +-spec 'key'(input(), index()) -> parse_result(). +'key'(Input, Index) -> + p(Input, Index, 'key', fun(I,D) -> (p_seq([p_label('head', fun 'word'/2), p_label('tail', p_zero_or_more(p_seq([p_string(<<".">>), fun 'word'/2])))]))(I,D) end, fun(Node, _Idx) -> + [{head, H}, {tail, T}] = Node, + [unicode:characters_to_list(H)| [ unicode:characters_to_list(W) || [_, W] <- T]] + end). + +-spec 'value'(input(), index()) -> parse_result(). +'value'(Input, Index) -> + p(Input, Index, 'value', fun(I,D) -> (p_one_or_more(p_seq([p_not(p_choose([p_seq([p_zero_or_more(fun 'ws'/2), fun 'crlf'/2]), fun 'comment'/2])), p_anything()])))(I,D) end, fun(Node, Idx) -> + case unicode:characters_to_binary(Node, utf8, latin1) of + {_Status, _Begining, _Rest} -> + {error, {conf_to_latin1, line(Idx)}}; + Bin -> + binary_to_list(Bin) + end + end). + +-spec 'comment'(input(), index()) -> parse_result(). +'comment'(Input, Index) -> + p(Input, Index, 'comment', fun(I,D) -> (p_seq([p_zero_or_more(fun 'ws'/2), p_string(<<"#">>), p_zero_or_more(p_seq([p_not(fun 'crlf'/2), p_anything()]))]))(I,D) end, fun(_Node, _Idx) ->comment end). + +-spec 'word'(input(), index()) -> parse_result(). +'word'(Input, Index) -> + p(Input, Index, 'word', fun(I,D) -> (p_one_or_more(p_choose([p_string(<<"\\.">>), p_charclass(<<"[A-Za-z0-9_-]">>)])))(I,D) end, fun(Node, _Idx) -> + unescape_dots(unicode:characters_to_list(Node)) + end). + +-spec 'crlf'(input(), index()) -> parse_result(). +'crlf'(Input, Index) -> + p(Input, Index, 'crlf', fun(I,D) -> (p_seq([p_optional(p_string(<<"\r">>)), p_string(<<"\n">>)]))(I,D) end, fun(_Node, _Idx) ->ws end). + +-spec 'eof'(input(), index()) -> parse_result(). +'eof'(Input, Index) -> + p(Input, Index, 'eof', fun(I,D) -> (p_not(p_anything()))(I,D) end, fun(_Node, _Idx) ->ws end). + +-spec 'ws'(input(), index()) -> parse_result(). +'ws'(Input, Index) -> + p(Input, Index, 'ws', fun(I,D) -> (p_charclass(<<"[\s\t]">>))(I,D) end, fun(_Node, _Idx) ->ws end). + + + +-file("peg_includes.hrl", 1). +-type index() :: {{line, pos_integer()}, {column, pos_integer()}}. +-type input() :: binary(). +-type parse_failure() :: {fail, term()}. +-type parse_success() :: {term(), input(), index()}. +-type parse_result() :: parse_failure() | parse_success(). +-type parse_fun() :: fun((input(), index()) -> parse_result()). +-type xform_fun() :: fun((input(), index()) -> term()). + +-spec p(input(), index(), atom(), parse_fun(), xform_fun()) -> parse_result(). +p(Inp, StartIndex, Name, ParseFun, TransformFun) -> + case get_memo(StartIndex, Name) of % See if the current reduction is memoized + {ok, Memo} -> %Memo; % If it is, return the stored result + Memo; + _ -> % If not, attempt to parse + Result = case ParseFun(Inp, StartIndex) of + {fail,_} = Failure -> % If it fails, memoize the failure + Failure; + {Match, InpRem, NewIndex} -> % If it passes, transform and memoize the result. + Transformed = TransformFun(Match, StartIndex), + {Transformed, InpRem, NewIndex} + end, + memoize(StartIndex, Name, Result), + Result + end. + +-spec setup_memo() -> ets:tid(). +setup_memo() -> + put({parse_memo_table, ?MODULE}, ets:new(?MODULE, [set])). + +-spec release_memo() -> true. +release_memo() -> + ets:delete(memo_table_name()). + +-spec memoize(index(), atom(), parse_result()) -> true. +memoize(Index, Name, Result) -> + Memo = case ets:lookup(memo_table_name(), Index) of + [] -> []; + [{Index, Plist}] -> Plist + end, + ets:insert(memo_table_name(), {Index, [{Name, Result}|Memo]}). + +-spec get_memo(index(), atom()) -> {ok, term()} | {error, not_found}. +get_memo(Index, Name) -> + case ets:lookup(memo_table_name(), Index) of + [] -> {error, not_found}; + [{Index, Plist}] -> + case proplists:lookup(Name, Plist) of + {Name, Result} -> {ok, Result}; + _ -> {error, not_found} + end + end. + +-spec memo_table_name() -> ets:tid(). +memo_table_name() -> + get({parse_memo_table, ?MODULE}). + +-ifdef(p_eof). +-spec p_eof() -> parse_fun(). +p_eof() -> + fun(<<>>, Index) -> {eof, [], Index}; + (_, Index) -> {fail, {expected, eof, Index}} end. +-endif. + +-ifdef(p_optional). +-spec p_optional(parse_fun()) -> parse_fun(). +p_optional(P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} -> {[], Input, Index}; + {_, _, _} = Success -> Success + end + end. +-endif. + +-ifdef(p_not). +-spec p_not(parse_fun()) -> parse_fun(). +p_not(P) -> + fun(Input, Index)-> + case P(Input,Index) of + {fail,_} -> + {[], Input, Index}; + {Result, _, _} -> {fail, {expected, {no_match, Result},Index}} + end + end. +-endif. + +-ifdef(p_assert). +-spec p_assert(parse_fun()) -> parse_fun(). +p_assert(P) -> + fun(Input,Index) -> + case P(Input,Index) of + {fail,_} = Failure-> Failure; + _ -> {[], Input, Index} + end + end. +-endif. + +-ifdef(p_seq). +-spec p_seq([parse_fun()]) -> parse_fun(). +p_seq(P) -> + fun(Input, Index) -> + p_all(P, Input, Index, []) + end. + +-spec p_all([parse_fun()], input(), index(), [term()]) -> parse_result(). +p_all([], Inp, Index, Accum ) -> {lists:reverse( Accum ), Inp, Index}; +p_all([P|Parsers], Inp, Index, Accum) -> + case P(Inp, Index) of + {fail, _} = Failure -> Failure; + {Result, InpRem, NewIndex} -> p_all(Parsers, InpRem, NewIndex, [Result|Accum]) + end. +-endif. + +-ifdef(p_choose). +-spec p_choose([parse_fun()]) -> parse_fun(). +p_choose(Parsers) -> + fun(Input, Index) -> + p_attempt(Parsers, Input, Index, none) + end. + +-spec p_attempt([parse_fun()], input(), index(), none | parse_failure()) -> parse_result(). +p_attempt([], _Input, _Index, Failure) -> Failure; +p_attempt([P|Parsers], Input, Index, FirstFailure)-> + case P(Input, Index) of + {fail, _} = Failure -> + case FirstFailure of + none -> p_attempt(Parsers, Input, Index, Failure); + _ -> p_attempt(Parsers, Input, Index, FirstFailure) + end; + Result -> Result + end. +-endif. + +-ifdef(p_zero_or_more). +-spec p_zero_or_more(parse_fun()) -> parse_fun(). +p_zero_or_more(P) -> + fun(Input, Index) -> + p_scan(P, Input, Index, []) + end. +-endif. + +-ifdef(p_one_or_more). +-spec p_one_or_more(parse_fun()) -> parse_fun(). +p_one_or_more(P) -> + fun(Input, Index)-> + Result = p_scan(P, Input, Index, []), + case Result of + {[_|_], _, _} -> + Result; + _ -> + {fail, {expected, Failure, _}} = P(Input,Index), + {fail, {expected, {at_least_one, Failure}, Index}} + end + end. +-endif. + +-ifdef(p_label). +-spec p_label(atom(), parse_fun()) -> parse_fun(). +p_label(Tag, P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} = Failure -> + Failure; + {Result, InpRem, NewIndex} -> + {{Tag, Result}, InpRem, NewIndex} + end + end. +-endif. + +-ifdef(p_scan). +-spec p_scan(parse_fun(), input(), index(), [term()]) -> {[term()], input(), index()}. +p_scan(_, <<>>, Index, Accum) -> {lists:reverse(Accum), <<>>, Index}; +p_scan(P, Inp, Index, Accum) -> + case P(Inp, Index) of + {fail,_} -> {lists:reverse(Accum), Inp, Index}; + {Result, InpRem, NewIndex} -> p_scan(P, InpRem, NewIndex, [Result | Accum]) + end. +-endif. + +-ifdef(p_string). +-spec p_string(binary()) -> parse_fun(). +p_string(S) -> + Length = erlang:byte_size(S), + fun(Input, Index) -> + try + <> = Input, + {S, Rest, p_advance_index(S, Index)} + catch + error:{badmatch,_} -> {fail, {expected, {string, S}, Index}} + end + end. +-endif. + +-ifdef(p_anything). +-spec p_anything() -> parse_fun(). +p_anything() -> + fun(<<>>, Index) -> {fail, {expected, any_character, Index}}; + (Input, Index) when is_binary(Input) -> + <> = Input, + {<>, Rest, p_advance_index(<>, Index)} + end. +-endif. + +-ifdef(p_charclass). +-spec p_charclass(string() | binary()) -> parse_fun(). +p_charclass(Class) -> + {ok, RE} = re:compile(Class, [unicode, dotall]), + fun(Inp, Index) -> + case re:run(Inp, RE, [anchored]) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {character_class, binary_to_list(Class)}, Index}} + end + end. +-endif. + +-ifdef(p_regexp). +-spec p_regexp(binary()) -> parse_fun(). +p_regexp(Regexp) -> + {ok, RE} = re:compile(Regexp, [unicode, dotall, anchored]), + fun(Inp, Index) -> + case re:run(Inp, RE) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {regexp, binary_to_list(Regexp)}, Index}} + end + end. +-endif. + +-ifdef(line). +-spec line(index() | term()) -> pos_integer() | undefined. +line({{line,L},_}) -> L; +line(_) -> undefined. +-endif. + +-ifdef(column). +-spec column(index() | term()) -> pos_integer() | undefined. +column({_,{column,C}}) -> C; +column(_) -> undefined. +-endif. + +-spec p_advance_index(input() | unicode:charlist() | pos_integer(), index()) -> index(). +p_advance_index(MatchedInput, Index) when is_list(MatchedInput) orelse is_binary(MatchedInput)-> % strings + lists:foldl(fun p_advance_index/2, Index, unicode:characters_to_list(MatchedInput)); +p_advance_index(MatchedInput, Index) when is_integer(MatchedInput) -> % single characters + {{line, Line}, {column, Col}} = Index, + case MatchedInput of + $\n -> {{line, Line+1}, {column, 1}}; + _ -> {{line, Line}, {column, Col+1}} + end. diff --git a/deps/cuttlefish/src/conf_parse.peg b/deps/cuttlefish/src/conf_parse.peg new file mode 100644 index 0000000..090ffdd --- /dev/null +++ b/deps/cuttlefish/src/conf_parse.peg @@ -0,0 +1,165 @@ +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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 configuration file may have zero-or-more lines. +config <- line* %{ + [ L || L <- Node, is_setting(L) ] +%}; + +%% Lines are actual settings, comments, or horizontal whitespace, +%% terminated by an end-of-line or end-of-file. +line <- ((setting / comment / ws+) (crlf / eof)) / crlf %{ + case Node of + [ Line, _EOL ] -> Line; + Line -> Line + end +%}; + +%% A setting is a key and a value, joined by =, with surrounding +%% whitespace ignored. +setting <- ws* key ws* "=" ws* value ws* comment? %{ + [ _, Key, _, _Eq, _, Value, _, _ ] = Node, + {Key, Value} +%}; + +%% A key is a series of dot-separated identifiers. +key <- head:word tail:("." word)* %{ + [{head, H}, {tail, T}] = Node, + [unicode:characters_to_list(H)| [ unicode:characters_to_list(W) || [_, W] <- T]] +%}; + +%% A value is any character, with trailing whitespace stripped. +value <- (!((ws* crlf) / comment) .)+ %{ + case unicode:characters_to_binary(Node, utf8, latin1) of + {_Status, _Begining, _Rest} -> + {error, {conf_to_latin1, line(Idx)}}; + Bin -> + binary_to_list(Bin) + end +%}; + +%% A comment is any line that begins with a # sign, leading whitespace +%% allowed. +comment <- ws* "#" (!crlf .)* `comment`; + +%% A word is one or more of letters, numbers and dashes or +%% underscores. +word <- ("\\." / [A-Za-z0-9_-])+ %{ + unescape_dots(unicode:characters_to_list(Node)) +%}; + +%% An end-of-line is signified by a line-feed with an optional +%% preceding carriage-return. +crlf <- "\r"? "\n" `ws`; + +%% The end-of-file is where no character matches. +eof <- !. `ws`; + +%% Whitespace is either spaces or tabs. +ws <- [ \t] `ws`; + +% Erlang code +%{ + +%% ------------------------------------------------------------------- +%% +%% conf_parse: for all your .conf parsing needs. +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +%% This module implements the parser for a sysctl-style +%% configuration format. Example: +%% +%% ``` +%% riak.local.node = riak@127.0.0.1 +%% riak.local.http = 127.0.0.1:8098 +%% riak.local.pb = 127.0.0.1:8087 +%% riak.local.storage.backend = bitcask''' +%% +%% This would parse into the following flat proplist: +%% +%% ``` +%% [{<<"riak.local.node">>,<<"riak@127.0.0.1">>}, +%% {<<"riak.local.http">>,<<"127.0.0.1:8098">>}, +%% {<<"riak.local.pb">>,<<"127.0.0.1:8087">>}, +%% {<<"riak.local.storage.backend">>,<<"bitcask">>}]''' +%% +%% Other modules in this application interpret and validate the +%% result of a successful parse. +%% @end +-define(line, true). +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc Only let through lines that are not comments or whitespace. +is_setting(ws) -> false; +is_setting(comment) -> false; +is_setting(_) -> true. + +%% @doc Removes escaped dots from keys +unescape_dots([$\\,$.|Rest]) -> + [$.|unescape_dots(Rest)]; +unescape_dots([]) -> []; +unescape_dots([C|Rest]) -> + [C|unescape_dots(Rest)]. + +-ifdef(TEST). +file_test() -> + Conf = conf_parse:file("test/riak.conf"), + ?assertEqual([ + {["ring_size"],"32"}, + {["anti_entropy"],"debug"}, + {["log","error","file"],"/var/log/error.log"}, + {["log","console","file"],"/var/log/console.log"}, + {["log","syslog"],"on"}, + {["listener","http","internal"],"127.0.0.1:8098"}, + {["listener","http","external"],"10.0.0.1:80"} + ], Conf), + ok. + +utf8_test() -> + Conf = conf_parse:parse("setting = thing" ++ [338] ++ "\n"), + ?assertEqual([{["setting"], + {error, {conf_to_latin1, 1}} + }], Conf), + ok. +-endif. +%} diff --git a/deps/cuttlefish/src/cuttlefish.app.src b/deps/cuttlefish/src/cuttlefish.app.src new file mode 100644 index 0000000..84b53e3 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish.app.src @@ -0,0 +1,9 @@ +{application,cuttlefish, + [{description,"cuttlefish configuration abstraction"}, + {vsn,"2.2.0"}, + {registered,[]}, + {applications,[kernel,stdlib]}, + {env,[]}, + {licenses,["Apache"]}, + {links,[{"GitHub","https://github.com/Kyorai/cuttlefish"}]}, + {modules,[]}]}. diff --git a/deps/cuttlefish/src/cuttlefish.erl b/deps/cuttlefish/src/cuttlefish.erl new file mode 100644 index 0000000..f7e78ca --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish.erl @@ -0,0 +1,148 @@ +%% ------------------------------------------------------------------- +%% +%% External functions for schema writers and cuttlefish invokers +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + conf_get/2, + conf_get/3, + unset/0, + invalid/1, + otp/2, + otp/3, + warn/1 +]). + +% @doc If DesiredMinimum =< the OTP you're running, then return +% IfGreaterOrEqual, otherwise IfLessThan. +-spec otp(string(), any(), any()) -> any(). +otp(DesiredMinimumOTPVersion, IfGreaterOrEqual, IfLessThan) -> + ActualOTPVersion = erlang:system_info(otp_release), + case otp(DesiredMinimumOTPVersion, ActualOTPVersion) of + true -> IfGreaterOrEqual; + _ -> IfLessThan + end. + +% @doc is ActualOTPVersion >= DesiredMinimumOTPVersion? +-spec otp(string(), string()) -> boolean(). +otp([], []) -> + %% They're the same length AND all previous chars were matches + true; +otp([$R|TMin], Ver) -> + otp(TMin, Ver); +otp(Min, [$R|TVer]) -> + otp(Min, TVer); +otp([H|TMin], [H|TVer]) -> + %% The head chars are equal, test the tails + otp(TMin, TVer); +otp([HMin|_], [HVer|_]) -> + %% The heads are different, check which is greater + HVer >= HMin; +otp([], _Ver) -> + %% The actual OTP release is a longer string, but + %% everything matched up until this point + %% e.g. R16B02, R16B02-basho4 + true; +otp(_Min, []) -> + %% Our Min is a longer string + %% e.g. R16B02-basho4, R16B02 + false. + +% @doc conf_get/2 is a convenience wrapper for proplists:get_value/2 +% for schema writers. Keys to a Conf proplist are variable()s which +% are a list of strings. This function will look for those, but if +% you pass it a string() instead, it will be nice and split that +% string on "." since that's how cuttlefish do. Also, it will +% throw(not_found) if the key is not found in the list which is +% different that proplists:get_value/2's default behavior of returning +% 'undefined'. This makes it easy for cuttlefish translations to abort +% and on error, and not assume a value. If that's what you want, +% please use conf_get/3. formerly cuttlefish_util:conf_get_value/2 +-spec conf_get( + string() | cuttlefish_variable:variable(), + cuttlefish_conf:conf()) -> any(). +conf_get([H|_T]=Variable, ConfigProplist) when is_list(H) -> + case proplists:is_defined(Variable, ConfigProplist) of + true -> + proplists:get_value(Variable, ConfigProplist); + false -> + throw({not_found, Variable}) + end; +conf_get(Variable, ConfigProplist) -> + conf_get( + cuttlefish_variable:tokenize(Variable), + ConfigProplist). + +% @doc conf_get/3 works just like proplists:get_value/3. It expects a +% variable() as the Key, but is nice enough to take a string() and +% split it on "." formerly cuttlefish_util:conf_get_value/3 +-spec conf_get( + string() | cuttlefish_variable:variable(), + cuttlefish_conf:conf(), any()) -> any(). +conf_get([H|_T]=Variable, ConfigProplist, Default) when is_list(H) -> + proplists:get_value(Variable, ConfigProplist, Default); +conf_get(Variable, ConfigProplist, Default) -> + conf_get(cuttlefish_variable:tokenize(Variable), ConfigProplist, Default). + +%% @doc When called inside a translation, tells cuttlefish to omit the +%% Erlang setting from the generated configuration. +-spec unset() -> no_return(). +unset() -> + throw(unset). + +%% @doc When called inside a translation, informs the user that input +%% configuration is invalid, using the supplied reason string. +-spec invalid(string()) -> no_return(). +invalid(Reason) -> + throw({invalid, Reason}). + +%% @doc When called inside a translation, results in a warning message +%% being logged. +-spec warn(iodata()) -> ok. +warn(Str) -> + lager:warning(Str, []). + +-ifdef(TEST). + +otp_test() -> + ?assert(otp("R15B02", "R15B02-basho3")), + ?assert(not(otp("R15B02-basho3", "R15B02"))), + ?assert(otp("R16B02-basho3", "R16B03")), + ?assert(otp("R15B01", "R15B02")), + ?assert(otp("R15B01", "R15B02-basho3")), + ?assert(not(otp("R16B01", "R15B02"))), + ?assert(otp("R16", "R16B03")), + ?assert(otp("R16", "R16A")), + ?assert(not(otp("R16B01", "R16A"))), + ?assert(otp("R16A", "R16A")), + ?assert(otp("R16", "17")), + ?assert(otp("R16B03-1", "17")), + ?assert(not(otp("17", "R16"))), + ?assert(otp("R16A", "17")), + ?assert(not(otp("18", "17"))), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_advanced.erl b/deps/cuttlefish/src/cuttlefish_advanced.erl new file mode 100644 index 0000000..05044d6 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_advanced.erl @@ -0,0 +1,75 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_advanced: handles merging of advanced configs +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_advanced). + +-export([overlay/2]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc this function overlays the values in proplist 'AdvancedConfig' +%% on top of 'GeneratedConfig' +overlay(GeneratedConfig, AdvancedConfig) -> + lists:foldl( + fun({ApplicationName, ApplicationConfig}, OuterAcc) -> + GeneratedApplicationConfig = proplists:get_value(ApplicationName, GeneratedConfig, []), + Updated = lists:foldl( + fun({ConfigElementName, ConfigElement}, Acc) -> + cuttlefish_util:replace_proplist_value(ConfigElementName, ConfigElement, Acc) + end, + GeneratedApplicationConfig, + ApplicationConfig), + cuttlefish_util:replace_proplist_value(ApplicationName, Updated, OuterAcc) + end, + GeneratedConfig, + AdvancedConfig). + + +-ifdef(TEST). + +overlay_test() -> + GeneratedConfig = [ + {app1, [{'setting1.1', "value1.1"}]}, + {app2, [{'setting2.1', "value2.1"}]}, + {app3, [{'setting3.1', [{"blah", "blah"}, {"blarg", "blarg"}]}]} + ], + + AdvancedConfig = [ + {app3, [{'setting3.1', i_dont_care}]}, + {app4, [{'some_unschemad_thing', 'like_a_penguin'}]} + ], + + Expected = [ + {app1, [{'setting1.1', "value1.1"}]}, + {app2, [{'setting2.1', "value2.1"}]}, + {app3, [{'setting3.1', i_dont_care}]}, + {app4, [{'some_unschemad_thing', 'like_a_penguin'}]} + ], + NewConfig = overlay(GeneratedConfig, AdvancedConfig), + + ?assertEqual(Expected, NewConfig), + + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_bytesize.erl b/deps/cuttlefish/src/cuttlefish_bytesize.erl new file mode 100644 index 0000000..254a75f --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_bytesize.erl @@ -0,0 +1,97 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_bytesize: complexity for parsing bytesizes +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_bytesize). + +-define(KILOBYTE, 1024). +-define(MEGABYTE, 1048576). +-define(GIGABYTE, 1073741824). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([parse/1, to_string/1]). + +%% @doc turns an integer of bytes into a string. +%% Will use the smallest unit to not lose precision. +%% e.g. 1024 -> 1kb, but 1025 = 1025. +-spec to_string(integer()) -> string(). +to_string(Bytez) -> + case { Bytez rem ?GIGABYTE, Bytez rem ?MEGABYTE, Bytez rem ?KILOBYTE} of + {0, _, _} -> + integer_to_list(Bytez div ?GIGABYTE) ++ "GB"; + {_, 0, _} -> + integer_to_list(Bytez div ?MEGABYTE) ++ "MB"; + {_, _, 0} -> + integer_to_list(Bytez div ?KILOBYTE) ++ "KB"; + _ -> + integer_to_list(Bytez) + end. + +%% @doc the reverse of to_string/1. turns "1kb" or "1KB" into 1024. +-spec parse(string()) -> integer()|cuttlefish_error:error(). +parse(String) -> + case lists:reverse(String) of + [$B,$K|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?KILOBYTE); + [$b,$k|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?KILOBYTE); + [$B,$M|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?MEGABYTE); + [$b,$m|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?MEGABYTE); + [$B,$G|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)), ?GIGABYTE); + [$b,$g|BSize] -> bmult(cuttlefish_util:numerify(lists:reverse(BSize)),?GIGABYTE); + BSize -> cuttlefish_util:numerify(lists:reverse(BSize)) + end. + +-spec bmult(number()|cuttlefish_error:error(), integer()) -> + number()|cuttlefish_error:error(). +bmult({error, _ErrorTerm}=Error, _Mult) -> + Error; +bmult(Quantity, Multiplier) -> + Quantity * Multiplier. + +-ifdef(TEST). +to_string_test() -> + ?assertEqual("1KB", to_string(1024)), + ?assertEqual("2KB", to_string(2048)), + + ?assertEqual("10MB", to_string(10485760)), + + ?assertEqual("1GB", to_string(1073741824)), + + ?assertEqual("20", to_string(20)), + ok. + +parse_test() -> + ?assertEqual(1024, parse("1kb")), + ?assertEqual(2048, parse("2KB")), + + ?assertEqual(10485760, parse("10mb")), + ?assertEqual(10485760, parse("10MB")), + + ?assertEqual(1073741824, parse("1GB")), + ?assertEqual(1073741824, parse("1gb")), + + ?assertEqual(20, parse("20")), + ?assertEqual({error, {number_parse, "10MB10"}}, parse("10MB10kb")), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_conf.erl b/deps/cuttlefish/src/cuttlefish_conf.erl new file mode 100644 index 0000000..52f1191 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_conf.erl @@ -0,0 +1,354 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_conf: handles the reading and generation of .conf files +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_conf). + +-export([ + generate/1, + generate_file/2, + file/1, + files/1, + is_variable_defined/2, + pretty_datatype/1]). + +-type conf_pair() :: {cuttlefish_variable:variable(), any()}. +-type conf() :: [conf_pair()]. +-export_type([conf_pair/0, conf/0]). + +-define(FMT(F, Args), lists:flatten(io_lib:format(F, Args))). + +is_variable_defined(VariableDef, Conf) -> + lists:any(fun({X, _}) -> cuttlefish_variable:is_fuzzy_match(X, VariableDef) end, Conf). + +-spec files([file:name()]) -> conf() | cuttlefish_error:errorlist(). +files(ListOfConfFiles) -> + {ValidConf, Errors} = lists:foldl( + fun(ConfFile, {ConfAcc, ErrorAcc}) -> + case cuttlefish_conf:file(ConfFile) of + {errorlist, ErrorList} -> + {ConfAcc, ErrorList ++ ErrorAcc}; + Conf -> + {lists:foldl( + fun({K,V}, MiniAcc) -> + cuttlefish_util:replace_proplist_value(K, V, MiniAcc) + end, + ConfAcc, + Conf), ErrorAcc} + end + end, + {[], []}, + ListOfConfFiles), + case {ValidConf, Errors} of + {_, []} -> ValidConf; + _ -> {errorlist, Errors} + end. + +-spec file(file:name()) -> conf() | cuttlefish_error:errorlist(). +file(Filename) -> + case conf_parse:file(Filename) of + {error, Reason} -> + %% Reason is an atom via file:open + {errorlist, [{error, {file_open, {Filename, Reason}}}]}; + {_Conf, Remainder, {{line, L}, {column, C}}} when is_binary(Remainder) -> + {errorlist, [{error, {conf_syntax, {Filename, {L, C}}}}]}; + Conf -> + %% Conf is a proplist, check if any of the values are cuttlefish_errors + {_, Values} = lists:unzip(Conf), + case cuttlefish_error:filter(Values) of + {errorlist, []} -> + remove_duplicates(Conf); + {errorlist, ErrorList} -> + NewErrorList = [ {error, {in_file, {Filename, E}}} || {error, E} <- ErrorList ], + {errorlist, NewErrorList} + end + end. + +-spec generate([cuttlefish_mapping:mapping()]) -> [string()]. +generate(Mappings) -> + lists:foldl( + fun(Mapping, ConfFile) -> + ConfFile ++ generate_element(Mapping) + end, [], Mappings). + +-spec generate_file([cuttlefish_mapping:mapping()], string()) -> ok. +generate_file(Mappings, Filename) -> + ConfFileLines = generate(Mappings), + + {ok, S} = file:open(Filename, [write]), + _ = [ begin + io:format(S, "~s~n", [lists:flatten(Line)]) + end || Line <- ConfFileLines], + _ = file:close(S), + ok. + +-spec generate_element(cuttlefish_mapping:mapping()) -> [string()]. +generate_element(MappingRecord) -> + Default = get_default(MappingRecord), + Key = cuttlefish_mapping:variable(MappingRecord), + Commented = cuttlefish_mapping:commented(MappingRecord), + Level = cuttlefish_mapping:level(MappingRecord), + Hidden = cuttlefish_mapping:hidden(MappingRecord), + IncDef = cuttlefish_mapping:include_default(MappingRecord), + [Datatype|_] = cuttlefish_mapping:datatype(MappingRecord), + %% level != basic OR hidden == true: leave out of generated .conf file + %% commeneted $val: insert into .conf file, but commented out with $val + %% include_default $val: substitute '$name' or whatever in the key for $val + %% e.g. {include_default, "internal"} + %% listener.http.$name -> listener.http.internal + + Field = cuttlefish_variable:format(cuttlefish_variable:replace_match(Key, IncDef)), + + case Level of + basic -> ok; + Level -> + lager:warning("{level, ~p} has been deprecated. Use 'hidden' or '{hidden, true}'", [Level]) + end, + + case generate_element(Hidden, Level, Default, Commented) of + no -> + []; + commented -> + Comments = generate_comments(MappingRecord), + Comments ++ [lists:flatten([ "## ", Field, " = ", cuttlefish_datatypes:to_string(Commented, Datatype) ]), ""]; + default -> + Comments = generate_comments(MappingRecord), + Comments ++ [lists:flatten([ Field, " = ", cuttlefish_datatypes:to_string(Default, Datatype) ]), ""] + end. + +get_default(MappingRecord) -> + %% Normally we use `default` to determine what value to use when generating + %% a config file, but `new_conf_value` can override that. The reason we need + %% a separate attribute to override `default` (instead of just changing the + %% default directly) is that `default` also affects default values used for + %% config keys that haven't been set to any particular value in the .conf file. + %% (See `cuttlefish_generator:add_defaults` for the relevant bits of code.) + case cuttlefish_mapping:new_conf_value(MappingRecord) of + undefined -> + cuttlefish_mapping:default(MappingRecord); + Value -> + Value + end. + +generate_element(true, _, _, _) -> no; +generate_element(false, _, undefined, undefined) -> no; +generate_element(false, basic, _Default, undefined) -> default; +generate_element(false, basic, _, _Comment) -> commented; +generate_element(false, _Level, _Default, _Commented) -> no. + +-spec generate_comments(cuttlefish_mapping:mapping()) -> [string()]. +generate_comments(M) -> + DocString = cuttlefish_mapping:doc(M), + + [DefaultDT|_] = cuttlefish_mapping:datatype(M), + Default = case cuttlefish_mapping:default(M) of + undefined -> []; + Other -> + [ "", ?FMT("Default: ~s", [cuttlefish_datatypes:to_string(Other, DefaultDT)]) ] + end, + + Datatypes = ["", "Acceptable values:" | + [ ?FMT(" - ~s", [pretty_datatype(DT)]) + || DT <- cuttlefish_mapping:datatype(M)]], + + Doc = DocString ++ Default ++ Datatypes, + [ "## " ++ D || D <- Doc]. + +-spec pretty_datatype(cuttlefish_datatypes:datatype() | + cuttlefish_datatypes:extended()) -> string(). +pretty_datatype(integer) -> "an integer"; +pretty_datatype({enum, L}) -> + "one of: " ++ string:join([ atom_to_list(A) || A <- L], ", "); +pretty_datatype(ip) -> "an IP/port pair, e.g. 127.0.0.1:10011"; +pretty_datatype({duration, _}) -> "a time duration with units, e.g. '10s' for 10 seconds"; +pretty_datatype(bytesize) -> "a byte size with units, e.g. 10GB"; +pretty_datatype({integer, I}) -> "the integer " ++ integer_to_list(I); +pretty_datatype({string, S}) -> "the text \"" ++ S ++ "\""; +pretty_datatype({atom, A}) -> "the text \"" ++ atom_to_list(A) ++ "\""; +pretty_datatype({ip, {IP, Port}}) -> ?FMT("the address ~s:~p", [IP, Port]); +pretty_datatype({{duration,_}, D}) -> "the time duration " ++ D; +pretty_datatype({bytesize, B}) -> "the bytesize " ++ B; +pretty_datatype(file) -> "the path to a file"; +pretty_datatype(directory) -> "the path to a directory"; +pretty_datatype({file, F}) -> "the file " ++ F; +pretty_datatype({directory, D}) -> "the directory " ++ D; +pretty_datatype(flag) -> "on or off"; +pretty_datatype({flag, On, Off}) when is_atom(On), is_atom(Off) -> + ?FMT("~p or ~p", [On, Off]); +pretty_datatype({flag, {On,_}, {Off,_}}) -> + ?FMT("~p or ~p", [On, Off]); +pretty_datatype(_) -> "text". %% string and atom + +remove_duplicates(Conf) -> + lists:foldl( + fun({K,V}, MiniAcc) -> + cuttlefish_util:replace_proplist_value(K, V, MiniAcc) + end, + [], + Conf). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-ifdef(TEST). + +generate_element_test() -> + + TestSchemaElement = + cuttlefish_mapping:parse({mapping, "ring_size", "riak_core.ring_creation_size", + [ + {datatype, integer}, + {commented, 64}, + {doc, ["Default ring creation size. Make sure it is a power of 2,", + "e.g. 16, 32, 64, 128, 256, 512 etc"]} + ] + }), + + + GeneratedConf = generate_element(TestSchemaElement), + + ?assertEqual(7, length(GeneratedConf)), + ?assertEqual( + "## Default ring creation size. Make sure it is a power of 2,", + lists:nth(1, GeneratedConf) + ), + ?assertEqual( + "## e.g. 16, 32, 64, 128, 256, 512 etc", + lists:nth(2, GeneratedConf) + ), + ?assertEqual( + "## ", + lists:nth(3, GeneratedConf) + ), + ?assertEqual( + "## Acceptable values:", + lists:nth(4, GeneratedConf) + ), + ?assertEqual( + "## - an integer", + lists:nth(5, GeneratedConf) + ), + ?assertEqual( + "## ring_size = 64", + lists:nth(6, GeneratedConf) + ), + ok. + +generate_conf_default_test() -> + TestMappings = [{mapping, "default.absent", "undefined", + [{datatype, integer}, + {new_conf_value, 42}]}, + {mapping, "default.present", "undefined", + [{datatype, integer}, + {default, -1}, + {new_conf_value, 9001}]}], + + TestSchema = lists:map(fun cuttlefish_mapping:parse/1, TestMappings), + GeneratedConf = generate(TestSchema), + + %% TODO Feels pretty fragile to rely on the number of comment lines not changing... + %% Would be nice if we had a good way to pinpoint the line we want to check without + %% having to hardcode the line numbers into the lists:nth calls. + ?assertEqual( + "default.absent = 42", + lists:nth(4, GeneratedConf) + ), + ?assertEqual( + "default.present = 9001", + lists:nth(11, GeneratedConf) + ), + ok. + +generate_dollar_test() -> + TestSchemaElement = + cuttlefish_mapping:parse({ mapping, "listener.http.$name", "riak_core.http", [ + {datatype, ip}, + {default, "127.0.0.1:8098"}, + {mapping, "riak_core.http"}, + {include_default,"internal"} + ]}), + _GeneratedConf = generate_element(TestSchemaElement), + + ok. + +generate_comments_test() -> + SchemaElement = cuttlefish_mapping:parse({ mapping, "dont.care", "undefined", [ + {doc, ["Hi!", "Bye!"]} + ]}), + Comments = generate_comments(SchemaElement), + ?assertEqual(["## Hi!", "## Bye!", "## ", "## Acceptable values:", "## - text"], Comments). + +duplicates_test() -> + Conf = file("test/multi1.conf"), + ?assertEqual(2, length(Conf)), + ?assertEqual("3", proplists:get_value(["a","b","c"], Conf)), + ?assertEqual("1", proplists:get_value(["a","b","d"], Conf)), + ok. + +duplicates_multi_test() -> + Conf = files(["test/multi1.conf", "test/multi2.conf"]), + ?assertEqual(2, length(Conf)), + ?assertEqual("4", proplists:get_value(["a","b","c"], Conf)), + ?assertEqual("1", proplists:get_value(["a","b","d"], Conf)), + ok. + +files_one_nonent_test() -> + Conf = files(["test/multi1.conf", "test/nonent.conf"]), + ?assertEqual({errorlist,[{error, {file_open, {"test/nonent.conf", undefined}}}]}, Conf), + ok. + +files_incomplete_parse_test() -> + Conf = file("test/incomplete.conf"), + ?assertEqual({errorlist, [{error, {conf_syntax, {"test/incomplete.conf", {3, 1}}}}]}, Conf), + ok. + +generate_element_level_advanced_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output({level, advanced}), + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "{level, advanced} has been deprecated. Use 'hidden' or '{hidden, true}'")), + ok. + +generate_element_level_intermediate_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output({level, intermediate}), + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "{level, intermediate} has been deprecated. Use 'hidden' or '{hidden, true}'")), + ok. + +generate_element_hidden_test() -> + cuttlefish_lager_test_backend:bounce(warning), + assert_no_output(hidden), + assert_no_output({hidden, true}), + ?assertEqual([], cuttlefish_lager_test_backend:get_logs()), + ok. + +assert_no_output(Setting) -> + Mapping = cuttlefish_mapping:parse( + {mapping, + "a", "b", [ + {doc, ["blah"]}, + Setting + ]}), + + ?assertEqual([], generate_element(Mapping)). + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_datatypes.erl b/deps/cuttlefish/src/cuttlefish_datatypes.erl new file mode 100644 index 0000000..71a9905 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_datatypes.erl @@ -0,0 +1,518 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_datatypes: handles datatypes in cuttlefish schemas +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_datatypes). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-type datatype() :: integer | + string | + atom | + file | + directory | + flag | + {flag, atom(), atom()} | + {flag, {atom(), term()}, {atom(), term()}} | + {enum, [atom()]} | + ip | + {duration, cuttlefish_duration:time_unit() } | + bytesize | + {percent, integer} | + {percent, float} | + float. +-type extended() :: { integer, integer() } | + { string, string() } | + { file, file:filename() } | + { directory, file:filename() } | + { atom, atom() } | + { ip, { string(), integer() } } | + { {duration, cuttlefish_duration:time_unit() }, string() } | + { bytesize, string() } | + { {percent, integer}, integer() } | + { {percent, float}, float() } | + { float, float() }. +-type datatype_list() :: [ datatype() | extended() ]. + +-export_type([datatype/0, extended/0, datatype_list/0]). + +-export([ + is_supported/1, + is_extended/1, + is_valid_list/1, + from_string/2, + to_string/2, + extended_from/1 +]). + +-spec is_supported(any()) -> boolean(). +is_supported(integer) -> true; +is_supported(string) -> true; +is_supported(file) -> true; +is_supported(directory) -> true; +is_supported(flag) -> true; +is_supported({flag, On, Off}) when is_atom(On), is_atom(Off) -> true; +is_supported({flag, {On, _}, {Off, _}}) when is_atom(On), is_atom(Off) -> true; +is_supported(atom) -> true; +is_supported({enum, E}) when is_list(E) -> true; +is_supported(ip) -> true; +is_supported({duration, f}) -> true; +is_supported({duration, w}) -> true; +is_supported({duration, d}) -> true; +is_supported({duration, h}) -> true; +is_supported({duration, m}) -> true; +is_supported({duration, s}) -> true; +is_supported({duration, ms}) -> true; +is_supported(bytesize) -> true; +is_supported({percent, integer}) -> true; +is_supported({percent, float}) -> true; +is_supported(float) -> true; +is_supported(_) -> false. + +-spec is_extended(any()) -> boolean(). +is_extended({integer, I}) when is_integer(I) -> true; +is_extended({string, S}) when is_list(S) -> true; +is_extended({atom, A}) when is_atom(A) -> true; +is_extended({file, F}) when is_list(F) -> true; +is_extended({directory, D}) when is_list(D) -> true; +is_extended({ip, {IP, Port}}) when is_list(IP) andalso is_integer(Port) -> true; +is_extended({ip, StringIP}) when is_list(StringIP) -> true; +is_extended({{duration, f}, D}) when is_list(D) -> true; +is_extended({{duration, w}, D}) when is_list(D) -> true; +is_extended({{duration, d}, D}) when is_list(D) -> true; +is_extended({{duration, g}, D}) when is_list(D) -> true; +is_extended({{duration, m}, D}) when is_list(D) -> true; +is_extended({{duration, s}, D}) when is_list(D) -> true; +is_extended({{duration, ms}, D}) when is_list(D) -> true; +is_extended({bytesize, B}) when is_list(B) -> true; +is_extended({{percent, integer}, _Int}) -> true; +is_extended({{percent, float}, _Float}) -> true; +is_extended({float, F}) when is_float(F) -> true; +is_extended(_) -> false. + +-spec extended_from(extended()) -> datatype(). +extended_from({integer, _}) -> integer; +extended_from({string, _}) -> string; +extended_from({atom, _}) -> atom; +extended_from({file, _}) -> file; +extended_from({directory, _}) -> directory; +extended_from({ip, _}) -> ip; +extended_from({{duration, Unit}, _}) -> {duration, Unit}; +extended_from({bytesize, _}) -> bytesize; +extended_from({{percent, integer}, _}) -> {percent, integer}; +extended_from({{percent, float}, _}) -> {percent, float}; +extended_from({float, _}) -> float; +extended_from(Other) -> + case is_supported(Other) of + true -> + Other; + _ -> error + end. + +-spec is_valid_list(any()) -> boolean(). +is_valid_list(NotList) when not is_list(NotList) -> + false; +is_valid_list([]) -> false; +is_valid_list(List) -> + lists:all(fun(X) -> + is_supported(X) + orelse + is_extended(X) + end, List). + +-spec to_string(term(), datatype()) -> string() | cuttlefish_error:error(). +to_string(Atom, atom) when is_list(Atom) -> Atom; +to_string(Atom, atom) when is_atom(Atom) -> atom_to_list(Atom); + +to_string(Integer, integer) when is_integer(Integer) -> integer_to_list(Integer); +to_string(Integer, integer) when is_list(Integer) -> Integer; + +to_string({IP, Port}, ip) when is_list(IP), is_integer(Port) -> IP ++ ":" ++ integer_to_list(Port); +to_string(IPString, ip) when is_list(IPString) -> IPString; + +to_string(Enum, {enum, _}) when is_list(Enum) -> Enum; +to_string(Enum, {enum, _}) when is_atom(Enum) -> atom_to_list(Enum); + +to_string(Duration, {duration, _}) when is_list(Duration) -> Duration; +to_string(Duration, {duration, Unit}) when is_integer(Duration) -> cuttlefish_duration:to_string(Duration, Unit); + +to_string(Bytesize, bytesize) when is_list(Bytesize) -> Bytesize; +to_string(Bytesize, bytesize) when is_integer(Bytesize) -> cuttlefish_bytesize:to_string(Bytesize); + +to_string(String, string) when is_list(String) -> String; + +to_string(File, file) when is_list(File) -> File; + +to_string(Directory, directory) when is_list(Directory) -> Directory; + +to_string(Flag, flag) when is_atom(Flag) -> cuttlefish_flag:to_string(Flag, flag); +to_string(Flag, flag) when is_list(Flag) -> cuttlefish_flag:to_string(Flag, flag); +to_string(Flag, {flag, _, _}=Type) when is_atom(Flag) -> cuttlefish_flag:to_string(Flag, Type); +to_string(Flag, {flag, _, _}=Type) when is_list(Flag) -> cuttlefish_flag:to_string(Flag, Type); + +to_string(Percent, {percent, integer}) when is_integer(Percent) -> + integer_to_list(Percent) ++ "%"; +to_string(Percent, {percent, integer}) when is_list(Percent) -> + Percent; +to_string(Percent, {percent, float}) when is_float(Percent) -> + P = list_to_float(float_to_list(Percent * 100, [{decimals, 6}, compact])), + integer_to_list(cuttlefish_util:ceiling(P)) ++ "%"; +to_string(Percent, {percent, float}) when is_list(Percent) -> + Percent; + +to_string(Float, float) when is_float(Float) -> + float_to_list(Float, [{decimals, 6}, compact]); +to_string(Float, float) when is_list(Float) -> Float; + +%% The Pokemon Clause: Gotta Catch 'em all! +to_string(Value, MaybeExtendedDatatype) -> + case is_extended(MaybeExtendedDatatype) of + true -> + to_string(Value, extended_from(MaybeExtendedDatatype)); + _ -> + {error, {type, {Value, MaybeExtendedDatatype}}} + end. + +-spec from_string(term(), datatype()) -> term() | cuttlefish_error:error(). +from_string(Atom, atom) when is_atom(Atom) -> Atom; +from_string(String, atom) when is_list(String) -> list_to_atom(String); + +from_string(Value, {enum, Enum}) -> + cuttlefish_enum:parse(Value, {enum, Enum}); + +from_string(Integer, integer) when is_integer(Integer) -> Integer; +from_string(String, integer) when is_list(String) -> + try list_to_integer(String) of + X -> X + catch + _:_ -> {error, {conversion, {String, integer}}} + end; + +from_string({IP, Port}, ip) when is_list(IP), is_integer(Port) -> {IP, Port}; +from_string(String, ip) when is_list(String) -> + from_string_to_ip(String, lists:split(string:rchr(String, $:), String)); + +from_string(Duration, {duration, _}) when is_integer(Duration) -> Duration; +from_string(Duration, {duration, Unit}) when is_list(Duration) -> cuttlefish_duration:parse(Duration, Unit); + +from_string(Bytesize, bytesize) when is_integer(Bytesize) -> Bytesize; +from_string(Bytesize, bytesize) when is_list(Bytesize) -> cuttlefish_bytesize:parse(Bytesize); + +from_string(String, string) when is_list(String) -> String; + +from_string(File, file) when is_list(File) -> File; + +from_string(Directory, directory) when is_list(Directory) -> Directory; + +from_string(Flag, flag) when is_list(Flag) -> cuttlefish_flag:parse(Flag); +from_string(Flag, flag) when is_atom(Flag) -> cuttlefish_flag:parse(Flag); + +from_string(Flag, {flag, _, _}=Type) when is_list(Flag) -> cuttlefish_flag:parse(Flag, Type); +from_string(Flag, {flag, _, _}=Type) when is_atom(Flag) -> cuttlefish_flag:parse(Flag, Type); + +from_string(Percent, {percent, integer}) when is_integer(Percent), Percent >= 0, Percent =< 100 -> Percent; +from_string(Percent, {percent, integer}) when is_integer(Percent) -> + {error, {range, {{Percent, {percent, integer}}, "0 - 100%"}}}; +%% This clause ends with a percent sign! +from_string(Percent, {percent, integer}) when is_list(Percent) -> + from_string( + list_to_integer(string:sub_string(Percent, 1, length(Percent) - 1)), + {percent, integer}); + +from_string(Percent, {percent, float}) when is_float(Percent), Percent >= 0, Percent =< 1 -> Percent; +from_string(Percent, {percent, float}) when is_float(Percent) -> + {error, {range, {{Percent, {percent, float}}, "0 - 100%"}}}; +%% This clause ends with a percent sign! +from_string(Percent, {percent, float}) when is_list(Percent) -> + from_string( + list_to_integer(string:sub_string(Percent, 1, length(Percent) - 1)) / 100.0, + {percent, float}); + +from_string(Float, float) when is_float(Float) -> Float; +from_string(String, float) when is_list(String) -> + try list_to_float(String) of + X -> X + catch + _:_ -> {error, {conversion, {String, float}}} + end; + +from_string(Thing, InvalidDatatype) -> + {error, {type, {Thing, InvalidDatatype}}}. + + +%%% Utility functions for IP conversion + +port_to_integer(Str) -> + try + list_to_integer(Str) + of + X when X >= 0 -> + X; + %% Negative ports are nonsensical + _X -> + undefined + catch + _:_ -> + undefined + end. + +ip_conversions(String, _IPStr, {error, einval}, _Port) -> + {error, {conversion, {String, 'IP'}}}; +ip_conversions(String, _IPStr, _IP, undefined) -> + {error, {conversion, {String, 'IP'}}}; +ip_conversions(_String, IPStr, {ok, _}, Port) -> + {IPStr, Port}. + +droplast(List) -> + lists:sublist(List, length(List)-1). + +from_string_to_ip(String, {[], String}) -> + {error, {conversion, {String, 'IP'}}}; %% No port +from_string_to_ip(String, {IpPlusColon, PortString}) -> + %% Still need to drop last character from IP, the trailing + %% colon. Perfect use case for lists:droplast/1 but it's a recent + %% addition + IP = droplast(IpPlusColon), + ip_conversions(String, IP, inet:parse_address(IP), port_to_integer(PortString)). + + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +to_string_atom_test() -> + ?assertEqual("split_the", to_string(split_the, atom)), + ?assertEqual("split_the", to_string("split_the", atom)). + +to_string_integer_test() -> + ?assertEqual("32", to_string(32, integer)), + ?assertEqual("32", to_string("32", integer)). + +to_string_ip_test() -> + ?assertEqual("127.0.0.1:8098", to_string("127.0.0.1:8098", ip)), + ?assertEqual("127.0.0.1:8098", to_string({"127.0.0.1", 8098}, ip)). + +to_string_enum_test() -> + ?assertEqual("true", to_string("true", {enum, [true, false]})), + ?assertEqual("true", to_string(true, {enum, [true, false]})). + +to_string_string_test() -> + ?assertEqual("string", to_string("string", string)). + +to_string_duration_test() -> + ?assertEqual("1w", to_string("1w", {duration, s})), + ?assertEqual("1w", to_string(604800000, {duration, ms})). + +to_string_bytesize_test() -> + ?assertEqual("1GB", to_string(1073741824, bytesize)), + ?assertEqual("1GB", to_string("1GB", bytesize)). + +to_string_percent_integer_test() -> + ?assertEqual("10%", to_string(10, {percent, integer})), + ?assertEqual("10%", to_string("10%", {percent, integer})), + ok. + +to_string_percent_float_test() -> + ?assertEqual("10%", to_string(0.1, {percent, float})), + ?assertEqual("10%", to_string("10%", {percent, float})), + ok. + +to_string_float_test() -> + ?assertEqual("0.1", to_string(0.1, float)), + ?assertEqual("0.1", to_string("0.1", float)), + ok. + +to_string_extended_type_test() -> + ?assertEqual("split_the", to_string(split_the, {atom, split_the})), + ?assertEqual("split_the", to_string("split_the", {atom, split_the})), + ?assertEqual("32", to_string(32, {integer, 32})), + ?assertEqual("32", to_string("32", {integer, 32})), + ?assertEqual("127.0.0.1:8098", to_string("127.0.0.1:8098", {ip, "127.0.0.1:8098"})), + ?assertEqual("127.0.0.1:8098", to_string({"127.0.0.1", 8098}, {ip, {"127.0.0.1", 8098}})), + ?assertEqual("string", to_string("string", {string, "string"})), + ?assertEqual("1w", to_string("1w", {{duration, s}, "1w"})), + ?assertEqual("1w", to_string(604800000, {{duration, ms}, "1w"})), + ?assertEqual("1GB", to_string(1073741824, {bytesize, "1GB"})), + ?assertEqual("1GB", to_string("1GB", {bytesize, "1GB"})), + ?assertEqual("10%", to_string(10, {{percent, integer}, "10%"})), + ?assertEqual("10%", to_string("10%", {{percent, integer}, "10%"})), + ?assertEqual("10%", to_string(0.1, {{percent, float}, "10%"})), + ?assertEqual("10%", to_string("10%", {{percent, float}, "10%"})), + ?assertEqual("0.1", to_string(0.1, {float, 0.1})), + ?assertEqual("0.1", to_string("0.1", {float, 0.1})), + ok. + +to_string_unsupported_datatype_test() -> + ?assertEqual("Tried to convert \"Something\" but invalid datatype: unsupported_datatype", ?XLATE(to_string("Something", unsupported_datatype))). + +from_string_atom_test() -> + ?assertEqual(split_the, from_string(split_the, atom)), + ?assertEqual(split_the, from_string("split_the", atom)). + +from_string_integer_test() -> + ?assertEqual(32, from_string(32, integer)), + ?assertEqual(32, from_string("32", integer)), + ?assertEqual("\"thirty_two\" cannot be converted to a(n) integer", ?XLATE(from_string("thirty_two", integer))), + ok. + +from_string_ip_test() -> + ?assertEqual({"127.0.0.1", 8098}, from_string("127.0.0.1:8098", ip)), + ?assertEqual( + {"2001:0db8:85a3:0042:1000:8a2e:0370:7334", 8098}, + from_string("2001:0db8:85a3:0042:1000:8a2e:0370:7334:8098", ip)), + ?assertEqual( + {"2001:0db8:85a3::0370:7334", 8098}, + from_string("2001:0db8:85a3::0370:7334:8098", ip)), + ?assertEqual( + {"::1", 1}, + from_string("::1:1", ip)), + + BadIPs = [ + "This is not an IP:80", + "2001:0db8:85a3:0042:1000:8a2e:0370:80", + "127.0.0.1.1:80", + "127.256.0.1:80", + "127.0.0.1", %% No port + "127.0.0.1:-5", + "0:127.0.0.1:80", + "127.0.0.1:80l", + ":1:1" + ], + + lists:foreach(fun(Bad) -> + ?assertEqual({error, {conversion, {Bad, 'IP'}}}, + from_string(Bad, ip)) + end, + BadIPs), + ok. + +from_string_enum_test() -> + ?assertEqual("\"a\" is not a valid enum value, acceptable values are: b, c", ?XLATE(from_string(a, {enum, [b, c]}))), + ?assertEqual(true, from_string("true", {enum, [true, false]})), + ?assertEqual(true, from_string(true, {enum, [true, false]})). + +from_string_duration_test() -> + %% more examples in the the cuttlefish_duration tests + ?assertEqual(1100, from_string("1s100ms", {duration, ms})), + ?assertEqual(1100, from_string(1100, {duration, ms})), + ok. + +from_string_duration_secs_test() -> + %% more examples in the the cuttlefish_duration tests + %% also rounds up for smaller units + ?assertEqual(2, from_string("1s100ms", {duration, s})), + ?assertEqual(2, from_string(2, {duration, s})), + ok. + +from_string_percent_integer_test() -> + ?assertEqual(10, from_string("10%", {percent, integer})), + ?assertEqual(10, from_string(10, {percent, integer})), + %% Range! + ?assertEqual(0, from_string("0%", {percent, integer})), + ?assertEqual(100, from_string("100%", {percent, integer})), + ?assertEqual("110% can't be outside the range 0 - 100%", ?XLATE(from_string("110%", {percent, integer}))), + ?assertEqual("-1% can't be outside the range 0 - 100%", ?XLATE(from_string("-1%", {percent, integer}))), + ok. + +from_string_percent_float_test() -> + ?assertEqual(0.10, from_string("10%", {percent, float})), + ?assertEqual(0.10, from_string(0.1, {percent, float})), + %% Range! + ?assertEqual(0.0, from_string("0%", {percent, float})), + ?assertEqual(1.0, from_string("100%", {percent, float})), + ?assertEqual("110% can't be outside the range 0 - 100%", ?XLATE(from_string("110%", {percent, float}))), + ?assertEqual("-1% can't be outside the range 0 - 100%", ?XLATE(from_string("-1%", {percent, float}))), + ok. + +from_string_float_test() -> + ?assertEqual(0.1, from_string("0.100", float)), + ?assertEqual(0.1, from_string(0.1, float)), + ok. + +from_string_string_test() -> + ?assertEqual("string", from_string("string", string)). + +from_string_unsupported_datatype_test() -> + ?assertEqual("Tried to convert \"string\" but invalid datatype: unsupported_datatype", ?XLATE(from_string("string", unsupported_datatype))). + +is_supported_test() -> + ?assert(is_supported(integer)), + ?assert(is_supported(string)), + ?assert(is_supported(atom)), + ?assert(is_supported(file)), + ?assert(is_supported(directory)), + ?assert(is_supported({enum, [one, two, three]})), + ?assert(not(is_supported({enum, not_a_list}))), + ?assert(is_supported(ip)), + ?assert(is_supported({duration, f})), + ?assert(is_supported({duration, w})), + ?assert(is_supported({duration, d})), + ?assert(is_supported({duration, h})), + ?assert(is_supported({duration, m})), + ?assert(is_supported({duration, s})), + ?assert(is_supported({duration, ms})), + ?assert(is_supported(bytesize)), + ?assert(not(is_supported(some_unsupported_type))), + ok. + +is_extended_test() -> + ?assertEqual(true, is_extended({integer, 10})), + ?assertEqual(true, is_extended({integer, -10})), + ?assertEqual(false, is_extended({integer, "ten"})), + + ?assertEqual(true, is_extended({string, "string"})), + ?assertEqual(false, is_extended({string, string})), + ?assertEqual(false, is_extended({string, 10})), + + ?assertEqual(true, is_extended({atom, atom})), + ?assertEqual(false, is_extended({atom, "atom"})), + ?assertEqual(false, is_extended({atom, 10})), + + ?assertEqual(true, is_extended({file, "/tmp/foo.txt"})), + ?assertEqual(true, is_extended({file, ""})), + ?assertEqual(false, is_extended({file, this})), + + ?assertEqual(true, is_extended({directory, "/tmp/foo.txt"})), + ?assertEqual(true, is_extended({directory, ""})), + ?assertEqual(false, is_extended({directory, this})), + + ?assertEqual(true, is_extended({ip, {"1.2.3.4", 1234}})), + ?assertEqual(false, is_extended({ip, {1234, 1234}})), + ?assertEqual(false, is_extended({ip, {"1.2.3.4", "1234"}})), + + ?assertEqual(true, is_extended({{duration, f}, "10f"})), + ?assertEqual(true, is_extended({{duration, w}, "10f"})), + ?assertEqual(true, is_extended({{duration, d}, "10f"})), + ?assertEqual(true, is_extended({{duration, g}, "10f"})), + ?assertEqual(true, is_extended({{duration, m}, "10f"})), + ?assertEqual(true, is_extended({{duration, s}, "10f"})), + ?assertEqual(true, is_extended({{duration, ms}, "10ms"})), + ?assertEqual(true, is_extended({bytesize, "10GB"})), + + ?assertEqual(true, is_extended({{percent, integer}, "10%"})), + ?assertEqual(true, is_extended({{percent, integer}, 10})), + ?assertEqual(true, is_extended({{percent, float}, "10%"})), + ?assertEqual(true, is_extended({{percent, float}, 0.1})), + ?assertEqual(true, is_extended({float, 0.1})), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_duration.erl b/deps/cuttlefish/src/cuttlefish_duration.erl new file mode 100644 index 0000000..1cdc48b --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration.erl @@ -0,0 +1,170 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration: complexity for parsing durations +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_duration). + +-opaque time_unit() :: f | w | d | h | m | s | ms. +-export_type([time_unit/0]). + +-include("cuttlefish_duration.hrl"). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([parse/1, parse/2, to_string/2]). + +-spec to_string(integer(), time_unit()) -> string(). +to_string(Fortnights, f) -> milliseconds(Fortnights * ?FORTNIGHT); +to_string(Weeks, w) -> milliseconds(Weeks * ?WEEK); +to_string(Days, d) -> milliseconds(Days * ?DAY); +to_string(Hours, h) -> milliseconds(Hours * ?HOUR); +to_string(Minutes, m) -> milliseconds(Minutes * ?MINUTE); +to_string(Seconds, s) -> milliseconds(Seconds * ?SECOND); +to_string(Millis, ms) -> milliseconds(Millis). + +milliseconds(Millis) -> + Units = lists:filter(fun({N, _Unit}) -> N =/= 0 end, [ + { Millis div ?WEEK, "w"}, + {(Millis rem ?WEEK) div ?DAY, "d"}, + {(Millis rem ?DAY) div ?HOUR, "h"}, + {(Millis rem ?HOUR) div ?MINUTE, "m"}, + {(Millis rem ?MINUTE) div ?SECOND, "s"}, + { Millis rem ?SECOND, "ms"} + ]), + lists:flatten([ + integer_to_list(N) ++ Unit + || {N, Unit} <- Units]). + +-spec parse(string(), time_unit()) -> integer(). +parse(DurationString, ms) -> parse(DurationString); +parse(DurationString, Unit) -> + case parse(DurationString) of + {error, _}=Err -> + Err; + Num when is_number(Num) -> + {Unit, Multiplier} = lists:keyfind(Unit, 1, ?MULTIPLIERS), + cuttlefish_util:ceiling(Num / Multiplier) + end. + + +-spec parse(string()) -> integer() | cuttlefish_error:error(). +parse(InputDurationString) -> + DurationString = string:to_lower(InputDurationString), + case cuttlefish_duration_parse:parse(DurationString) of + Float when is_float(Float) -> + cuttlefish_util:ceiling(Float); + Int when is_integer(Int) -> + Int; + _ -> + {error, {duration, InputDurationString}} + end. + +-ifdef(TEST). + +milliseconds_test() -> + ?assertEqual("500ms", milliseconds(500)), + ?assertEqual("1s500ms", milliseconds(1500)), + ?assertEqual("30m", milliseconds(1800000)), + ?assertEqual("1w1d1h1m1s1ms", milliseconds(694861001)), + ok. + +seconds_test() -> + ?assertEqual("50s", to_string(50, s)), + ?assertEqual("1m1s", to_string(61, s)), + ?assertEqual("30m", to_string(1800, s)), + ?assertEqual("1w1d1h1m1s", to_string(694861, s)), + ok. + +parse_test() -> + test_parse(500, "500ms"), + test_parse(500, ".5s"), + test_parse(1001, "1s1ms"), + test_parse(1599, "1s599ms"), + test_parse(1599, "1.599s"), + test_parse(1600, "1.5999s"), + test_parse(60000, "1m"), + test_parse(60000, "60s"), + test_parse(60000, "60000ms"), + test_parse(90000, "1.5m"), + test_parse(90000, "1m30s"), + test_parse(90000, "1m29s1000ms"), + test_parse(1800000, ".5h"), + test_parse(3600000, "1h"), + test_parse(3601000, "1h1s"), + test_parse(3660000, "1h1m"), + test_parse(3661000, "1h1m1s"), + test_parse(3661001, "1h1m1s1ms"), + test_parse(3600000, "60m"), + test_parse(5400000, "90m"), + test_parse(5401000, "90m1s"), + test_parse(5401001, "90m1s1ms"), + test_parse(5400000, "1h30m"), + test_parse(5401000, "1h30m1s"), + test_parse(3660000, "1h1m"), + test_parse(86400000, "1d"), + test_parse(86401000, "1d1s"), + test_parse(86401001, "1d1s1ms"), + test_parse(604800000, "1w"), + test_parse(691200000, "1w1d"), + test_parse(694800000, "1w1d1h"), + test_parse(694860000, "1w1d1h1m"), + test_parse(694861000, "1w1d1h1m1s"), + test_parse(694861001, "1w1d1h1m1s1ms"), + + %% Weird but ok? + test_parse(121001, "1m1s1ms1m"), + + %% Easter Egg + test_parse(1904461001, "1f1w1d1h1m1s1ms"), + ok. + +test_parse(ExpectedMillis, StringToParse) -> + ?assertEqual(ExpectedMillis, parse(StringToParse)). + +parse_2_test() -> + ?assertEqual(1, parse("1ms", ms)), + ?assertEqual(1, parse("1ms", s)), + ?assertEqual(1, parse("1ms", m)), + ?assertEqual(1, parse("1ms", h)), + ?assertEqual(1, parse("1ms", d)), + ?assertEqual(1, parse("1ms", w)), + ?assertEqual(1, parse("1ms", f)), + ok. + +to_string_test() -> + ?assertEqual("2w", to_string(1, f)), + ?assertEqual("2w", to_string(2, w)), + ?assertEqual("1w", to_string(1, w)), + ?assertEqual("1d", to_string(1, d)), + ?assertEqual("1w", to_string(7, d)), + ?assertEqual("1h", to_string(1, h)), + ?assertEqual("1m", to_string(1, m)), + ok. + +parse_error_test() -> + ?assertMatch({error, _}, parse("1q")), + %% This previously raised badarith because it did not check the + %% return value of parse/1. + ?assertMatch({error, _}, catch parse("1q", h)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_duration.hrl b/deps/cuttlefish/src/cuttlefish_duration.hrl new file mode 100644 index 0000000..2dfefc1 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration.hrl @@ -0,0 +1,16 @@ +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). +-define(FORTNIGHT, 1209600000). +-define(WEEK, 604800000). +-define(DAY, 86400000). +-define(HOUR, 3600000). +-define(MINUTE, 60000). +-define(SECOND, 1000). + +-define(MULTIPLIERS, + [{f, ?FORTNIGHT}, + {w, ?WEEK}, + {d, ?DAY}, + {h, ?HOUR}, + {m, ?MINUTE}, + {s, ?SECOND}, + {ms, 1}]). diff --git a/deps/cuttlefish/src/cuttlefish_duration_parse.erl b/deps/cuttlefish/src/cuttlefish_duration_parse.erl new file mode 100644 index 0000000..58117c7 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration_parse.erl @@ -0,0 +1,343 @@ +-module(cuttlefish_duration_parse). +-export([parse/1,file/1]). +-define(p_charclass,true). +-define(p_choose,true). +-define(p_one_or_more,true). +-define(p_scan,true). +-define(p_seq,true). +-define(p_string,true). +-define(p_zero_or_more,true). + + + + +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration_parse: parses duration strings +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-include("cuttlefish_duration.hrl"). + +-define(FLATTEN(S), binary_to_list(iolist_to_binary(S))). + +-spec file(file:name()) -> any(). +file(Filename) -> + AbsFilename = filename:absname(Filename), + case erl_prim_loader:get_file(AbsFilename) of + {ok, Bin, _} -> parse(Bin); + error -> {error, undefined} + end. + +-spec parse(binary() | list()) -> any(). +parse(List) when is_list(List) -> parse(list_to_binary(List)); +parse(Input) when is_binary(Input) -> + _ = setup_memo(), + Result = case 'duration'(Input,{{line,1},{column,1}}) of + {AST, <<>>, _Index} -> AST; + Any -> Any + end, + release_memo(), Result. + +-spec 'duration'(input(), index()) -> parse_result(). +'duration'(Input, Index) -> + p(Input, Index, 'duration', fun(I,D) -> (p_one_or_more(fun 'duration_segment'/2))(I,D) end, fun(Node, _Idx) ->lists:sum(Node) end). + +-spec 'duration_segment'(input(), index()) -> parse_result(). +'duration_segment'(Input, Index) -> + p(Input, Index, 'duration_segment', fun(I,D) -> (p_seq([p_choose([fun 'float'/2, fun 'integer'/2]), fun 'unit'/2]))(I,D) end, fun(Node, _Idx) -> + [Amount, Span] = Node, + {Span, Multiplier} = lists:keyfind(Span, 1, ?MULTIPLIERS), + Amount * Multiplier + end). + +-spec 'integer'(input(), index()) -> parse_result(). +'integer'(Input, Index) -> + p(Input, Index, 'integer', fun(I,D) -> (p_seq([p_charclass(<<"[1-9]">>), p_zero_or_more(p_charclass(<<"[0-9]">>))]))(I,D) end, fun(Node, _Idx) ->list_to_integer(?FLATTEN(Node)) end). + +-spec 'unit'(input(), index()) -> parse_result(). +'unit'(Input, Index) -> + p(Input, Index, 'unit', fun(I,D) -> (p_choose([p_string(<<"f">>), p_string(<<"w">>), p_string(<<"d">>), p_string(<<"h">>), p_string(<<"ms">>), p_string(<<"m">>), p_string(<<"s">>)]))(I,D) end, fun(Node, _Idx) ->binary_to_atom(Node, latin1) end). + +-spec 'float'(input(), index()) -> parse_result(). +'float'(Input, Index) -> + p(Input, Index, 'float', fun(I,D) -> (p_choose([p_seq([p_one_or_more(p_charclass(<<"[0-9]">>)), p_string(<<".">>), p_one_or_more(p_charclass(<<"[0-9]">>))]), p_seq([p_string(<<".">>), p_one_or_more(p_charclass(<<"[0-9]">>))])]))(I,D) end, fun(Node, _Idx) -> + case Node of + [<<".">>, Mantissa] -> + list_to_float(?FLATTEN(["0.", Mantissa])); + _ -> + list_to_float(?FLATTEN(Node)) + end + end). + + + +-file("peg_includes.hrl", 1). +-type index() :: {{line, pos_integer()}, {column, pos_integer()}}. +-type input() :: binary(). +-type parse_failure() :: {fail, term()}. +-type parse_success() :: {term(), input(), index()}. +-type parse_result() :: parse_failure() | parse_success(). +-type parse_fun() :: fun((input(), index()) -> parse_result()). +-type xform_fun() :: fun((input(), index()) -> term()). + +-spec p(input(), index(), atom(), parse_fun(), xform_fun()) -> parse_result(). +p(Inp, StartIndex, Name, ParseFun, TransformFun) -> + case get_memo(StartIndex, Name) of % See if the current reduction is memoized + {ok, Memo} -> %Memo; % If it is, return the stored result + Memo; + _ -> % If not, attempt to parse + Result = case ParseFun(Inp, StartIndex) of + {fail,_} = Failure -> % If it fails, memoize the failure + Failure; + {Match, InpRem, NewIndex} -> % If it passes, transform and memoize the result. + Transformed = TransformFun(Match, StartIndex), + {Transformed, InpRem, NewIndex} + end, + memoize(StartIndex, Name, Result), + Result + end. + +-spec setup_memo() -> ets:tid(). +setup_memo() -> + put({parse_memo_table, ?MODULE}, ets:new(?MODULE, [set])). + +-spec release_memo() -> true. +release_memo() -> + ets:delete(memo_table_name()). + +-spec memoize(index(), atom(), parse_result()) -> true. +memoize(Index, Name, Result) -> + Memo = case ets:lookup(memo_table_name(), Index) of + [] -> []; + [{Index, Plist}] -> Plist + end, + ets:insert(memo_table_name(), {Index, [{Name, Result}|Memo]}). + +-spec get_memo(index(), atom()) -> {ok, term()} | {error, not_found}. +get_memo(Index, Name) -> + case ets:lookup(memo_table_name(), Index) of + [] -> {error, not_found}; + [{Index, Plist}] -> + case proplists:lookup(Name, Plist) of + {Name, Result} -> {ok, Result}; + _ -> {error, not_found} + end + end. + +-spec memo_table_name() -> ets:tid(). +memo_table_name() -> + get({parse_memo_table, ?MODULE}). + +-ifdef(p_eof). +-spec p_eof() -> parse_fun(). +p_eof() -> + fun(<<>>, Index) -> {eof, [], Index}; + (_, Index) -> {fail, {expected, eof, Index}} end. +-endif. + +-ifdef(p_optional). +-spec p_optional(parse_fun()) -> parse_fun(). +p_optional(P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} -> {[], Input, Index}; + {_, _, _} = Success -> Success + end + end. +-endif. + +-ifdef(p_not). +-spec p_not(parse_fun()) -> parse_fun(). +p_not(P) -> + fun(Input, Index)-> + case P(Input,Index) of + {fail,_} -> + {[], Input, Index}; + {Result, _, _} -> {fail, {expected, {no_match, Result},Index}} + end + end. +-endif. + +-ifdef(p_assert). +-spec p_assert(parse_fun()) -> parse_fun(). +p_assert(P) -> + fun(Input,Index) -> + case P(Input,Index) of + {fail,_} = Failure-> Failure; + _ -> {[], Input, Index} + end + end. +-endif. + +-ifdef(p_seq). +-spec p_seq([parse_fun()]) -> parse_fun(). +p_seq(P) -> + fun(Input, Index) -> + p_all(P, Input, Index, []) + end. + +-spec p_all([parse_fun()], input(), index(), [term()]) -> parse_result(). +p_all([], Inp, Index, Accum ) -> {lists:reverse( Accum ), Inp, Index}; +p_all([P|Parsers], Inp, Index, Accum) -> + case P(Inp, Index) of + {fail, _} = Failure -> Failure; + {Result, InpRem, NewIndex} -> p_all(Parsers, InpRem, NewIndex, [Result|Accum]) + end. +-endif. + +-ifdef(p_choose). +-spec p_choose([parse_fun()]) -> parse_fun(). +p_choose(Parsers) -> + fun(Input, Index) -> + p_attempt(Parsers, Input, Index, none) + end. + +-spec p_attempt([parse_fun()], input(), index(), none | parse_failure()) -> parse_result(). +p_attempt([], _Input, _Index, Failure) -> Failure; +p_attempt([P|Parsers], Input, Index, FirstFailure)-> + case P(Input, Index) of + {fail, _} = Failure -> + case FirstFailure of + none -> p_attempt(Parsers, Input, Index, Failure); + _ -> p_attempt(Parsers, Input, Index, FirstFailure) + end; + Result -> Result + end. +-endif. + +-ifdef(p_zero_or_more). +-spec p_zero_or_more(parse_fun()) -> parse_fun(). +p_zero_or_more(P) -> + fun(Input, Index) -> + p_scan(P, Input, Index, []) + end. +-endif. + +-ifdef(p_one_or_more). +-spec p_one_or_more(parse_fun()) -> parse_fun(). +p_one_or_more(P) -> + fun(Input, Index)-> + Result = p_scan(P, Input, Index, []), + case Result of + {[_|_], _, _} -> + Result; + _ -> + {fail, {expected, Failure, _}} = P(Input,Index), + {fail, {expected, {at_least_one, Failure}, Index}} + end + end. +-endif. + +-ifdef(p_label). +-spec p_label(atom(), parse_fun()) -> parse_fun(). +p_label(Tag, P) -> + fun(Input, Index) -> + case P(Input, Index) of + {fail,_} = Failure -> + Failure; + {Result, InpRem, NewIndex} -> + {{Tag, Result}, InpRem, NewIndex} + end + end. +-endif. + +-ifdef(p_scan). +-spec p_scan(parse_fun(), input(), index(), [term()]) -> {[term()], input(), index()}. +p_scan(_, <<>>, Index, Accum) -> {lists:reverse(Accum), <<>>, Index}; +p_scan(P, Inp, Index, Accum) -> + case P(Inp, Index) of + {fail,_} -> {lists:reverse(Accum), Inp, Index}; + {Result, InpRem, NewIndex} -> p_scan(P, InpRem, NewIndex, [Result | Accum]) + end. +-endif. + +-ifdef(p_string). +-spec p_string(binary()) -> parse_fun(). +p_string(S) -> + Length = erlang:byte_size(S), + fun(Input, Index) -> + try + <> = Input, + {S, Rest, p_advance_index(S, Index)} + catch + error:{badmatch,_} -> {fail, {expected, {string, S}, Index}} + end + end. +-endif. + +-ifdef(p_anything). +-spec p_anything() -> parse_fun(). +p_anything() -> + fun(<<>>, Index) -> {fail, {expected, any_character, Index}}; + (Input, Index) when is_binary(Input) -> + <> = Input, + {<>, Rest, p_advance_index(<>, Index)} + end. +-endif. + +-ifdef(p_charclass). +-spec p_charclass(string() | binary()) -> parse_fun(). +p_charclass(Class) -> + {ok, RE} = re:compile(Class, [unicode, dotall]), + fun(Inp, Index) -> + case re:run(Inp, RE, [anchored]) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {character_class, binary_to_list(Class)}, Index}} + end + end. +-endif. + +-ifdef(p_regexp). +-spec p_regexp(binary()) -> parse_fun(). +p_regexp(Regexp) -> + {ok, RE} = re:compile(Regexp, [unicode, dotall, anchored]), + fun(Inp, Index) -> + case re:run(Inp, RE) of + {match, [{0, Length}|_]} -> + {Head, Tail} = erlang:split_binary(Inp, Length), + {Head, Tail, p_advance_index(Head, Index)}; + _ -> {fail, {expected, {regexp, binary_to_list(Regexp)}, Index}} + end + end. +-endif. + +-ifdef(line). +-spec line(index() | term()) -> pos_integer() | undefined. +line({{line,L},_}) -> L; +line(_) -> undefined. +-endif. + +-ifdef(column). +-spec column(index() | term()) -> pos_integer() | undefined. +column({_,{column,C}}) -> C; +column(_) -> undefined. +-endif. + +-spec p_advance_index(input() | unicode:charlist() | pos_integer(), index()) -> index(). +p_advance_index(MatchedInput, Index) when is_list(MatchedInput) orelse is_binary(MatchedInput)-> % strings + lists:foldl(fun p_advance_index/2, Index, unicode:characters_to_list(MatchedInput)); +p_advance_index(MatchedInput, Index) when is_integer(MatchedInput) -> % single characters + {{line, Line}, {column, Col}} = Index, + case MatchedInput of + $\n -> {{line, Line+1}, {column, 1}}; + _ -> {{line, Line}, {column, Col+1}} + end. diff --git a/deps/cuttlefish/src/cuttlefish_duration_parse.peg b/deps/cuttlefish/src/cuttlefish_duration_parse.peg new file mode 100644 index 0000000..4deb2e7 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_duration_parse.peg @@ -0,0 +1,51 @@ +%% Duration string parser + +duration <- duration_segment+ `lists:sum(Node)`; + +duration_segment <- (float / integer) unit ` + [Amount, Span] = Node, + {Span, Multiplier} = lists:keyfind(Span, 1, ?MULTIPLIERS), + Amount * Multiplier +`; + +integer <- [1-9] [0-9]* `list_to_integer(?FLATTEN(Node))`; + +unit <- "f" / "w" / "d" / "h" / "ms" / "m" / "s" `binary_to_atom(Node, latin1)`; + +float <- ( [0-9]+ "." [0-9]+ ) / ( "." [0-9]+ ) ` + case Node of + [<<".">>, Mantissa] -> + list_to_float(?FLATTEN(["0.", Mantissa])); + _ -> + list_to_float(?FLATTEN(Node)) + end +`; + +` + +%% ------------------------------------------------------------------- +%% +%% cuttlefish_duration_parse: parses duration strings +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-include("cuttlefish_duration.hrl"). + +-define(FLATTEN(S), binary_to_list(iolist_to_binary(S))). +` diff --git a/deps/cuttlefish/src/cuttlefish_effective.erl b/deps/cuttlefish/src/cuttlefish_effective.erl new file mode 100644 index 0000000..f94722d --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_effective.erl @@ -0,0 +1,282 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_effective: handles generating the effective configuration +%% +%% Copyright (c) 2014 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_effective). + +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-export([build/3]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-spec build(cuttlefish_conf:conf(), cuttlefish_schema:schema(), [proplists:property()]) -> [string()]. +build(Conf, {_Translations, Mappings, _Validators} = _Schema, AdvConfig) -> + EffectiveConfig = lists:reverse(lists:sort(cuttlefish_generator:add_defaults(Conf, Mappings))), + %% EffectiveConfig is a list of { [string()], term() } + + %% Returns the list of cuttlefish variables that have been overridden in advanced.config + KeysToHateOn = process_advanced(Mappings, AdvConfig), + + EffectiveOutput = lists:foldl( + fun({Var, Value}, Acc) -> + Variable = string:join(Var, "."), + + IsHater = + lists:any( + fun(X) -> + cuttlefish_variable:is_fuzzy_match(Var, X) + end, + KeysToHateOn + ), + + Line = try ?FMT("~s = ~s", [Variable, Value]) of + X -> X + catch + _:_ -> + %% I hate that I had to do this, 'cause you know... + %% Erlang and Strings, but actually this is ok because + %% sometimes there are going to be weird tuply things + %% in here, so always good to fall back on ~p. + %% honestly, I think this try should be built into io:format + ?FMT("~s = ~p", [Variable, Value]) + end, + case IsHater of + true -> + [?FMT("## ~s was overridden in advanced.config", [Variable]), + "## " ++ Line] ++ Acc; + _ -> [Line | Acc] + end + end, + [], + EffectiveConfig + ), + + case AdvConfig of + [] -> EffectiveOutput; + _ -> + EffectiveOutput ++ + [ + "## The following advanced.config was used in generating the ", + "## configuration and may have overridden some options that were ", + "## commented out above." + ] + ++ advanced_as_comment(AdvConfig) + end. + +advanced_as_comment(AdvConfig) -> + Str = lists:flatten(io_lib:format("~p", [AdvConfig])), + [ "## " ++ L || L <- string:tokens(Str, "$\n")]. + +%% @doc checks a mapping's "mapping" is in the set of kvc paths in +%% the provided advanced.config +-spec process_advanced( + [cuttlefish_mapping:mapping()], + [proplists:property()]) -> [cuttlefish_variable:variable()]. +process_advanced(Mappings, AdvancedConfig) -> + AdvKeys = proplist_to_kvcpaths(AdvancedConfig), + lists:foldl( + fun(M, Acc) -> + case lists:member(cuttlefish_mapping:mapping(M), AdvKeys) of + true -> + [cuttlefish_mapping:variable(M)|Acc]; + _ -> Acc + end + end, + [], + Mappings). + +%% @doc returns a list of kvcesque paths that represent the structure +%% of a proplist of proplists of proplists etc... +%% e.g. [{parent, [{child1, [{grandchild1, _}]}, {child2, _}]}] -> +%% ["parent.child1.grandchild1", "parent.child2"] +-spec proplist_to_kvcpaths([proplists:property()]) -> [string()]. +proplist_to_kvcpaths(Proplist) -> + proplist_to_kvcpaths("", Proplist). +-spec proplist_to_kvcpaths(string(), [proplists:property()]) -> [string()]. +proplist_to_kvcpaths(Prefix, Proplist) -> + %% Handles the base case, without this, all keys would start with "." + NewPrefix = case Prefix of + "" -> ""; + _ -> Prefix ++ "." + end, + lists:foldl(fun(K, Acc) -> + KeyedPrefix = NewPrefix ++ canonicalize_key(K), + R = proplist_to_kvcpaths( + KeyedPrefix, + proplists:get_value(K, Proplist)), + case R of + [] -> + [KeyedPrefix|Acc]; + _ -> + Acc ++ R + end + end, + [], + keys_if_you_got_em(Proplist) + ). + +%% So this is gross, but is the simplest scheme for determining the +%% type of data coming into this function. It doesn't really +%% matter how we handle non-atoms because cuttlefish only creates +%% proplists with atoms as the keynames. +-spec canonicalize_key(atom() | list() | binary()) -> string(). +canonicalize_key(K) when is_atom(K) -> + atom_to_list(K); +canonicalize_key(K) when is_list(K) -> + "\"" ++ K ++ "\""; +canonicalize_key(K) when is_binary(K) -> + "<<\""++binary_to_list(K)++"\">>". + + +-spec keys_if_you_got_em([proplists:property()]) -> [term()]. +keys_if_you_got_em(Proplist) when is_list(Proplist) -> + proplists:get_keys(Proplist); +keys_if_you_got_em(_) -> []. + +-ifdef(TEST). + +%% This is the comprehensive test of all functionality of this module +%% working together in perfect harmony +probably_the_most_important_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "namespace.var1", "app.setting1", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.2.$sub", "app.setting2", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.var3", "app.setting3", []} + ), + cuttlefish_mapping:parse( + {mapping, "namespace.4.$sub", "app.setting4", []} + ) + ], + Conf = [ + {["namespace", "var1"], "x"}, + {["namespace", "2", "1"], "x"}, + {["namespace", "2", "2"], "x"}, + {["namespace", "2", "3"], "x"}, + {["namespace", "var3"], "y"}, + {["namespace", "4", "1"], "y"}, + {["namespace", "4", "2"], "y"}, + {["namespace", "4", "3"], "y"} + ], + AdvConfig = [{app, [{setting3, "z"}, {setting4, "zz"}]}], + + Effective = build(Conf, {[], Mappings, []}, AdvConfig), + ?assertEqual(16, length(Effective)), + + %% Remember, this output is sorted by variable, even if there's a comment + + ?assertEqual("namespace.2.1 = x", lists:nth(1, Effective)), + ?assertEqual("namespace.2.2 = x", lists:nth(2, Effective)), + ?assertEqual("namespace.2.3 = x", lists:nth(3, Effective)), + ?assertEqual("## namespace.4.1 was overridden in advanced.config", lists:nth(4, Effective)), + ?assertEqual("## namespace.4.1 = y", lists:nth(5, Effective)), + ?assertEqual("## namespace.4.2 was overridden in advanced.config", lists:nth(6, Effective)), + ?assertEqual("## namespace.4.2 = y", lists:nth(7, Effective)), + ?assertEqual("## namespace.4.3 was overridden in advanced.config", lists:nth(8, Effective)), + ?assertEqual("## namespace.4.3 = y", lists:nth(9, Effective)), + ?assertEqual("namespace.var1 = x", lists:nth(10, Effective)), + ?assertEqual("## namespace.var3 was overridden in advanced.config", lists:nth(11, Effective)), + ?assertEqual("## namespace.var3 = y", lists:nth(12, Effective)), + ?assertEqual("## The following advanced.config was used in generating the ", lists:nth(13, Effective)), + ?assertEqual("## configuration and may have overridden some options that were ", lists:nth(14, Effective)), + ?assertEqual("## commented out above.", lists:nth(15, Effective)), + ?assertEqual("## [{app,[{setting3,\"z\"},{setting4,\"zz\"}]}]", lists:nth(16, Effective)), + ok. + +process_advanced_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "thing.1", "a.b.c", []} + ) + ], + AdvConfig = [{a, [{b, [{c, ""}, {d, ""}]}]}], + KeysToWatch = process_advanced(Mappings, AdvConfig), + ?assertEqual([["thing", "1"]], KeysToWatch), + ok. + +build_with_sub_test() -> + Mappings = [ + cuttlefish_mapping:parse( + {mapping, "a.$whatev.thing", "a.b.c", []} + ) + ], + AdvConfig = [{a, [{b, [{c, ""}, {d, ""}]}]}], + Conf = [ + {["a", "1", "thing"], "x"}, + {["a", "2", "thing"], "x"}, + {["a", "3", "thing"], "x"} + ], + + Effective = build(Conf, {[], Mappings, []}, AdvConfig), + + ?assertEqual(10, length(Effective)), + ?assertEqual("## a.1.thing was overridden in advanced.config", lists:nth(1, Effective)), + ?assertEqual("## a.1.thing = x", lists:nth(2, Effective)), + ?assertEqual("## a.2.thing was overridden in advanced.config", lists:nth(3, Effective)), + ?assertEqual("## a.2.thing = x", lists:nth(4, Effective)), + ?assertEqual("## a.3.thing was overridden in advanced.config", lists:nth(5, Effective)), + ?assertEqual("## a.3.thing = x", lists:nth(6, Effective)), + ?assertEqual("## The following advanced.config was used in generating the ", lists:nth(7, Effective)), + ?assertEqual("## configuration and may have overridden some options that were ", lists:nth(8, Effective)), + ?assertEqual("## commented out above.", lists:nth(9, Effective)), + ?assertEqual("## [{a,[{b,[{c,[]},{d,[]}]}]}]", lists:nth(10, Effective)), + ok. + +proplist_to_kvcpath_test() -> + Proplist = [{a, [ + {b, [ + {c, "x"} + ]}, + {d, [ + {e, "y"} + ]}, + {f , "z"} + ] + }, + {g, "q"}], + Paths = proplist_to_kvcpaths(Proplist), + ?assertEqual(sets:from_list([ + "a.b.c", + "a.d.e", + "a.f", + "g" + ]), sets:from_list(Paths)), + ok. + +proplists_to_kvcpath_riak_core_test() -> + Proplist = [{riak_core,[ + {ring_creation_size,128}, + {cluster_mgr, {"127.0.0.1", 9080 } } + ]}], + Paths = proplist_to_kvcpaths(Proplist), + ?assertEqual([ + "riak_core.ring_creation_size", + "riak_core.cluster_mgr" + ], Paths), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_enum.erl b/deps/cuttlefish/src/cuttlefish_enum.erl new file mode 100644 index 0000000..75ba20b --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_enum.erl @@ -0,0 +1,162 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_enum: datatype for simple enum settings with +%% customizable names and values +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_enum). + +-type enum_list() :: [{atom()|string(), term()}]. +-type enum() :: {enum, enum_list()}. +-type strict_enum_list() :: [{string(), term()}]. +-type strict_enum() :: {enum, strict_enum_list()}. +-export_type([enum/0, strict_enum/0]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + to_string/2, + parse/2 +]). + +-define(FMT(F, A), lists:flatten(io_lib:format(F, A))). + +-spec to_string(string() | atom(), enum() + ) -> string() | cuttlefish_error:error(). +to_string(Value, {enum, _Raw} = Enum) -> + FriendlEnum = assuage_enum(Enum), + case to_string_by_value(Value, FriendlEnum) of + {K, _} -> + atom_to_list_maybe(K); + false -> + to_string_by_key(atom_to_list_maybe(Value), FriendlEnum) + end. + +-spec to_string_by_value(term(), strict_enum()) -> term(). +to_string_by_value(Value, {enum, FriendlEnum}) -> + lists:keyfind(Value, 2, FriendlEnum). + +-spec to_string_by_key(atom() | string(), strict_enum()) -> string(). +to_string_by_key(Key, {enum, FriendlEnum}) -> + case lists:keyfind(Key, 1, FriendlEnum) of + {K, _} -> K; + false -> + to_error(Key, FriendlEnum) + end. + +-spec parse(term(), enum()) -> term() | cuttlefish_error:error(). +parse(Value, {enum, _Raw} = Enum) -> + FriendlEnum = assuage_enum(Enum), + case parse_by_key(atom_to_list_maybe(Value), FriendlEnum) of + {_Key, Val} -> + Val; + false -> + parse_by_value(Value, FriendlEnum) + end. + +-spec parse_by_key(atom() | string() | term(), strict_enum()) -> + {string(), term()} | false. +parse_by_key(Key, {enum, FriendlEnum}) -> + lists:keyfind(Key, 1, FriendlEnum). + +-spec parse_by_value(term(), strict_enum()) -> term() | cuttlefish_error:error(). +parse_by_value(Value, {enum, FriendlEnum}) -> + case lists:keyfind(Value, 2, FriendlEnum) of + false -> + to_error(Value, FriendlEnum); + {_Key, Value} -> + Value + end. + +-spec to_error(atom() | string()| term(), strict_enum_list()) -> cuttlefish_error:error(). +to_error(Value, FriendlEnum) -> + Acceptable = [Key || {Key, _} <- FriendlEnum], + {error, {enum_name, {atom_to_list_maybe(Value), Acceptable}}}. + +-spec atom_to_list_maybe(term()) -> term(). +atom_to_list_maybe(Atom) when is_atom(Atom) -> + atom_to_list(Atom); +atom_to_list_maybe(Other) -> Other. + +-spec assuage_enum(enum()) -> strict_enum() | cuttlefish_error:error(). +assuage_enum({enum, Enum}) -> + FriendlEnum = assuage_enum(Enum, []), + case cuttlefish_error:is_error(FriendlEnum) of + true -> + FriendlEnum; + _ -> + {enum, FriendlEnum} + end. + +-spec assuage_enum(enum_list(), strict_enum_list()) + -> strict_enum_list() | cuttlefish_error:error(). +assuage_enum([], FriendlEnum) -> + lists:reverse(FriendlEnum); +%% If the head is a 2-tuple; yay! +assuage_enum([{Key, Value}|EnumTail], FriendlEnum) when is_atom(Key) -> + assuage_enum(EnumTail, [ { cuttlefish_datatypes:to_string(Key, atom), Value } | FriendlEnum ]); +assuage_enum([{Key, Value}|EnumTail], FriendlEnum) when is_list(Key) -> + assuage_enum(EnumTail, [ { Key, Value } | FriendlEnum ]); +%% If the head is just a string or atom, fall here. +assuage_enum([Key|EnumTail], FriendlEnum) when is_atom(Key) -> + assuage_enum(EnumTail, [ + { cuttlefish_datatypes:to_string(Key, atom), Key } | FriendlEnum]); +assuage_enum([Key|EnumTail], FriendlEnum) when is_list(Key) -> + assuage_enum(EnumTail, [{Key, Key} | FriendlEnum]); +assuage_enum([BadTuple|_], _) when is_tuple(BadTuple) -> + {error, {enum_format, BadTuple}}; +assuage_enum([ErroneousItem|_], _) -> + {error, {enum_format, ErroneousItem}}. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + ?assertEqual(1, parse("one", {enum, [{"one", 1}, two]})), + ?assertEqual(two, parse("two", {enum, [{"one", 1}, two]})), + ok. + +assuage_enum_test() -> + ?assertEqual({enum, [{"true", true}, {"false", false}]}, + assuage_enum({enum, [true, false]})), + ?assertEqual({enum, [{"true", "true"}, {"false", "false"}]}, + assuage_enum({enum, ["true", "false"]})), + ?assertEqual({enum, [{"one", 1}, {"two", 2}]}, + assuage_enum({enum, [{one, 1}, {"two", 2}]})), + ?assertEqual({enum, [{"off", off}, {"on", "On"}]}, + assuage_enum({enum, [off, {on, "On"}]})), + ok. + +assuage_enum_error_test() -> + ?assertEqual( + "Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: {one,two,three}", + ?XLATE(assuage_enum({enum, [{one, two, three}, oops]})) + ), + ?assertEqual( + "Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: 7", + ?XLATE(assuage_enum({enum, [oops, 7]})) + ), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_error.erl b/deps/cuttlefish/src/cuttlefish_error.erl new file mode 100644 index 0000000..ca890cf --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_error.erl @@ -0,0 +1,219 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_generator: this is where the action is +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_error). + +-type error() :: {'error', {atom(), term()}}. +-type errorlist() :: {'errorlist', [error()]}. +-export_type([error/0, errorlist/0]). + +-export([ + contains_error/1, + is_error/1, + filter/1, + errorlist_maybe/1, + print/1, + print/2, + xlate/1 +]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% We'll be calling this a lot from `xlate' +-define(STR(X, Y), xlate(cuttlefish_datatypes:to_string(X, Y))). + +-spec xlate({atom(), term()}|string()) -> iolist(). +xlate(Message) when is_list(Message) -> + %% We allow for strings so that we can safely call + %% `cuttlefish_datatypes:to_string` when creating these messages + Message; +xlate({error, Details}) -> + xlate(Details); +xlate({_Error, {error, NestedError}}) -> + xlate(NestedError); +xlate({type, {Value, Type}}) -> + io_lib:format("Tried to convert ~p but invalid datatype: ~p", + [Value, Type]); +xlate({range, {{Value, Type}, Range}}) -> + [?STR(Value, Type), " can't be outside the range ", Range]; +xlate({conversion, {Value, Type}}) -> + io_lib:format("~p cannot be converted to a(n) ~s", [Value, Type]); +xlate({duration, Value}) -> + io_lib:format("Invalid duration value: ~ts", [Value]); +xlate({enum_name, {Value, EnumNames}}) -> + io_lib:format("~p is not a valid enum value, acceptable values are: ~ts", + [Value, string:join(EnumNames, ", ")]); +xlate({enum_format, Value}) -> + %% This collapses two different type of formatting errors into one + %% error message + io_lib:format("Enum elements must be atoms, strings, or 2-tuples with " + "atom or string as first element. Bad value: ~w", [Value]); +xlate({mapping_types, List}) -> + io_lib:format("Invalid datatype list for mapping: ~ts", + [string:join(List, ", ")]); +xlate({mapping_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_mapping:parse/1 : ~p", + [Term] + ); +xlate({translation_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_translation:parse/1 : ~p", + [Term] + ); +xlate({validator_parse, Term}) -> + io_lib:format( + "Poorly formatted input to cuttlefish_validator:parse/1 : ~p", + [Term] + ); +xlate({conf_to_latin1, LineNum}) -> + io_lib:format("Error converting value on line #~p to latin1", [LineNum]); +xlate({bytesize_parse, Value}) -> + io_lib:format("Error converting value ~p to a number of bytes", [Value]); +xlate({file_open, {File, Reason}}) -> + io_lib:format("Could not open file (~s) for Reason ~s", [File, Reason]); +xlate({conf_syntax, {File, {Line, Col}}}) -> + io_lib:format("Syntax error in ~s after line ~p column ~p, " + "parsing incomplete", [File, Line, Col]); +xlate({in_file, {File, Error}}) -> + [File, ": ", xlate(Error)]; +xlate({translation_missing_setting, {Translation, Setting}}) -> + io_lib:format("Translation for '~s' expected to find setting '~s' but was missing", + [Translation, Setting]); +xlate({translation_invalid_configuration, {Translation, Invalid}}) -> + io_lib:format("Translation for '~s' found invalid configuration: ~s", + [Translation, Invalid]); +xlate({translation_unknown_error, {Translation, {Class, Error}}}) -> + io_lib:format("Error running translation for ~s, [~p, ~p]", + [Translation, Class, Error]); +xlate({translation_arity, {Translation, Arity}}) -> + io_lib:format("~p is not a valid arity for translation fun() ~s." + " Try 1 or 2", [Arity, Translation]); +xlate({map_multiple_match, VariableDefinition}) -> + io_lib:format("~p has both a fuzzy and strict match", [VariableDefinition]); +xlate({unknown_variable, Variable}) -> + ["Conf file attempted to set unknown variable: ", Variable]; +xlate({unsupported_type, Type}) -> + io_lib:format("~p is not a supported datatype", [Type]); +xlate({transform_type, Type}) -> + ["Error transforming datatype for: ", Type]; +xlate({transform_type_exception, {Type, {Class, Error}}}) -> + io_lib:format("Caught exception converting to ~p: ~p:~p", + [Type, Class, Error]); +xlate({transform_type_unacceptable, {Value, BadValue}}) -> + io_lib:format("~p is not accepted value: ~p", [Value, BadValue]); +xlate({circular_rhs, History}) -> + io_lib:format("Circular RHS substitutions: ~p", [History]); +xlate({substitution_missing_config, {Substitution, Variable}}) -> + io_lib:format("'~s' substitution requires a config variable '~s' to be set", + [Substitution, Variable]); +xlate({mapping_not_found, Variable}) -> + [Variable, " not_found"]; +xlate({mapping_multiple, {Variable, {Hard, Fuzzy}}}) -> + io_lib:format("~p hard mappings and ~p fuzzy mappings found " + "for ~s", [Hard, Fuzzy, Variable]); +xlate({validation, {Variable, Description}}) -> + [Variable, " invalid, ", Description]; +xlate({erl_parse, {Reason, LineNo}}) -> + ["Schema parse error near line number ", integer_to_list(LineNo), + ": ", Reason]; +xlate({erl_parse, Reason}) -> + io_lib:format("Schema parse error: ~p", [Reason]); +xlate({erl_parse_unexpected, Error}) -> + io_lib:format("Unexpected return from erl_parse:parse_exprs/1: ~p", + [Error]); +xlate({parse_schema, Value}) -> + io_lib:format("Unknown parse return: ~p", [Value]); +xlate({erl_scan, LineNo}) -> + ["Error scanning erlang near line ", integer_to_list(LineNo)]. + +-spec contains_error(list()) -> boolean(). +contains_error(List) -> + lists:any(fun is_error/1, List). + +-spec is_error(any()) -> boolean(). +is_error({error, _}) -> true; +is_error(_) -> false. + +-spec filter(list()) -> errorlist(). +filter(List) -> + {errorlist, lists:filter(fun is_error/1, List)}. + +-spec errorlist_maybe(any()) -> any(). +errorlist_maybe(List) when is_list(List) -> + case filter(List) of + {errorlist, []} -> + List; + Errorlist -> + Errorlist + end; +errorlist_maybe(AnythingElse) -> AnythingElse. + +-spec print(string(), [any()]) -> ok. +print(FormatString, Args) -> + print(io_lib:format(FormatString, Args)). + +-spec print(string() | error()) -> ok. +print({error, ErrorTerm}) -> + print(lists:flatten(xlate(ErrorTerm))); +print(String) -> + case lager:error("~s", [String]) of + {error, lager_not_running} -> + io:format("~s~n", [String]), + ok; + ok -> ok + end. + +-ifdef(TEST). + +is_error_test() -> + ?assert(is_error({error, "oh no!"})), + ?assert(not(is_error("just an innocent string... I mean a list... I mean... argh, erlang"))), + ok. + +contains_error_test() -> + ?assert(contains_error(["hi", {error, "hi!"}, "bye"])), + ?assert(not(contains_error(["hi", "I'm not an error", "bye"]))), + ok. + +filter_test() -> + ?assertEqual({errorlist, []}, filter(["hi", "what even is an error?", "bye"])), + ?assertEqual({errorlist, [{error, "etoomanythings"}]}, + filter(["hi", {error, "etoomanythings"}, "bye"])), + ok. + +errorlist_maybe_test() -> + ?assertEqual(atom, errorlist_maybe(atom)), + ?assertEqual(12, errorlist_maybe(12)), + %% Fool you! "string" is a list!, but doesn't contain an error() + ?assertEqual("string", errorlist_maybe("string")), + + ?assertEqual( + {errorlist, [{error, "etoomanythings"}]}, + errorlist_maybe(["hi", {error, "etoomanythings"}, "bye"])), + ?assertEqual( + ["hi", "what even is an error?", "bye"], + errorlist_maybe(["hi", "what even is an error?", "bye"])), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_escript.erl b/deps/cuttlefish/src/cuttlefish_escript.erl new file mode 100644 index 0000000..340a8b5 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_escript.erl @@ -0,0 +1,534 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_escript: used by sh scripts to parse configs +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_escript). + +-define(STDOUT(Str, Args), io:format(Str ++ "~n", Args)). +-define(FORMAT(Str, Args), io_lib:format(Str, Args)). +-export([main/1]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +cli_options() -> +%% Option Name, Short Code, Long Code, Argument Spec, Help Message +[ + {help, $h, "help", undefined, "Print this usage page"}, + {etc_dir, $e, "etc_dir", {string, "/etc"}, "etc dir"}, + {dest_dir, $d, "dest_dir", string, "specifies the directory to write the config file to"}, + {dest_file, $f, "dest_file", {string, "app"}, "the file name to write"}, + {schema_dir, $s, "schema_dir", string, "a directory containing .schema files"}, + {schema_file, $i, "schema_file", string, "individual schema file, will be processed in command line order, after -s"}, + {conf_file, $c, "conf_file", string, "a cuttlefish conf file, multiple files allowed"}, + {app_config, $a, "app_config", string, "the advanced erlangy app.config"}, + {log_level, $l, "log_level", {string, "notice"}, "log level for cuttlefish output"}, + {print_schema, $p, "print", undefined, "prints schema mappings on stderr"}, + {max_history, $m, "max_history", {integer, 3}, "the maximum number of generated config files to keep"} +]. + +%% LOL! I wanted this to be halt 0, but honestly, if this escript does anything +%% except return the path to a generated config file, it should return a non-zero +%% return code +print_help() -> + getopt:usage(cli_options(), + escript:script_name()), + stop_deactivate(). + +parse_and_command(Args) -> + {ParsedArgs, Extra} = case getopt:parse(cli_options(), Args) of + {ok, {P, H}} -> {P, H}; + _ -> {[help], []} + end, + {Command, ExtraArgs} = case {lists:member(help, ParsedArgs), Extra} of + {false, []} -> {generate, []}; + {false, [Cmd|E]} -> {list_to_atom(Cmd), E}; + _ -> {help, []} + end, + {Command, ParsedArgs, ExtraArgs}. + +%% @doc main method for generating erlang term config files +main(Args) -> + _ = application:load(lager), + + {Command, ParsedArgs, Extra} = parse_and_command(Args), + + SuggestedLogLevel = list_to_atom(proplists:get_value(log_level, ParsedArgs)), + LogLevel = case lists:member(SuggestedLogLevel, [debug, info, notice, warning, error, critical, alert, emergency]) of + true -> SuggestedLogLevel; + _ -> notice + end, + + application:set_env(lager, handlers, [{lager_stderr_backend, LogLevel}]), + application:set_env(lager, crash_log, false), + lager:start(), + lager:debug("Cuttlefish set to debug level logging"), + + case Command of + help -> + print_help(); + generate -> + generate(ParsedArgs); + effective -> + effective(ParsedArgs); + describe -> + describe(ParsedArgs, Extra); + _Other -> + print_help() + end. + +%% This shows the effective configuration, including defaults +effective(ParsedArgs) -> + lager:debug("cuttlefish `effective`", []), + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + %% Should we even show this? + {AppConfigExists, ExistingAppConfigName} = check_existence(EtcDir, "app.config"), + {VMArgsExists, ExistingVMArgsName} = check_existence(EtcDir, "vm.args"), + + case {AppConfigExists, VMArgsExists} of + {false, false} -> + AdvancedConfigFile = filename:join(EtcDir, "advanced.config"), + AdvConfig = case filelib:is_file(AdvancedConfigFile) of + true -> + lager:debug("~s/advanced.config detected, overlaying proplists", [EtcDir]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + AdvancedConfig; + {error, Error} -> + lager:error("Error parsing advanced.config: ~s", [file:format_error(Error)]), + stop_deactivate() + end; + _ -> + [] + end, + + EffectiveConfig = cuttlefish_effective:build( + load_conf(ParsedArgs), + load_schema(ParsedArgs), + AdvConfig), + _ = [ ?STDOUT(Line, []) || Line <- EffectiveConfig], + ok; + _ -> + ?STDOUT("Disabling cuttlefish, legacy configuration files found:", []), + case AppConfigExists of + true -> + ?STDOUT(" ~s", [ExistingAppConfigName]); + _ -> + ok + end, + case VMArgsExists of + true -> + ?STDOUT(" ~s", [ExistingVMArgsName]); + _ -> + ok + end, + ?STDOUT("Effective config is only visible for cuttlefish conf files.", []) + end, + ok. + +%% This is the function that dumps the docs for a single setting +describe(_ParsedArgs, []) -> + %% No query, you get nothing. + ?STDOUT("cuttlefish's describe command required a variable to query.", []), + ?STDOUT("Try `describe setting.name`", []), + stop_deactivate(); +describe(ParsedArgs, [Query|_]) when is_list(Query) -> + QDef = cuttlefish_variable:tokenize(Query), + + lager:debug("cuttlefish describe '~s'", [Query]), + {_, Mappings, _} = load_schema(ParsedArgs), + + FindResults = fun(QueryVar) -> + lists:filter( + fun(X) -> + cuttlefish_variable:is_fuzzy_match(QueryVar, cuttlefish_mapping:variable(X)) + end, + Mappings) + end, + + case FindResults(QDef) of + [] -> + ?STDOUT("Variable '~s' not found", [Query]); + [Match|_] -> + ?STDOUT("Documentation for ~s", [cuttlefish_variable:format(cuttlefish_mapping:variable(Match))]), + _ = case {cuttlefish_mapping:doc(Match), cuttlefish_mapping:see(Match)} of + {[], []} -> + ok; + {[], See} -> + _ = [ begin + M = hd(FindResults(S)), + [ ?STDOUT("~s", [Line]) || Line <- cuttlefish_mapping:doc(M)] + end || S <- See], + ok; + {Docs, []} -> + [ ?STDOUT("~s", [Line]) || Line <- Docs]; + {Docs, See} -> + _ = [ ?STDOUT("~s", [Line]) || Line <- Docs], + ?STDOUT("See also:", []), + [?STDOUT(" ~s", [cuttlefish_variable:format(S)]) || S <- See] + end, + ?STDOUT("", []), + ValidValues = [ + ?FORMAT("~n - ~s", [cuttlefish_conf:pretty_datatype(Type)]) || + Type <- lists:flatten([cuttlefish_mapping:datatype(Match)]) ], + ?STDOUT(" Valid Values: ~s", [ValidValues]), + case cuttlefish_mapping:has_default(Match) of + true -> + ?STDOUT(" Default Value : ~s", + [format_datatype(cuttlefish_mapping:default(Match), + cuttlefish_mapping:datatype(Match))]); + false -> + ?STDOUT(" No default set", []) + end, + Conf = load_conf(ParsedArgs), + case lists:keyfind(QDef, 1, Conf) of + false -> + ConfFile = proplists:get_value(conf_file, ParsedArgs), + ?STDOUT(" Value not set in ~s", [ConfFile]); + {_, CValue} -> + ConfiguredValue = format_datatype(CValue, cuttlefish_mapping:datatype(Match)), + ?STDOUT(" Set Value : ~s", [ConfiguredValue]) + end, + ?STDOUT(" Internal key : ~s", [cuttlefish_mapping:mapping(Match)]) + end, + stop_deactivate(). + +-ifndef(TEST). +stop_deactivate() -> + init:stop(1), + timer:sleep(250), + stop_deactivate(). + +stop_ok() -> + init:stop(0). +-endif. + +-ifdef(TEST). +%% In test mode we don't want to kill the test VM prematurely. +stop_deactivate() -> + throw(stop_deactivate). + +stop_ok() -> + ok. +-endif. + +generate(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + {AppConfigExists, ExistingAppConfigName} = check_existence(EtcDir, "app.config"), + {VMArgsExists, ExistingVMArgsName} = check_existence(EtcDir, "vm.args"), + + %% If /etc/app.config exists, use it and disable cuttlefish + %% even though cuttlefish is awesome + FilesToUse = case {AppConfigExists, VMArgsExists} of + {true, true} -> + lager:info("~s and ~s exists, disabling cuttlefish.", [ExistingAppConfigName, ExistingVMArgsName]), + lager:info("If you'd like to know more about cuttlefish, check your local library!", []), + lager:info(" or see http://github.com/basho/cuttlefish", []), + {ExistingAppConfigName, ExistingVMArgsName}; + {true, false} -> + lager:info("~s exists, generating vm.args", [ExistingAppConfigName]), + {_, NewVMArgs} = engage_cuttlefish(ParsedArgs), + {ExistingAppConfigName, NewVMArgs}; + {false, true} -> + lager:info("~s exists, generating app.config", [ExistingVMArgsName]), + {NewAppConfig, _} = engage_cuttlefish(ParsedArgs), + {NewAppConfig, ExistingVMArgsName}; + _ -> + lager:info("No app.config or vm.args detected in ~s, activating cuttlefish", [EtcDir]), + engage_cuttlefish(ParsedArgs) + end, + + case FilesToUse of + %% this is nice and all, but currently all error paths of engage_cuttlefish end with + %% stop_deactivate() hopefully factor that to be cleaner. + error -> + stop_deactivate(); + {AppConf, VMArgs} -> + %% Note: we have added a parameter '-vm_args' to this. It appears redundant + %% but it is not! the erlang vm allows us to access all arguments to the erl + %% command EXCEPT '-args_file', so in order to get access to this file location + %% from within the vm, we need to pass it in twice. + ?STDOUT(" -config ~s -args_file ~s -vm_args ~s ", [AppConf, VMArgs, VMArgs]), + stop_ok() + end. + +load_schema(ParsedArgs) -> + SchemaDir = proplists:get_value(schema_dir, ParsedArgs), + + SchemaDirFiles = case SchemaDir of + undefined -> []; + _ -> [ filename:join(SchemaDir, Filename) || Filename <- filelib:wildcard("*.schema", SchemaDir)] + end, + IndividualSchemaFiles = proplists:get_all_values(schema_file, ParsedArgs), + SchemaFiles = SchemaDirFiles ++ IndividualSchemaFiles, + + SortedSchemaFiles = lists:sort(fun(A,B) -> A < B end, SchemaFiles), + case length(SortedSchemaFiles) of + 0 -> + lager:debug("No Schema files found in specified", []), + stop_deactivate(); + _ -> + lager:debug("SchemaFiles: ~p", [SortedSchemaFiles]) + end, + + Schema = cuttlefish_schema:files(SortedSchemaFiles), + case proplists:is_defined(print_schema, ParsedArgs) of + true -> + _ = print_schema(Schema), + Schema; + _ -> + Schema + end. + +load_conf(ParsedArgs) -> + ConfFiles = proplists:get_all_values(conf_file, ParsedArgs), + lager:debug("ConfFiles: ~p", [ConfFiles]), + case cuttlefish_conf:files(ConfFiles) of + {errorlist, Errors} -> + _ = [ lager:error(cuttlefish_error:xlate(E)) || + {error, E} <- Errors], + stop_deactivate(), + {errorlist, Errors}; + GoodConf -> + GoodConf + end. + +-spec writable_destination_path([proplists:property()]) -> file:filename() | error. +writable_destination_path(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + DestinationPath = proplists:get_value(dest_dir, ParsedArgs, filename:join(EtcDir, "generated")), + AbsoluteDestPath = case DestinationPath of + [$/|_] -> DestinationPath; + _ -> filename:join(element(2,file:get_cwd()), DestinationPath) + end, + %% Check Permissions + case filelib:ensure_dir(filename:join(AbsoluteDestPath, "weaksauce.dummy")) of + %% filelib:ensure_dir/1 requires a dummy filename in the argument, + %% I think that is weaksauce, hence "weaksauce.dummy" + ok -> + AbsoluteDestPath; + {error, E} -> + lager:error( + "Error creating ~s: ~s", + [AbsoluteDestPath, file:format_error(E)]), + error + end. + +-spec engage_cuttlefish([proplists:property()]) -> {string(), string()} | error. +engage_cuttlefish(ParsedArgs) -> + EtcDir = proplists:get_value(etc_dir, ParsedArgs), + + AbsPath = case writable_destination_path(ParsedArgs) of + error -> + stop_deactivate(), + error; + Path -> Path + end, + + Date = calendar:local_time(), + + DestinationFilename = filename_maker(proplists:get_value(dest_file, ParsedArgs), Date, "config"), + Destination = filename:join(AbsPath, DestinationFilename), + + DestinationVMArgsFilename = filename_maker("vm", Date, "args"), + DestinationVMArgs = filename:join(AbsPath, DestinationVMArgsFilename), + + lager:debug("Generating config in: ~p", [Destination]), + + Schema = load_schema(ParsedArgs), + + Conf = load_conf(ParsedArgs), + NewConfig = case cuttlefish_generator:map(Schema, Conf) of + {error, Phase, {errorlist, Errors}} -> + lager:error("Error generating configuration in phase ~s", [Phase]), + _ = [ cuttlefish_error:print(E) || E <- Errors], + stop_deactivate(); + ValidConfig -> ValidConfig + end, + + AdvancedConfigFile = filename:join(EtcDir, "advanced.config"), + FinalConfig = case filelib:is_file(AdvancedConfigFile) of + true -> + lager:info("~s/advanced.config detected, overlaying proplists", [EtcDir]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(NewConfig, AdvancedConfig); + {ok, OtherTerms} -> + lager:error("Error parsing ~s, incorrect format: ~p", [AdvancedConfigFile, OtherTerms]), + stop_deactivate(); + {error, Error} -> + lager:error("Error parsing ~s: ~s", [AdvancedConfigFile, file:format_error(Error)]), + stop_deactivate() + end; + _ -> + %% Nothing to see here, these aren't the droids you're looking for. + NewConfig + end, + + case FinalConfig of + {error, _X} -> + error; + _ -> + FinalAppConfig = proplists:delete(vm_args, FinalConfig), + FinalVMArgs = cuttlefish_vmargs:stringify(proplists:get_value(vm_args, FinalConfig)), + + %% Prune excess files + MaxHistory = proplists:get_value(max_history, ParsedArgs, 3) - 1, + prune(Destination, MaxHistory), + prune(DestinationVMArgs, MaxHistory), + + case { file:write_file(Destination, io_lib:fwrite("~p.\n",[FinalAppConfig])), + file:write_file(DestinationVMArgs, string:join(FinalVMArgs, "\n"))} of + {ok, ok} -> + {Destination, DestinationVMArgs}; + {Err1, Err2} -> + maybe_log_file_error(Destination, Err1), + maybe_log_file_error(DestinationVMArgs, Err2), + error + end + + end. + +-spec prune(file:name_all(), integer()) -> ok. +prune(Filename, MaxHistory) -> + %% A Filename comes in /Abs/Path/To/something.YYYY.MM.DD.HH.mm.SS.ext + %% We want `ls /Abs/Path/To/something.*.ext and delete all but the most + %% recent MaxHistory + Path = filename:dirname(Filename), + Ext = filename:extension(Filename), + Base = hd(string:tokens(filename:basename(Filename, Ext), ".")), + Files = + lists:sort(filelib:wildcard(Base ++ ".*" ++ Ext, Path)), + + delete([ filename:join([Path, F]) || F <- Files], MaxHistory), + ok. + +-spec delete(file:name_all(), integer()) -> ok. +delete(Files, MaxHistory) when length(Files) =< MaxHistory -> + ok; +delete([File|Files], MaxHistory) -> + case file:delete(File) of + ok -> ok; + {error, Reason} -> + lager:error("Could not delete ~s, ~p", [File, Reason]) + end, + delete(Files, MaxHistory). + +-spec maybe_log_file_error( + file:filename(), ok | + {error, file:posix() %% copied from file:format_error/1 + | badarg + | terminated + | system_limit + | { integer(), module(), term() }}) -> ok. +maybe_log_file_error(_, ok) -> + ok; +maybe_log_file_error(Filename, {error, Reason}) -> + lager:error("Error writing ~s: ~s", [Filename, file:format_error(Reason)]), + ok. + +-spec check_existence(string(), string()) -> {boolean(), string()}. +check_existence(EtcDir, Filename) -> + FullName = filename:join(EtcDir, Filename), %% Barfolomew + Exists = filelib:is_file(FullName), + lager:info("Checking ~s exists... ~p", [FullName, Exists]), + {Exists, FullName}. + +filename_maker(Filename, Date, Extension) -> + {{Y, M, D}, {HH, MM, SS}} = Date, + _DestinationFilename = + io_lib:format("~s.~p.~s.~s.~s.~s.~s.~s", + [Filename, + Y, + zero_pad(M), + zero_pad(D), + zero_pad(HH), + zero_pad(MM), + zero_pad(SS), + Extension + ]). + +zero_pad(Integer) -> + S = integer_to_list(Integer), + case Integer > 9 of + true -> S; + _ -> [$0|S] + end. + +print_schema(Schema) -> + lager:info("Printing Schema Mappings"), + {_, Mappings, _} = Schema, + + {Max, ListOfMappings} = lists:foldr( + fun(M, {OldMax, List}) -> + CandidateMax = length(cuttlefish_mapping:mapping(M)), + NewMax = case CandidateMax > OldMax of + true -> CandidateMax; + _ -> OldMax + end, + {NewMax, [{cuttlefish_mapping:mapping(M), cuttlefish_variable:format(cuttlefish_mapping:variable(M))}|List]} + end, + {0, []}, + Mappings + ), + [ + io:format(standard_error, "~s ~s~n", + [string:left(M, Max+2, $\s), V]) + || {M, V} <- ListOfMappings]. + +format_datatype(Value, Datatypes) when is_list(Datatypes) -> + %% We're not sure which datatype the default or set value is going + %% to match, so let's find one that does. + [H|_] = lists:dropwhile( + fun(D0) -> + D = cuttlefish_datatypes:extended_from(D0), + case cuttlefish_datatypes:from_string(Value, D) of + {error, _} -> true; + _ -> false + end + end, Datatypes), + format_datatype(Value, cuttlefish_datatypes:extended_from(H)); +format_datatype(Value, Datatype) -> + cuttlefish_datatypes:to_string(cuttlefish_datatypes:from_string(Value, Datatype), Datatype). + + +-ifdef(TEST). + +zero_pad_test() -> + ?assertEqual("00", zero_pad(0)), + ?assertEqual("01", zero_pad(1)), + ?assertEqual("02", zero_pad(2)), + ?assertEqual("03", zero_pad(3)), + ?assertEqual("04", zero_pad(4)), + ?assertEqual("05", zero_pad(5)), + ?assertEqual("06", zero_pad(6)), + ?assertEqual("07", zero_pad(7)), + ?assertEqual("08", zero_pad(8)), + ?assertEqual("09", zero_pad(9)), + ?assertEqual("10", zero_pad(10)), + ?assertEqual("11", zero_pad(11)), + ?assertEqual("12", zero_pad(12)), + ok. + + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_flag.erl b/deps/cuttlefish/src/cuttlefish_flag.erl new file mode 100644 index 0000000..c37ce15 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_flag.erl @@ -0,0 +1,93 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_flag: datatype for simple boolean settings with +%% customizable names and values +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_flag). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + parse/1, + parse/2, + to_string/2 + ]). + +-define(FMT(F, A), lists:flatten(io_lib:format(F, A))). + +parse(Value) -> + cuttlefish_enum:parse(Value, to_enum(flag)). +parse(Value, Flag) -> + cuttlefish_enum:parse(Value, to_enum(Flag)). + +to_string(Value, Flag) -> + cuttlefish_enum:to_string(Value, to_enum(Flag)). + +to_enum({flag, {On, OnValue}, {Off, OffValue}}) -> + {enum, [{On, OnValue}, {Off, OffValue}]}; +to_enum({flag, On, Off}) -> + {enum, [{On, true}, {Off, false}]}; +to_enum(flag) -> + {enum, [{on, true}, {off, false}]}. + +-ifdef(TEST). +parse_test() -> + ?assertEqual(true, parse("on")), + ?assertEqual(false, parse("off")), + ?assertEqual(true, parse("enabled", {flag, enabled, disabled})), + ?assertEqual(false, parse("disabled", {flag, enabled, disabled})), + ?assertEqual(tyk, parse("on", {flag, {on, tyk}, {off, torp}})), + ?assertEqual(torp, parse("off", {flag, {on, tyk}, {off, torp}})), + ?assertEqual({long, tuple, value}, + parse("foo", {flag, {simple, ok}, + {foo, {long, tuple, value}}})), + ?assertEqual(ok, + parse("simple", {flag, {simple, ok}, + {foo, {long, tuple, value}}})). + +to_string_test() -> + ?assertEqual(to_string(true, flag), "on"), + ?assertEqual(to_string(on, flag), "on"), + ?assertEqual(to_string(false, flag), "off"), + ?assertEqual(to_string(off, flag), "off"), + ?assertEqual(to_string(true, {flag, enabled, disabled}), "enabled"), + ?assertEqual(to_string(enabled, {flag, enabled, disabled}), "enabled"), + ?assertEqual(to_string(false, {flag, enabled, disabled}), "disabled"), + ?assertEqual(to_string(disabled, {flag, enabled, disabled}), "disabled"), + ?assertEqual(to_string(tyk, {flag, {on, tyk}, {off, torp}}), "on"), + ?assertEqual(to_string(on, {flag, {on, tyk}, {off, torp}}), "on"), + ?assertEqual(to_string(torp, {flag, {on, tyk}, {off, torp}}), "off"), + ?assertEqual(to_string(off, {flag, {on, tyk}, {off, torp}}), "off"), + ?assertEqual(to_string({long, tuple, value}, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "foo"), + ?assertEqual(to_string(foo, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "foo"), + ?assertEqual(to_string(ok, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "simple"), + ?assertEqual(to_string(simple, {flag, {simple, ok}, + {foo, {long, tuple, value}}}), + "simple"). +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_generator.erl b/deps/cuttlefish/src/cuttlefish_generator.erl new file mode 100644 index 0000000..3016302 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_generator.erl @@ -0,0 +1,1218 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_generator: this is where the action is +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_generator). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-define(FMT(F,A), lists:flatten(io_lib:format(F,A))). + +-define(LSUB, "$("). +-define(RSUB, ")"). +-define(LSUBLEN, 2). +-define(RSUBLEN, 1). + +-export([map/2, find_mapping/2, add_defaults/2, minimal_map/2]). + +-spec map(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map(Schema, Config) -> + map_add_defaults(Schema, Config). + +%% @doc Generates an Erlang config that only includes the settings +%% encompassed by the passed Config, excluding defaults from the +%% schema for unspecified settings. +-spec minimal_map(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | {error, atom(), cuttlefish_error:errorlist()}. +minimal_map({AllTranslations,AllMappings,V}, Config) -> + ConfigKeys = sets:from_list([K || {K, _} <- Config]), + {RestrictedMappings, MappingKeys} = lists:foldr(fun(M,Acc) -> + restrict_mappings(M, Acc, ConfigKeys) + end, {[], sets:new()}, AllMappings), + RestrictedTranslations = [ T || T <- AllTranslations, + sets:is_element(cuttlefish_translation:mapping(T), MappingKeys)], + map({RestrictedTranslations,RestrictedMappings,V}, Config). + +restrict_mappings(M, {Mappings, Keys}, ConfigKeys) -> + case sets:is_element(cuttlefish_mapping:variable(M), ConfigKeys) of + true -> + {[M|Mappings], sets:add_element(cuttlefish_mapping:mapping(M), Keys)}; + false -> + {Mappings, Keys} + end. + +-spec map_add_defaults(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_add_defaults({_, Mappings, _} = Schema, Config) -> + %% Config at this point is just what's in the .conf file. + %% add_defaults/2 rolls the default values in from the schema + lager:debug("Adding Defaults"), + DConfig = add_defaults(Config, Mappings), + case cuttlefish_error:errorlist_maybe(DConfig) of + {errorlist, EList} -> + {error, add_defaults, {errorlist, EList}}; + _ -> + map_value_sub(Schema, DConfig) + end. + +-spec map_value_sub(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_value_sub(Schema, Config) -> + lager:debug("Right Hand Side Substitutions"), + case value_sub(Config) of + {SubbedConfig, []} -> + map_transform_datatypes(Schema, SubbedConfig); + {_, EList} -> + {error, rhs_subs, {errorlist, EList}} + end. + +-spec map_transform_datatypes(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_transform_datatypes({_, Mappings, _} = Schema, DConfig) -> + %% Everything in DConfig is of datatype "string", + %% transform_datatypes turns them into other erlang terms + %% based on the schema + lager:debug("Applying Datatypes"), + case transform_datatypes(DConfig, Mappings) of + {NewConf, []} -> + map_validate(Schema, NewConf); + {_, EList} -> + {error, transform_datatypes, {errorlist, EList}} + end. + +-spec map_validate(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +map_validate(Schema, Conf) -> + %% Any more advanced validators + lager:debug("Validation"), + case cuttlefish_error:errorlist_maybe(run_validations(Schema, Conf)) of + {errorlist, EList} -> + {error, validation, {errorlist, EList}}; + true -> + {DirectMappings, TranslationsToDrop} = apply_mappings(Schema, Conf), + apply_translations(Schema, Conf, DirectMappings, TranslationsToDrop) + end. + +-spec apply_mappings(cuttlefish_schema:schema(), cuttlefish_conf:conf()) -> + {[proplists:property()], [string()]}. +apply_mappings({Translations, Mappings, _Validators}, Conf) -> + %% This fold handles 1:1 mappings, that have no cooresponding translations + %% The accumlator is the app.config proplist that we start building from + %% these 1:1 mappings, hence the return "DirectMappings". + %% It also builds a list of "TranslationsToDrop". It's basically saying that + %% if a user didn't actually configure this setting in the .conf file and + %% there's no default in the schema, then there won't be enough information + %% during the translation phase to succeed, so we'll earmark it to be skipped + {DirectMappings, {TranslationsToMaybeDrop, TranslationsToKeep}} = lists:foldr( + fun(MappingRecord, {ConfAcc, {MaybeDrop, Keep}}) -> + Mapping = cuttlefish_mapping:mapping(MappingRecord), + Default = cuttlefish_mapping:default(MappingRecord), + Variable = cuttlefish_mapping:variable(MappingRecord), + case { + Default =/= undefined orelse cuttlefish_conf:is_variable_defined(Variable, Conf), + lists:any( + fun(T) -> + cuttlefish_translation:mapping(T) =:= Mapping + end, + Translations) + } of + {true, false} -> + Tokens = cuttlefish_variable:tokenize(Mapping), + NewValue = proplists:get_value(Variable, Conf), + {set_value(Tokens, ConfAcc, NewValue), + {MaybeDrop, ordsets:add_element(Mapping,Keep)}}; + {true, true} -> + {ConfAcc, {MaybeDrop, ordsets:add_element(Mapping,Keep)}}; + _ -> + {ConfAcc, {ordsets:add_element(Mapping,MaybeDrop), Keep}} + end + end, + {[], {ordsets:new(),ordsets:new()}}, + Mappings), + lager:debug("Applied 1:1 Mappings"), + + TranslationsToDrop = TranslationsToMaybeDrop -- TranslationsToKeep, + {DirectMappings, TranslationsToDrop}. + +-spec apply_translations(cuttlefish_schema:schema(), cuttlefish_conf:conf(), [proplists:property()], [string()]) -> + [proplists:property()] | + {error, atom(), cuttlefish_error:errorlist()}. +apply_translations({Translations, _, _} = Schema, Conf, DirectMappings, TranslationsToDrop) -> + %% The fold handles the translations. After we've build the DirectMappings, + %% we use that to seed this fold's accumulator. As we go through each translation + %% we write that to the `app.config` that lives in the accumutator. + {Proplist, Errorlist} = lists:foldl(fold_apply_translation(Conf, Schema, TranslationsToDrop), + {DirectMappings, []}, Translations), + case Errorlist of + [] -> + lager:debug("Applied Translations"), + Proplist; + Es -> + {error, apply_translations, {errorlist, Es}} + end. + + +fold_apply_translation(Conf, Schema, TranslationsToDrop) -> + fun(TranslationRecord, {Acc, Errors}) -> + Mapping = cuttlefish_translation:mapping(TranslationRecord), + Xlat = cuttlefish_translation:func(TranslationRecord), + case lists:member(Mapping, TranslationsToDrop) of + false -> + {XlatFun, XlatArgs} = prepare_translation_fun(Conf, Schema, + Mapping, Xlat), + lager:debug("Running translation for ~s", [Mapping]), + case try_apply_translation(Mapping, XlatFun, XlatArgs) of + unset -> + {Acc, Errors}; + {set, NewValue} -> + {set_value(cuttlefish_variable:tokenize(Mapping), Acc, NewValue), Errors}; + {error, Term} -> + {Acc, [{error, Term}|Errors]} + end; + _ -> + lager:debug("~p in Translations to drop...", [Mapping]), + {Acc, Errors} + end + end. + +prepare_translation_fun(Conf, Schema, Mapping, Xlat) -> + case proplists:get_value(arity, erlang:fun_info(Xlat)) of + 1 -> {Xlat, [Conf]}; + 2 -> {Xlat, [Conf, Schema]}; + OtherArity -> + {fun(_) -> + {error, {translation_arity, {Mapping, OtherArity}}} + end, error} + end. + +try_apply_translation(Mapping, XlatFun, XlatArgs) -> + try erlang:apply(XlatFun, XlatArgs) of + {ok, Value} -> + {set, Value}; + X -> + {set, X} + catch + %% cuttlefish:conf_get/2 threw not_found + throw:{not_found, NotFound} -> + {error, {translation_missing_setting, + {Mapping, cuttlefish_variable:format(NotFound)}}}; + %% For explicitly omitting an output setting. + %% See cuttlefish:unset/0 + throw:unset -> + unset; + %% For translations that found invalid + %% settings, even after mapping. See + %% cuttlefish:invalid/1. + throw:{invalid, Invalid} -> + {error, {translation_invalid_configuration, + {Mapping, Invalid}}}; + %% Any unknown error, perhaps caused by stdlib + %% stuff. + E:R -> + {error, {translation_unknown_error, + {Mapping, {E, R}}}} + end. + +%for each token, is it special? +% +%if yes, special processing +%if no, recurse into this with the value from the proplist and tail of tokens +% +%unless the tail of tokens is [] + +%% This is the last token, so things ends with replacing the proplist value. +set_value([LastToken], Acc, NewValue) -> + cuttlefish_util:replace_proplist_value(list_to_atom(LastToken), NewValue, Acc); +%% This is the case of all but the last token. +%% recurse until you hit a leaf. +set_value([HeadToken|MoreTokens], PList, NewValue) -> + Token = list_to_atom(HeadToken), + OldValue = proplists:get_value(Token, PList, []), + cuttlefish_util:replace_proplist_value( + Token, + set_value(MoreTokens, OldValue, NewValue), + PList). + +%% @doc adds default values from the schema when something's not +%% defined in the Conf, to give a complete app.config +add_defaults(Conf, Mappings) -> + Prefixes = get_possible_values_for_fuzzy_matches(Conf, Mappings), + + lists:foldl( + fun(MappingRecord, Acc) -> + case cuttlefish_mapping:has_default(MappingRecord) of + false -> Acc; + true -> add_default(Conf, Prefixes, MappingRecord, Acc) + end + end, + Conf, Mappings). + +add_default(Conf, Prefixes, MappingRecord, Acc) -> + Default = cuttlefish_mapping:default(MappingRecord), + VariableDef = cuttlefish_mapping:variable(MappingRecord), + IsFuzzyMatch = cuttlefish_mapping:is_fuzzy_variable(MappingRecord), + IsStrictMatch = lists:keymember(VariableDef, 1, Conf), + + %% No, then plug in the default + case {IsStrictMatch, IsFuzzyMatch} of + %% Strict match means we have the setting already + {true, false} -> Acc; + + %% If IsStrictMatch =:= false, IsFuzzyMatch =:= true, we've got a setting, but + %% it's part of a complex data structure. + {false, true} -> + add_fuzzy_default(Prefixes, Acc, Default, VariableDef); + + %% If Match =:= FuzzyMatch =:= false, use the default, key not set in .conf + {false, false} -> [{VariableDef, Default}|Acc]; + + %% If Match =:= true, do nothing, the value is set in the .conf file + _ -> + %% TODO: Handle with more style and grace + lager:error("Both fuzzy and strict match! should not happen"), + [{error, {map_multiple_match, VariableDef}}|Acc] + end. + +is_strict_prefix([H|T1], [H|T2]) -> + is_strict_prefix(T1, T2); +is_strict_prefix([], [H2|_]) when hd(H2) =:= $$ -> + true; +is_strict_prefix(_, _) -> + false. + +add_fuzzy_default(Prefixes, Conf, Default, VariableDef) -> + PotentialMatch = lists:dropwhile(fun({Prefix, _}) -> + not is_strict_prefix(Prefix, VariableDef) + end, Prefixes), + case PotentialMatch of + %% None of the prefixes match, so we don't generate a default. + [] -> Conf; + [{_Prefix, Substitutions}|_] -> + %% This means that we found the key. + %% ToAdd will be the list of all the things we're adding to the defaults. + %% So, let's say you have the following mappings defined: + %% namespace.$named_thing.a + %% namespace.$named_thing.b + %% namespace.$named_thing.c + + %% and in your conf, you defined the following: + %% namespace.strong_bad.a = 10 + %% namespace.senor_cardgage.b = percent_sign + %% namespace.trogdor.c = burninate + + %% Well, Prefixes would look like this: + %% [{"namespace", ["strong_bad", "senor_cardgage", "trogdor"]}] + + %% The ToAdd list comp is going through and saying: ok, I know there are + %% defaults for namespace.$named_thing.a, b, and c. And I know the possible + %% values of $named_thing are strong_bad, senor_cardgage, and trogdor. + %% so I want to ensure that there are values for the following: + %% + %% namespace.strong_bad.a + %% namespace.strong_bad.b + %% namespace.strong_bad.c + %% namespace.senor_cardgage.a + %% namespace.senor_cardgage.b + %% namespace.senor_cardgage.c + %% namespace.trogdor.a + %% namespace.trogdor.b + %% namespace.trogdor.c + + %% So, we go through the List of possible substitutions + %% and apply the substitution to the variable. If it + %% already exists in the Conf, then we skip it, otherwise + %% we include the Default value. + ToAdd = [ {VariableToAdd, Default} + || Subst <- Substitutions, + VariableToAdd <- [cuttlefish_variable:replace_match(VariableDef, Subst)], + not lists:keymember(VariableToAdd, 1, Conf)], + Conf ++ ToAdd + end. + +%%%%%%%%%%%%%%%%%%%%%%%% +%% Prefixes is the thing we need for defaults of named keys +%% it looks like this: +%% +%% Prefixes: [{"riak_control.user",["user"]}, +%% {"listener.https",["internal"]}, +%% {"listener.protobuf",["internal"]}, +%% {"listener.http",["internal"]}, +%% {"multi_backend", +%% ["bitcask_mult","leveldb_mult","leveldb_mult2","memory_mult"}] +%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_possible_values_for_fuzzy_matches(cuttlefish_conf:conf(), [cuttlefish_mapping:mapping()]) -> [{string(), [string()]}]. +get_possible_values_for_fuzzy_matches(Conf, Mappings) -> + %% Now, get all the variables that could match, i.e. all the names + %% it found referenced in the Conf proplist. It may look something + %% like this: [{"n",["ck","ak","bk"]}] + lists:foldl( + fun(Mapping, FuzzyMatches) -> + case cuttlefish_mapping:is_fuzzy_variable(Mapping) of + false -> FuzzyMatches; %% Strict match + true -> + %% Fuzzy match, extract the matching settings from the conf + VD = cuttlefish_mapping:variable(Mapping), + ListOfVars = [Var || {_, Var} <- cuttlefish_variable:fuzzy_matches(VD, Conf)], + {Prefix, _, _} = cuttlefish_variable:split_on_match(VD), + orddict:append_list(Prefix, ListOfVars, FuzzyMatches) + end + end, + orddict:new(), + Mappings). + +-spec transform_datatypes( + cuttlefish_conf:conf(), + [cuttlefish_mapping:mapping()] + ) -> {cuttlefish_conf:conf(), [cuttlefish_error:error()]}. +transform_datatypes(Conf, Mappings) -> + lists:foldl( + fun({Variable, Value}, {Acc, ErrorAcc}) -> + %% Look up mapping from schema + case find_mapping(Variable, Mappings) of + {error, _} -> + %% So, this error message isn't so performant (s/o @argv0) + %% but it shouldn't happen too often, and I think it's important + %% to give users this feedback. + + %% It will prevent anything from starting, and will let you know + %% that you're trying to set something that has no effect + VarName = cuttlefish_variable:format(Variable), + lager:error("You've tried to set ~s, but there is no setting with that name.", [VarName]), + lager:error(" Did you mean one of these?"), + + Possibilities = [ begin + MapVarName = cuttlefish_variable:format(cuttlefish_mapping:variable(M)), + {cuttlefish_util:levenshtein(VarName, MapVarName), MapVarName} + end || M <- Mappings], + Sorted = lists:sort(Possibilities), + _ = [ lager:error(" ~s", [T]) || {_, T} <- lists:sublist(Sorted, 3) ], + {Acc, [ {error, {unknown_variable, VarName}} | ErrorAcc ]}; + MappingRecord -> + DTs = cuttlefish_mapping:datatype(MappingRecord), + + %% DTs is a list now, which means we'll receive an + %% errorlist, not a single error + case transform_type(DTs, Value) of + {ok, NewValue} -> + {[{Variable, NewValue}|Acc], ErrorAcc}; + {errorlist, EList} -> + NewError = {transform_type, + cuttlefish_variable:format(Variable)}, + {Acc, [{error, NewError}] ++ EList ++ ErrorAcc} + end + end + end, + {[], []}, + Conf). + +-spec value_sub(cuttlefish_conf:conf()) -> {cuttlefish_conf:conf(), [cuttlefish_error:error()]}. +value_sub(Conf) -> + lists:foldr( + fun({Var, Val}, {Acc, ErrorAcc}) -> + case value_sub(Var, Val, Conf) of + {error, _E} = Error -> {Acc, [Error|ErrorAcc]}; + {NewVal, _NewConf} -> {[{Var, NewVal}|Acc], ErrorAcc} + end + end, + {[],[]}, + Conf). + +-spec value_sub(cuttlefish_variable:variable(), + string(), + cuttlefish_conf:conf()) -> + {string(), cuttlefish_conf:conf()} | cuttlefish_error:error(). +value_sub(Var, Value, Conf) -> + value_sub(Var, Value, Conf, []). + +-spec value_sub(cuttlefish_variable:variable(), + string(), + cuttlefish_conf:conf(), + [string()]) -> + {string(), cuttlefish_conf:conf()} | cuttlefish_error:error(). +value_sub(Var, Value, Conf, History) when is_list(Value) -> + %% Check if history contains duplicates. if so error + case erlang:length(History) == sets:size(sets:from_list(History)) of + false -> + {error, {circular_rhs, History}}; + _ -> + case head_sub(Value) of + none -> {Value, Conf}; + {sub, NextVar, {SubFront, SubBack}} -> + case proplists:get_value(NextVar, Conf) of + undefined -> + {error, {substitution_missing_config, + {cuttlefish_variable:format(Var), + cuttlefish_variable:format(NextVar)}}}; + SubVal -> + %% Do a sub-subsitution, in case the substituted + %% value contains substitutions itself. Do this as + %% its own seperate recursion so that circular + %% subtitutions can be detected. + case value_sub(NextVar, SubVal, Conf, [Var|History]) of + {error, _} = Error -> + Error; + {NewSubVal, NewConf} -> + NewValue = SubFront ++ NewSubVal ++ SubBack, + value_sub(Var, NewValue, NewConf, History) + end + end + end + end; +value_sub(_Var, Value, Conf, _History) -> + {Value, Conf}. + +-spec head_sub(string()) -> none | {sub, cuttlefish_variable:variable(), {string(), string()}}. +head_sub(Value) -> + L = string:str(Value, ?LSUB), + case L > 0 of + false -> + none; + _ -> + R = string:str(string:substr(Value, L + ?RSUBLEN), ?RSUB) + L, + case L < R of + false -> + none; + _ -> + Var = cuttlefish_variable:tokenize(string:strip(string:substr(Value, L+?LSUBLEN, R-L-?LSUBLEN))), + Front = string:substr(Value, 1, L-1), + Back = string:substr(Value, R+?RSUBLEN), + {sub, Var, {Front, Back}} + end + end. + +%% If transform_type takes a list as first argument, foldm_either will +%% give us back an errorlist for a single error +-spec transform_type(cuttlefish_datatypes:datatype_list() | cuttlefish_datatypes:datatype(), term()) -> + {ok, term()} | cuttlefish_error:error() | cuttlefish_error:errorlist(). +transform_type(DTs, Value) when is_list(DTs) -> + foldm_either(fun(DT) -> transform_type(DT, Value) end, DTs); + +transform_type(DT, Value) -> + Supported = cuttlefish_datatypes:is_supported(DT), + Extended = cuttlefish_datatypes:is_extended(DT), + if + Supported -> transform_supported_type(DT, Value); + Extended -> transform_extended_type(DT, Value); + true -> + {error, {unsupported_type, DT}} + end. + +-spec transform_supported_type(cuttlefish_datatypes:datatype(), any()) -> + {ok, term()} | cuttlefish_error:error(). +transform_supported_type(DT, Value) -> + try cuttlefish_datatypes:from_string(Value, DT) of + {error, Message} -> {error, Message}; + NewValue -> {ok, NewValue} + catch + Class:Error -> + {error, {transform_type_exception, {DT, {Class, Error}}}} + end. + +-spec transform_extended_type(cuttlefish_datatypes:extended(), any()) -> + {ok, term()} | cuttlefish_error:error(). +transform_extended_type({DT, AcceptableValue}, Value) -> + case transform_supported_type(DT, Value) of + {ok, AcceptableValue} -> + {ok, AcceptableValue}; + {ok, _NewValue} -> + {error, {transform_type_unacceptable, {Value, AcceptableValue}}}; + {error, Term} -> + {error, Term} + end. +%% Ok, this is tricky +%% There are three scenarios we have to deal with: +%% 1. The mapping is there! -> return mapping +%% 2. The mapping is not there -> error +%% 3. The mapping is there, but the key in the schema contains a $. +%% (fuzzy match) +find_mapping([H|_]=Variable, Mappings) when is_list(H) -> + {HardMappings, FuzzyMappings} = lists:foldl( + fun(Mapping, {HM, FM}) -> + VariableDef = cuttlefish_mapping:variable(Mapping), + case {Variable =:= VariableDef, cuttlefish_variable:is_fuzzy_match(Variable, VariableDef)} of + {true, _} -> {[Mapping|HM], FM}; + {_, true} -> {HM, [Mapping|FM]}; + _ -> {HM, FM} + end + end, + {[], []}, + Mappings), + + %% The input to this function is massaged enough that you'll never see a hard mapping count > 1 + %% You might see more than one fuzzy match, there's really nothing to stop that. + FVariable = cuttlefish_variable:format(Variable), + case {length(HardMappings), length(FuzzyMappings)} of + {1, _} -> hd(HardMappings); + {0, 1} -> hd(FuzzyMappings); + {0, 0} -> {error, {mapping_not_found, FVariable}}; + {X, Y} -> {error, {mapping_multiple, {FVariable, {X, Y}}}} + end; +find_mapping(Variable, Mappings) -> + find_mapping(cuttlefish_variable:tokenize(Variable), Mappings). + +-spec run_validations(cuttlefish_schema:schema(), cuttlefish_conf:conf()) + -> boolean()|list(cuttlefish_error:error()). +run_validations({_, Mappings, Validators}, Conf) -> + Validations = lists:flatten([ begin + Vs = cuttlefish_mapping:validators(M, Validators), + Value = proplists:get_value(cuttlefish_mapping:variable(M), Conf), + [ begin + Validator = cuttlefish_validator:func(V), + case {Value, Validator(Value)} of + {undefined, _} -> true; + {_, true} -> + true; + _ -> + Error = {validation, { cuttlefish_variable:format( + cuttlefish_mapping:variable(M)), + cuttlefish_validator:description(V) + }}, + lager:error(cuttlefish_error:xlate(Error)), + {error, Error} + end + end || V <- Vs] + + end || M <- Mappings, + cuttlefish_mapping:validators(M) =/= [], + cuttlefish_mapping:default(M) =/= undefined orelse proplists:is_defined(cuttlefish_mapping:variable(M), Conf) + ]), + case lists:all(fun(X) -> X =:= true end, Validations) of + true -> true; + _ -> Validations + end. + + +%% @doc Calls Fun on each element of the list until it returns {ok, +%% term()}, otherwise accumulates {error, term()} into a list, +%% wrapping in {error, _} at the end. +-spec foldm_either(fun((term()) -> + {ok, term()} | cuttlefish_error:errorlist()), + list()) -> + {ok, term()} | cuttlefish_error:errorlist(). +foldm_either(Fun, List) -> + foldm_either(Fun, List, []). + +%% @doc Calls Fun on each element of the list until it returns {ok, +%% term()}, otherwise accumulates {error, term()} into a list, +%% wrapping in {errorlist, _} at the end. +-spec foldm_either(fun((term()) -> + {ok, term()} | cuttlefish_error:error()), + list(), list()) -> + {ok, term()} | cuttlefish_error:errorlist(). +foldm_either(_Fun, [], Acc) -> {errorlist, lists:reverse(Acc)}; +foldm_either(Fun, [H|T], Acc) -> + case Fun(H) of + {ok, Result} -> {ok, Result}; + {error, _}=Error -> + foldm_either(Fun, T, [Error|Acc]) + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +bad_conf_test() -> + Conf = [ + {["integer_thing"], "thirty_two"}, + {["enum_thing"], bad_enum_value}, + {["ip_thing"], "not an IP address"} + ], + + Mappings = [ + cuttlefish_mapping:parse({mapping, "integer_thing", "to.int", [ + {datatype, integer} + ]}), + cuttlefish_mapping:parse({mapping, "enum_thing", "to.enum", [ + {datatype, {enum, [on, off]}} + ]}), + cuttlefish_mapping:parse({mapping, "ip_thing", "to.ip", [ + {datatype, ip} + ]}) + ], + + Translations = [ + cuttlefish_translation:parse({translation, "to.enum", fun(_ConfConf) -> whatev end}) + ], + + NewConfig = map({Translations, Mappings, []}, Conf), + io:format("NewConf: ~p~n", [NewConfig]), + + ?assertMatch({error, transform_datatypes, _}, NewConfig), + ok. + +add_defaults_test() -> + %%lager:start(), + Conf = [ + %%{["a","b","c"], "override"}, %% Specifically left out. Uncomment line to break test, + {["a","c","d"], "override"}, + {["no","match"], "unchanged"}, + %%{"m.rk.x", "defined"}, %% since this is undefined no defaults should be created for "m", + + %% two matches on a name "ak" and "bk" + {["n","ak","x"], "set_n_name_x"}, + {["n","bk","x"], "set_n_name_x2"}, + {["n","ck","y"], "set_n_name_y3"} + ], + + Mappings = [ + %% First mapping, direct, not in .conf, will be default + cuttlefish_mapping:parse({mapping, "a.b.c", "b.c", [ + {default, "q"} + ]}), + %% default is "l", but since "a.c.d" is in Conf, it will be "override" + cuttlefish_mapping:parse({mapping, "a.c.d", "c.d", [ + {default, "l"} + ]}), + cuttlefish_mapping:parse({mapping, "m.$name.x", "some.proplist", [ + {default, "m_name_x"} + ]}), + cuttlefish_mapping:parse({mapping, "n.$name.x", "some.proplist", [ + {default, "n_name_x"} + ]}), + cuttlefish_mapping:parse({mapping, "n.$name.y", "some.proplist", [ + {default, "n_name_y"} + ]}), + cuttlefish_mapping:parse({mapping, "o.$name.z", "some.proplist", [ + {default, "o_name_z"}, + {include_default, "blue"} + ]}) + ], + + DConf = add_defaults(Conf, Mappings), + io:format("DConf: ~p~n", [DConf]), + ?assertEqual(9, length(DConf)), + ?assertEqual("q", proplists:get_value(["a","b","c"], DConf)), + ?assertNotEqual("l", proplists:get_value(["a","c","d"], DConf)), + ?assertEqual("override", proplists:get_value(["a","c","d"], DConf)), + ?assertEqual("unchanged", proplists:get_value(["no","match"], DConf)), + ?assertEqual("set_n_name_x", proplists:get_value(["n","ak","x"], DConf)), + ?assertEqual("set_n_name_x2", proplists:get_value(["n","bk","x"], DConf)), + ?assertEqual("n_name_x", proplists:get_value(["n","ck","x"], DConf)), + ?assertEqual("n_name_y", proplists:get_value(["n","ak","y"], DConf)), + ?assertEqual("n_name_y", proplists:get_value(["n","bk","y"], DConf)), + ?assertEqual("set_n_name_y3", proplists:get_value(["n","ck","y"], DConf)), + ?assertEqual(undefined, proplists:get_value(["o","blue","z"], DConf)), + ok. + +map_test() -> + lager:start(), + Schema = cuttlefish_schema:file("test/riak.schema"), + + Conf = conf_parse:file("test/riak.conf"), + + NewConfig = map(Schema, Conf), + + NewRingSize = proplists:get_value(ring_creation_size, proplists:get_value(riak_core, NewConfig)), + ?assertEqual(32, NewRingSize), + + NewAAE = proplists:get_value(anti_entropy, proplists:get_value(riak_kv, NewConfig)), + ?assertEqual({on,[debug]}, NewAAE), + + NewSASL = proplists:get_value(sasl_error_logger, proplists:get_value(sasl, NewConfig)), + ?assertEqual(false, NewSASL), + + NewHTTP = proplists:get_value(http, proplists:get_value(riak_core, NewConfig)), + ?assertEqual([{"10.0.0.1", 80}, {"127.0.0.1", 8098}], NewHTTP), + + NewPB = proplists:get_value(pb, proplists:get_value(riak_api, NewConfig)), + ?assertEqual([], NewPB), + + NewHTTPS = proplists:get_value(https, proplists:get_value(riak_core, NewConfig)), + ?assertEqual(undefined, NewHTTPS), + ok. + +minimal_map_test() -> + lager:start(), + Schema = cuttlefish_schema:file("test/riak.schema"), + Conf = [{["ring_size"], "32"}, + {["anti_entropy"], "debug"}], + NewConfig = minimal_map(Schema, Conf), + ?assertEqual([{riak_core, [{ring_creation_size, 32}]},{riak_kv,[{anti_entropy, {on, [debug]}}]}], + lists:sort(NewConfig)). + + +apply_mappings_test() -> + %% Two mappings, both alike in dignity, + %% In fair unit test, where we lay our scene, + %% From ancient failure break to new mutiny, + %% Where civil overrides makes civil priority unclean. + %% From forth the fatal loins of these two foes + %% A pair of star-cross'd mappings write one app var; + %% Whose misadventured piteous overthrows + %% Do with their merge behave unexpectedly. + + %% Assume add_defaults has already run + Conf = [ + {["conf", "key1"], "1"}, + {["conf", "key2"], "2"} + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key1", + "erlang.key", + [ + {default, "1"} + ] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "erlang.key", + [ + {default, "2"} + ] + }) + ], + + {DirectMappings, []} = apply_mappings({[], Mappings, []}, Conf), + cuttlefish_unit:assert_config(DirectMappings, "erlang.key", "1"), + ok. + +find_mapping_test() -> + lager:start(), + Mappings = [ + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 0}]}), + cuttlefish_mapping:parse({mapping, "variable.with.$matched.name", "", [{ default, 1}]}) + ], + io:format("Mappings: ~p~n", [Mappings]), + + ?assertEqual( + ["variable","with","fixed","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","fixed","name"], + cuttlefish_mapping:variable(find_mapping("variable.with.fixed.name", Mappings)) + ), + + ?assertEqual( + 0, + cuttlefish_mapping:default(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","A","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","A","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","B","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","B","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","C","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","C","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","D","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","D","name"], Mappings)) + ), + + ?assertEqual( + ["variable","with","$matched","name"], + cuttlefish_mapping:variable(find_mapping(["variable","with","E","name"], Mappings)) + ), + + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","E","name"], Mappings)) + ), + + %% Test variable name with dot + ?assertEqual( + "variable.with.E.F.name not_found", + ?XLATE(find_mapping(["variable","with","E","F","name"], Mappings)) + ), + %% Test variable name with escaped dot + ?assertEqual( + 1, + cuttlefish_mapping:default(find_mapping(["variable","with","E.F","name"], Mappings)) + ), + ok. + +multiple_hard_match_test() -> + %% In real life this should never happen, but if it does, I'd love a log message + Mappings = [ + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 0}]}), + cuttlefish_mapping:parse({mapping, "variable.with.fixed.name", "", [{ default, 1}]}) + ], + ?assertEqual( + "2 hard mappings and 0 fuzzy mappings found for variable.with.fixed.name", + ?XLATE(find_mapping(["variable","with","fixed","name"], Mappings)) + ), + ok. + +apply_mappings_translations_dropped_correctly_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }) + ], + %% So, we have a translation for the corresponding mapping, but that mapping has no default + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. + +apply_mappings_translations_dropped_correctly_mixed_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "mapping.name", + [] + }) + ], + %% One valid mapping, and one that should be dropped (no default) + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. +apply_mappings_translations_dropped_correctly_mixed2_test() -> + Fun = fun(X) -> X end, + ?assertEqual(1, Fun(1)), %% coverage kludge + + Translations = [ + cuttlefish_translation:parse({ + translation, + "mapping.name", + Fun + }) + ], + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "mapping.name", + [{default, 6}] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key2", + "mapping.name", + [] + }), + cuttlefish_mapping:parse({ + mapping, + "conf.key3", + "mapping.name", + [] + }) + ], + %% One valid mapping and two that should be dropped (no default) + {_DirectMappings, TranslationsToDrop} = apply_mappings({Translations, Mappings, []}, []), + ?assertEqual([], TranslationsToDrop), + ok. + +transform_datatypes_not_found_test() -> + Mappings = [ + cuttlefish_mapping:parse({ + mapping, + "conf.key", + "erlang.key", + [] + }) + ], + + Conf = [ + {["conf", "other"], "string"} + ], + NewConf = transform_datatypes(Conf, Mappings), + ?assertEqual({[], [{error, {unknown_variable, "conf.other"}}]}, NewConf), + ok. + +validation_test() -> + + Pid = self(), + + Mappings = [cuttlefish_mapping:parse( + {mapping, "a", "b.c", [{validators, ["a"]}, {datatype, {enum, [true, false]}}]} + ) + ], + + Validators = [cuttlefish_validator:parse( + {validator, "a", "error msg", fun(X) -> Pid ! X, true end} + ) + ], + + Conf = [ + {["a"], true} + ], + + AppConf = map({[], Mappings, Validators}, Conf), + + receive + X -> + ?assert(X) + after + 1000 -> + ?assert(false) + end, + + ?assertEqual([{b, [{c, true}]}], AppConf), + ok. + +throw_unset_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(_X) -> cuttlefish:unset() end}) + ], + AppConf = map({Translations, Mappings, []}, []), + ?assertEqual([], AppConf), + ok. + +bad_prefix_match_test() -> + Prefixes = [ + {["prefix", "one"], ["one", "two"]}, + {["prefix", "two"], ["one", "two"]} + ], + Conf = [], + Default = 8, + VariableDef = ["prefix", "one", "other_thing", "$name"], + + ?assertEqual([], add_fuzzy_default(Prefixes, Conf, Default, VariableDef)), + ok. + +assert_extended_datatype( + Datatype, + Setting, + Expected) -> + Mappings = [ + cuttlefish_mapping:parse({mapping, "a.b", "e.k", [ + {datatype, Datatype} + ]}) + ], + Conf = [ + {["a","b"], Setting} + ], + + Actual = map({[], Mappings, []}, Conf), + + case Expected of + {error, Phase, EMsg} -> + ?assertMatch({error, Phase, _}, Actual), + ?assertEqual(EMsg, ?XLATE(hd(element(2, element(3, Actual))))); + _ -> + ?assertEqual([{e, [{k, Expected}]}], map({[], Mappings, []}, Conf)) + end, + ok. + +extended_datatypes_test() -> + assert_extended_datatype([integer, {atom, never}], "1", 1), + assert_extended_datatype([integer, {atom, never}], "never", never), + assert_extended_datatype([integer, {atom, never}], "always", {error, transform_datatypes, "Error transforming datatype for: a.b"}), + assert_extended_datatype([{duration, s}, {atom, never}], "never", never), + assert_extended_datatype([{atom, never}, integer], "1", 1), + assert_extended_datatype([{enum, [never, always]}, {duration, s}], "1s", 1), + assert_extended_datatype([{atom, never}, {atom, always}], "foo", {error, transform_datatypes, "Error transforming datatype for: a.b"}), + ok. + +not_found_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(Conf) -> cuttlefish:conf_get("d", Conf) end}) + ], + AppConf = map({Translations, Mappings, []}, [{["a"], "foo"}]), + ?assertEqual({error, apply_translations, + {errorlist, + [{error, {translation_missing_setting, + {"b.c", "d"}}}]}}, + AppConf). + +invalid_test() -> + Mappings = [cuttlefish_mapping:parse({mapping, "a", "b.c", []})], + Translations = [cuttlefish_translation:parse( + {translation, "b.c", + fun(_Conf) -> cuttlefish:invalid("review all files") end}) + ], + AppConf = map({Translations, Mappings, []}, [{["a"], "foo"}]), + ?assertEqual({error, apply_translations, + {errorlist, + [{error, {translation_invalid_configuration, + {"b.c", "review all files"}}}]}}, + AppConf). + +value_sub_test() -> + Conf = [ + {["a","b","c"], "$(a.b)/c"}, + {["a","b"], "/a/b"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ABC = proplists:get_value(["a","b","c"], NewConf), + ?assertEqual("/a/b/c", ABC), + ok. + +value_sub_infinite_loop_test() -> + Conf = [ + {["a"], "$(c)/d"}, + {["b"], "$(a)/d"}, + {["c"], "$(b)/d"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "Circular RHS substitutions: [[\"a\"],[\"b\"],[\"c\"],[\"a\"]]", + ?XLATE(hd(Errors)) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"b\"],[\"c\"],[\"a\"],[\"b\"]]", + ?XLATE(hd(tl(Errors))) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"c\"],[\"a\"],[\"b\"],[\"c\"]]", + ?XLATE(hd(tl(tl(Errors)))) + ), + ok. + +value_sub_not_found_test() -> + Conf = [ + {["a"], "$(b)/c"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "'a' substitution requires a config variable 'b' to be set", + ?XLATE(hd(Errors)) + ), + ok. + +value_sub_whitespace_test() -> + Conf = [ + {["a", "b", "c"], "/tyktorp"}, + {["a"], "$(a.b.c)/svagen"}, + {["b"], "$( a.b.c)/svagen"}, + {["c"], "$(a.b.c )/svagen"}, + {["d"], "$( a.b.c )/svagen"} + ], + {NewConf, []} = value_sub(Conf), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["a"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["b"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["c"], NewConf)), + ?assertEqual("/tyktorp/svagen", proplists:get_value(["d"], NewConf)), + ok. + +value_sub_multiple_sub_test() -> + Conf = [ + {["a"], "/a"}, + {["b"], "/b"}, + {["c"], "$(a)$(b)"} + ], + {NewConf, []} = value_sub(Conf), + ?assertEqual("/a/b", proplists:get_value(["c"], NewConf)), + ok. + +value_sub_error_in_second_sub_test() -> + Conf = [ + {["a"], "$(b)/$(c)"}, + {["b"], "/b"}, + {["c"], "$(a)/c"} + ], + {_NewConf, Errors} = value_sub(Conf), + ?assertEqual( + "Circular RHS substitutions: [[\"a\"],[\"c\"],[\"a\"]]", + ?XLATE(hd(Errors)) + ), + ?assertEqual( + "Circular RHS substitutions: [[\"c\"],[\"a\"],[\"c\"]]", + ?XLATE(hd(tl(Errors))) + ), + ok. + +value_sub_false_circle_test() -> + Conf = [ + {["a"], "$(c)/$(c)"}, + {["c"], "C"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ?assertEqual("C/C", proplists:get_value(["a"], NewConf)), + ok. + +value_sub_paren_test() -> + Conf = [ + {["a"], "$(c)/$(c)"}, + {["c"], "C)"} + ], + {NewConf, Errors} = value_sub(Conf), + ?assertEqual([], Errors), + ?assertEqual("C)/C)", proplists:get_value(["a"], NewConf)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_mapping.erl b/deps/cuttlefish/src/cuttlefish_mapping.erl new file mode 100644 index 0000000..669fb28 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_mapping.erl @@ -0,0 +1,544 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_mapping: models a single mapping +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_mapping). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(mapping, { + variable::cuttlefish_variable:variable(), + mapping::string(), + default::term(), + commented::term(), + datatype = [string] :: cuttlefish_datatypes:datatype_list(), + level = basic :: basic | intermediate | advanced, + doc = [] :: list(), + include_default = undefined :: string() | undefined, + new_conf_value = undefined :: string() | undefined, + validators = [] :: [string()], + is_merge = false :: boolean(), + see = [] :: [cuttlefish_variable:variable()], + hidden = false :: boolean() + }). + +-type mapping() :: #mapping{}. +-type raw_mapping() :: {mapping, string(), string(), [proplists:property()]}. +-export_type([mapping/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_mapping/1, + variable/1, + is_fuzzy_variable/1, + mapping/1, + default/1, + has_default/1, + commented/1, + datatype/1, + level/1, + hidden/1, + doc/1, + see/1, + include_default/1, + new_conf_value/1, + replace/2, + validators/1, + validators/2, + remove_all_but_first/2 + ]). + +-spec parse(raw_mapping()) -> mapping() | cuttlefish_error:error(). +parse({mapping, Variable, Mapping, Proplist}) -> + + Datatype = case proplists:get_value(datatype, Proplist, string) of + {enum, Enums} -> + AtomEnums = [ begin + case is_list(E) of + true -> list_to_atom(E); + _ -> E + end + end || E <- Enums ], + [{enum, AtomEnums}]; + L when is_list(L) -> + case cuttlefish_datatypes:is_valid_list(L) of + true -> L; + _ -> {error, {mapping_types, L}} + end; + D -> [D] + end, + + case Datatype of + {error, _} -> + Datatype; + _ -> + #mapping{ + variable = cuttlefish_variable:tokenize(Variable), + default = proplists:get_value(default, Proplist), + commented = proplists:get_value(commented, Proplist), + mapping = Mapping, + level = proplists:get_value(level, Proplist, basic), + datatype = Datatype, + doc = proplists:get_value(doc, Proplist, []), + see = proplists:get_value(see, Proplist, []), + include_default = proplists:get_value(include_default, Proplist), + new_conf_value = proplists:get_value(new_conf_value, Proplist), + validators = proplists:get_value(validators, Proplist, []), + hidden = proplists:get_value(hidden, Proplist, false) + } + end; +parse(X) -> + {error, {mapping_parse, X}}. + +%% If this mapping exists, do something. +%% That something is usually a simple replace, unless the proplist in +%% the raw mapping contains the atom 'merge'. +%% +%% This fuction assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_mapping(), [mapping()]) -> [mapping()]. +parse_and_merge({mapping, Variable, _Mapping, Props} = MappingSource, Mappings) -> + Var = cuttlefish_variable:tokenize(Variable), + case lists:keyfind(Var, #mapping.variable, Mappings) of + false -> + [ parse(MappingSource) | Mappings]; + OldMapping -> + MaybeMergedMapping = case proplists:is_defined(merge, Props) of + true -> + merge(MappingSource, OldMapping); + _ -> + parse(MappingSource) + end, + lists:keyreplace(Var, #mapping.variable, Mappings, MaybeMergedMapping) + end. + +-spec merge(raw_mapping(), mapping()) -> mapping(). +merge(NewMappingSource, OldMapping) -> + MergeMapping = parse(NewMappingSource), + #mapping{ + variable = variable(MergeMapping), + mapping = mapping(MergeMapping), + default = choose(default, NewMappingSource, MergeMapping, OldMapping), + commented = choose(commented, NewMappingSource, MergeMapping, OldMapping), + datatype = choose(datatype, NewMappingSource, MergeMapping, OldMapping), + level = choose(level, NewMappingSource, MergeMapping, OldMapping), + doc = choose(doc, NewMappingSource, MergeMapping, OldMapping), + include_default = choose(include_default, NewMappingSource, MergeMapping, OldMapping), + new_conf_value = choose(include_default, NewMappingSource, MergeMapping, OldMapping), + validators = choose(validators, NewMappingSource, MergeMapping, OldMapping), + see = choose(see, NewMappingSource, MergeMapping, OldMapping), + hidden = choose(hidden, NewMappingSource, MergeMapping, OldMapping) + }. + +choose(Field, {_, _, _, PreParseMergeProps}, MergeMapping, OldMapping) -> + Which = case {Field, + proplists:is_defined(Field, PreParseMergeProps), + proplists:get_value(Field, PreParseMergeProps)} of + {see, _, []} -> old; + {doc, _, []} -> old; + {_, true, _} -> new; + _ -> old + end, + case Which of + new -> + ?MODULE:Field(MergeMapping); + old -> + ?MODULE:Field(OldMapping) + end. + +-spec is_mapping(any()) -> boolean(). +is_mapping(M) -> + is_tuple(M) andalso element(1, M) =:= mapping. + +-spec variable(mapping()) -> [string()]. +variable(M) -> M#mapping.variable. + +-spec is_fuzzy_variable(mapping()) -> boolean(). +is_fuzzy_variable(#mapping{variable=VariableDef}) -> + lists:any(fun(X) -> hd(X) =:= $$ end, VariableDef). + +-spec mapping(mapping()) -> string(). +mapping(M) -> M#mapping.mapping. + +-spec default(mapping()) -> term(). +default(M) -> M#mapping.default. + +-spec has_default(mapping()) -> boolean(). +has_default(MappingRecord) -> + default(MappingRecord) =/= undefined. + +-spec commented(mapping()) -> term(). +commented(M) -> M#mapping.commented. + +-spec datatype(mapping()) -> cuttlefish_datatypes:datatype_list(). +datatype(M) -> M#mapping.datatype. + +-spec level(mapping()) -> basic | intermediate | advanced. +level(M) -> M#mapping.level. + +-spec hidden(mapping()) -> boolean(). +hidden(M) -> M#mapping.hidden. + +-spec doc(mapping()) -> [string()]. +doc(M) -> M#mapping.doc. + +-spec see(mapping()) -> [cuttlefish_variable:variable()]. +see(M) -> M#mapping.see. + +-spec include_default(mapping()) -> string() | undefined. +include_default(M) -> M#mapping.include_default. + +-spec new_conf_value(mapping()) -> string() | undefined. +new_conf_value(M) -> M#mapping.new_conf_value. + +-spec validators(mapping()) -> [string()]. +validators(M) -> M#mapping.validators. + +-spec validators(mapping(), [cuttlefish_validator:validator()]) -> [cuttlefish_validator:validator()]. +validators(M, Validators) -> + lists:foldr(fun(VName, Vs) -> + case lists:keyfind(VName, 2, Validators) of + false -> Vs; + V -> [V|Vs] + end + end, [], M#mapping.validators). + +-spec replace(mapping(), [mapping()]) -> [mapping()]. +replace(Mapping, ListOfMappings) -> + Exists = lists:keymember(variable(Mapping), #mapping.variable, ListOfMappings), + case Exists of + true -> + lists:keyreplace(variable(Mapping), #mapping.variable, ListOfMappings, Mapping); + _ -> + [Mapping | ListOfMappings] + end. + +-spec remove_all_but_first(string(), [mapping()]) -> [mapping()]. +remove_all_but_first(MappingName, Mappings) -> + lists:foldr( + fun(#mapping{mapping=MN}=M, Acc) when MN =:= MappingName-> + [M|lists:keydelete(MN, #mapping.mapping, Acc)]; + (M, Acc) -> + [M|Acc] + end, [], Mappings). + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +mapping_test() -> + + SampleMapping = { + mapping, + "conf.key", + "erlang.key", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "config_file_val"}, + {doc, ["documentation", "for feature"]}, + {validators, ["valid.the.impailer"]}, + hidden + ] + }, + + Record = parse(SampleMapping), + + ?assertEqual(["conf","key"], Record#mapping.variable), + ?assertEqual("default value", Record#mapping.default), + ?assertEqual("erlang.key", Record#mapping.mapping), + ?assertEqual(advanced, Record#mapping.level), + ?assertEqual([{enum, [on, off]}], Record#mapping.datatype), + ?assertEqual(["documentation", "for feature"], Record#mapping.doc), + ?assertEqual("default_substitution", Record#mapping.include_default), + ?assertEqual("config_file_val", Record#mapping.new_conf_value), + ?assertEqual(["valid.the.impailer"], Record#mapping.validators), + ?assertEqual(true, Record#mapping.hidden), + + %% funciton tests + ?assertEqual(["conf","key"], variable(Record)), + ?assertEqual("default value", default(Record)), + ?assertEqual("erlang.key", mapping(Record)), + ?assertEqual(advanced, level(Record)), + ?assertEqual([{enum, [on, off]}], datatype(Record)), + ?assertEqual(["documentation", "for feature"], doc(Record)), + ?assertEqual("default_substitution", include_default(Record)), + ?assertEqual("config_file_val", new_conf_value(Record)), + ?assertEqual(["valid.the.impailer"], validators(Record)), + ?assertEqual(true, hidden(Record)), + + ok. + +replace_test() -> + Element1 = parse({ + mapping, + "conf.key18", + "erlang.key4", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val18"}, + {doc, ["documentation", "for feature"]} + ] + }), + + SampleMappings = [Element1, + parse({ + mapping, + "conf.key", + "erlang.key2", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_A"}, + {doc, ["documentation", "for feature"]} + ] + }) + ], + + Override = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_B"}, + {doc, ["documentation", "for feature"]} + ] + }), + + NewMappings = replace(Override, SampleMappings), + ?assertEqual([Element1, Override], NewMappings), + ok. + +validators_test() -> + Validators = [ + cuttlefish_validator:parse( + {validator, "a", "a desc", fun(_X) -> true end} + ), + cuttlefish_validator:parse({ + validator, "b", "b desc", fun(_X) -> true end + }), + cuttlefish_validator:parse({ + validator, "c", "c desc", fun(_X) -> true end + }) + ], + + %% Hack for coverage + [ begin + Fun = cuttlefish_validator:func(V), + ?assert(Fun(x)) + end || V <- Validators], + Mapping = parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {validators, ["a", "b"]} + ] + }), + + [A, B, _C] = Validators, + + ?assertEqual([A,B], validators(Mapping, Validators)), + + MappingWithMissingValidator = parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {validators, ["a", "d"]} %% There is no "d" + ] + }), + ?assertEqual([A], validators(MappingWithMissingValidator, Validators)), + + ok. + +parse_and_merge_test() -> + SampleMappings = [parse({ + mapping, + "conf.key", + "erlang.key1", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_A"}, + {doc, ["documentation", "for feature"]}, + hidden + ] + }), + parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {level, advanced}, + {default, "default value"}, + {datatype, {enum, [on, off]}}, + {commented, "commented value"}, + {include_default, "default_substitution"}, + {new_conf_value, "conf_val_B"}, + {doc, ["documentation", "for feature"]} + ] + }) + ], + + NewMappings = parse_and_merge({mapping, "conf.key", "erlang.key3", [{hidden, false}]}, SampleMappings), + + ?assertEqual("erlang.key3", mapping(hd(NewMappings))), + ?assertEqual(false, hidden(hd(NewMappings))), + ok. + +smart_merge_test() -> + OldM1 = parse({mapping, "thing.to.merge", "some.key", [ + {default, 7}, + {datatype, integer}, + {doc, ["documentation", "for feature"]} + ]}), + OldM2 = parse({mapping, "thing.not.merged", "some.other_key", [{default, 6}, {datatype, integer}]}), + + OriginalMappings = [OldM1, OldM2], + + NewRawNoMergeMapping = {mapping, "thing.to.merge", "some.new_other_key", [{level, advanced}]}, + [NewUnMergedMapping, OldM2] = parse_and_merge( + NewRawNoMergeMapping, + OriginalMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewUnMergedMapping)), + ?assertEqual(undefined, default(NewUnMergedMapping)), + ?assertEqual("some.new_other_key", mapping(NewUnMergedMapping)), + ?assertEqual(advanced, level(NewUnMergedMapping)), + ?assertEqual([string], datatype(NewUnMergedMapping)), + ?assertEqual([], doc(NewUnMergedMapping)), + ?assertEqual(undefined, include_default(NewUnMergedMapping)), + ?assertEqual([], validators(NewUnMergedMapping)), + + NewRawMergeMapping = {mapping, "thing.to.merge", "some.new_key", [merge, {level, advanced}]}, + [NewMergedMapping, OldM2] = NewMappings = parse_and_merge( + NewRawMergeMapping, + OriginalMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewMergedMapping)), + ?assertEqual(7, default(NewMergedMapping)), + ?assertEqual("some.new_key", mapping(NewMergedMapping)), + ?assertEqual(advanced, level(NewMergedMapping)), + ?assertEqual([integer], datatype(NewMergedMapping)), + ?assertEqual(["documentation", "for feature"], doc(NewMergedMapping)), + ?assertEqual(undefined, include_default(NewMergedMapping)), + ?assertEqual([], validators(NewMergedMapping)), + + NewerRawMergeMapping = {mapping, "thing.to.merge", "some.third_key", [merge, {default, 42}]}, + + [NewerMergedMapping, OldM2] = parse_and_merge( + NewerRawMergeMapping, + NewMappings), + + ?assertEqual(["thing", "to", "merge"], variable(NewerMergedMapping)), + ?assertEqual(42, default(NewerMergedMapping)), + ?assertEqual("some.third_key", mapping(NewerMergedMapping)), + ?assertEqual(advanced, level(NewerMergedMapping)), + ?assertEqual([integer], datatype(NewerMergedMapping)), + ?assertEqual(["documentation", "for feature"], doc(NewerMergedMapping)), + ?assertEqual(undefined, include_default(NewerMergedMapping)), + ?assertEqual([], validators(NewerMergedMapping)), + ok. + +accidentally_used_strings_for_enums_test() -> + Mapping = parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {datatype, {enum, ["on", "off"]}} + ] + }), + ?assertEqual([{enum, [on, off]}], cuttlefish_mapping:datatype(Mapping)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTuple} = parse(not_a_raw_mapping), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_mapping:parse/1 : not_a_raw_mapping", + ?XLATE(ErrorTuple)), + ok. + +is_mapping_test() -> + ?assert(not(is_mapping(not_a_mapping))), + + M = parse({ + mapping, + "conf.key2", + "erlang.key2", + [ + {datatype, {enum, ["on", "off"]}} + ] + }), + ?assert(is_mapping(M)), + ok. + +%% conf.key can be any integer or the atom undefined. +extended_types_parse_test() -> + Mapping = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {datatype, [integer, {atom, undefined}]} + ] + }), + + ?assertEqual([integer, {atom, undefined}], cuttlefish_mapping:datatype(Mapping)), + ok. + +datatype_cannot_be_empty_list_test() -> + Mapping = parse({ + mapping, + "conf.key", + "erlang.key", + [ + {datatype, []} + ] + }), + ?assertMatch({error, _}, Mapping), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl b/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl new file mode 100644 index 0000000..e262303 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_rebar_plugin.erl @@ -0,0 +1,95 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_rebar_plugin: generates an application's default .conf +%% as part of the build +%% +%% Copyright (c) 2013 Basho Technologies, Inc. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_rebar_plugin). + +-export([ + generate/2 +]). + +%% =================================================================== +%% Public API +%% =================================================================== +generate(Config0, ReltoolFile) -> + case should_i_run(Config0, ReltoolFile) of + {ok, Config, ReltoolConfig} -> + TargetDir = rebar_rel_utils:get_target_dir(Config, ReltoolConfig), + + %% Finally, overlay the files specified by the overlay section + case lists:keyfind(overlay, 1, ReltoolConfig) of + {overlay, Overlays} when is_list(Overlays) -> + SchemaOverlays = lists:filter(fun(Overlay) -> + element(1, Overlay) =:= template + andalso filename:extension(element(3, Overlay)) =:= ".schema" + end, + Overlays), + + Schemas = lists:sort([ + lists:flatten(filename:join(TargetDir, element(3, Schema))) + || Schema <- SchemaOverlays]), + + io:format("Schema: ~p~n", [Schemas]), + + case cuttlefish_schema:files(Schemas) of + {errorlist, _Es} -> + %% These errors were already printed + error; + {_Translations, Mappings, _Validators} -> + make_default_file(Config, TargetDir, Mappings) + end; + + false -> + %%io:format("No {overlay, [...]} found in reltool.config.\n", []); + ok; + _ -> + io:format("{overlay, [...]} entry in reltool.config " + "must be a list.\n", []) + end, + ok; + no -> + ok + end, + ok. + +make_default_file(Config, TargetDir, Mappings) -> + %% I really wanted this to default to the application name. The problem + %% is that the type of application that uses cuttlefish is also the kind + %% that doesn't have an .app.src file, so rebar doesn't get it. + %% I could have done something with cwd, but I didn't like that because you + %% could be building anywhere. So, cuttlefish it is. he's pretty cool anyway. + File = rebar_config:get_local(Config, cuttlefish_filename, "cuttlefish.conf"), + Filename = filename:join([TargetDir, "etc", File]), + + cuttlefish_conf:generate_file(Mappings, Filename), + ok. + +%% Only run for rel directory +should_i_run(Config0, ReltoolFile) -> + case rebar_rel_utils:is_rel_dir() of + {true, _} -> + %% Load the reltool configuration from the file + {Config, ReltoolConfig} = rebar_rel_utils:load_config(Config0, ReltoolFile), + {ok, Config, ReltoolConfig}; + false -> + no + end. diff --git a/deps/cuttlefish/src/cuttlefish_schema.erl b/deps/cuttlefish/src/cuttlefish_schema.erl new file mode 100644 index 0000000..49a28a2 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_schema.erl @@ -0,0 +1,506 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_schema: slurps schema files +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- + +-module(cuttlefish_schema). + +-export([files/1, strings/1]). + +%% Exported for unit testing in other projects +-export([merger/1, string_fun_factory/0]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-export([file/1]). +-endif. + +-type schema() :: { + [cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()]}. +-export_type([schema/0]). + +-spec files([string()]) -> schema() | cuttlefish_error:errorlist(). +files(ListOfSchemaFiles) -> + merger(fun file/2, ListOfSchemaFiles). + +-spec strings([string()]) -> schema() | cuttlefish_error:errorlist(). +strings(ListOfStrings) -> + merger(fun string/2, ListOfStrings). + +-spec merger(fun((string(), schema()) -> schema() | cuttlefish_error:errorlist()), [string()]) -> + schema() | cuttlefish_error:errorlist(). +merger(Fun, ListOfInputs) -> + merger([ {Fun, Input} || Input <- ListOfInputs ]). + +-spec merger([{fun((string(), schema()) -> schema() | cuttlefish_error:errorlist()), string()}]) -> + schema() | cuttlefish_error:errorlist(). +merger(ListOfFunInputPairs) -> + Schema = lists:foldr( + fun({Fun, Input}, {TranslationAcc, MappingAcc, ValidatorAcc}) -> + case Fun(Input, {TranslationAcc, MappingAcc, ValidatorAcc}) of + {errorlist, Errors} -> + %% These have already been logged. We're not moving forward with this + %% but, return them anyway so the rebar plugin can display them + %% with io:format, since it doesn't have lager. + {errorlist, Errors}; + {Translations, Mappings, Validators} -> + NewMappings = lists:foldr( + fun cuttlefish_mapping:replace/2, + MappingAcc, + Mappings), + + NewTranslations = lists:foldr( + fun cuttlefish_translation:replace/2, + TranslationAcc, + Translations), + + NewValidators = lists:foldr( + fun cuttlefish_validator:replace/2, + ValidatorAcc, + Validators), + + {NewTranslations, NewMappings, NewValidators} + end + end, + {[], [], []}, + ListOfFunInputPairs), + filter(Schema). + +%% This filter is *ONLY* for the case of multiple mappings to a single +%% erlang app setting, *AND* there's no corresponding translation for +%% that app setting +-spec filter(schema() | cuttlefish_error:errorlist()) -> schema() | cuttlefish_error:errorlist(). +filter({errorlist, Errorlist}) -> + {errorlist, Errorlist}; +filter({Translations, Mappings, Validators}) -> + Counts = count_mappings(Mappings), + {MappingsToCheck, _} = lists:unzip(Counts), + NewMappings = lists:foldl( + fun(MappingName, Acc) -> + case lists:any( + fun(T) -> cuttlefish_translation:mapping(T) =:= MappingName end, + Translations) of + false -> + cuttlefish_mapping:remove_all_but_first(MappingName, Acc); + _ -> Acc + end + end, + Mappings, MappingsToCheck), + + {Translations, NewMappings, Validators}. + +count_mappings(Mappings) -> + lists:foldl( + fun(M, Acc) -> + orddict:update_counter(cuttlefish_mapping:mapping(M), 1, Acc) + end, + orddict:new(), + Mappings). + +-spec file(string(), schema()) -> schema() | cuttlefish_error:errorlist(). +file(Filename, Schema) -> + {ok, B, _} = erl_prim_loader:get_file(filename:absname(Filename)), + %% latin-1 is easier to support generically. We'll revisit utf-8 + %% support in the future. + S = unicode:characters_to_list(B, latin1), + case string(S, Schema) of + {errorlist, Errors} -> + cuttlefish_error:print("Error parsing schema: ~s", [Filename]), + {errorlist, Errors}; + NewSchema -> + NewSchema + end. + +%% @doc this exists so that we can create the fun using non exported +%% functions for unit testing +-spec string_fun_factory() -> fun((string(), schema()) -> + schema() | cuttlefish_error:errorlist()). +string_fun_factory() -> + fun string/2. + +-spec string(string(), schema()) -> schema() | cuttlefish_error:errorlist(). +string(S, {T, M, V}) -> + case erl_scan:string(S) of + {ok, Tokens, _} -> + CommentTokens = erl_comment_scan:string(S), + {Translations, Mappings, Validators, Errors} = parse_schema(Tokens, CommentTokens, {T, M, V, []}), + + case length(Errors) of + 0 -> + {Translations, Mappings, Validators}; + _ -> + lists:foreach(fun({error, _Term}=E) -> + cuttlefish_error:print(E) end, + Errors), + {errorlist, Errors} + end; + {error, {Line, erl_scan, _}, _} -> + Error = {erl_scan, Line}, + ErrStr = cuttlefish_error:xlate(Error), + lager:error(lists:flatten(ErrStr)), + {errorlist, [{error, Error}]} + end. + +-spec parse_schema( + [any()], + [any()], + {[cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()], + [cuttlefish_error:error()]} + ) -> + {[cuttlefish_translation:translation()], + [cuttlefish_mapping:mapping()], + [cuttlefish_validator:validator()], + [cuttlefish_error:error()]}. +%% We're done! We don't care about any comments after the last schema item +parse_schema([], _LeftoverComments, {TAcc, MAcc, VAcc, EAcc}) -> + {lists:reverse(TAcc), lists:reverse(MAcc), lists:reverse(VAcc), lists:reverse(EAcc)}; +parse_schema(ScannedTokens, CommentTokens, {TAcc, MAcc, VAcc, EAcc}) -> + {LineNo, Tokens, TailTokens } = parse_schema_tokens(ScannedTokens), + {Comments, TailComments} = lists:foldr( + fun(X={CommentLineNo, _, _, Comment}, {C, TC}) -> + case CommentLineNo < LineNo of + true -> {Comment ++ C, TC}; + _ -> {C, [X|TC]} + end + end, + {[], []}, + CommentTokens), + + NewAcc = case parse(Tokens) of + {error, {erl_parse, Reason}} -> + {TAcc, MAcc, VAcc, [{error, {erl_parse, {Reason, LineNo}}} | EAcc]}; + {mapping, {mapping, Variable, Mapping, Proplist}} -> + Attributes = comment_parser(Comments), + Doc = proplists:get_value(doc, Attributes, []), + See = get_see(Attributes), + MappingSource = {mapping, Variable, Mapping, [{see, See},{doc, Doc}|Proplist]}, + {TAcc, cuttlefish_mapping:parse_and_merge(MappingSource, MAcc), VAcc, EAcc}; + {translation, Return} -> + {cuttlefish_translation:parse_and_merge(Return, TAcc), MAcc, VAcc, EAcc}; + {validator, Return} -> + {TAcc, MAcc, cuttlefish_validator:parse_and_merge(Return, VAcc), EAcc}; + Other -> + {TAcc, MAcc, VAcc, [{error, {parse_schema, Other}} | EAcc]} + end, + parse_schema(TailTokens, TailComments, NewAcc). + +parse_schema_tokens(Scanned) -> + parse_schema_tokens(Scanned, []). + +parse_schema_tokens([], Acc=[Last|_]) -> + %% When you've reached the end of file without encountering a dot, + %% return the result anyway and let erl_parse produce the error. + {element(2, Last), lists:reverse(Acc), []}; +parse_schema_tokens(Scanned, Acc=[{dot, LineNo}|_]) -> + {LineNo, lists:reverse(Acc), Scanned}; +parse_schema_tokens([H|Scanned], Acc) -> + parse_schema_tokens(Scanned, [H|Acc]). + +-spec parse(list()) -> { mapping | translation | validator, tuple()} | cuttlefish_error:error(). +parse(Scanned) -> + case erl_parse:parse_exprs(Scanned) of + {ok, Parsed} -> + {value, X, _} = erl_eval:exprs(Parsed,[]), + {element(1, X), X}; + {error, {_Line, erl_parse, [H|_T]=Strings}} when is_list(H) -> + {error, {erl_parse, lists:flatten(Strings)}}; + {error, {_Line, erl_parse, Term}} -> + {error, {erl_parse, io_lib:format("~p", [Term])}}; + E -> + {error, {erl_parse_unexpected, E}} + end. + +-spec get_see([proplists:property()]) -> [cuttlefish_variable:variable()]. +get_see(Proplist) -> + [ cuttlefish_variable:tokenize(Line) + || [Line] <- proplists:get_all_values(see, Proplist)]. + + +comment_parser(Comments) -> + StrippedComments = + lists:filter(fun(X) -> X =/= [] end, + [percent_stripper(C) || C <- Comments]), + %% now, let's go annotation hunting + + AttrList = lists:foldl( + fun(Line, Acc) -> + case {Line, Acc} of + {[ $@ | T], _} -> + Annotation = hd(string:tokens(T, [$\s])), + [{list_to_atom(Annotation), [percent_stripper(T -- Annotation)] }|Acc]; + { _, []} -> []; + {String, _} -> + [{Annotation, Strings}|T] = Acc, + [{Annotation, [String|Strings]}|T] + end + end, [], StrippedComments), + SortedList = lists:reverse([ {Attr, lists:reverse(Value)} || {Attr, Value} <- AttrList]), + CorrectedList = attribute_formatter(SortedList), + CorrectedList. + +%% Just handles the @doc business +attribute_formatter([Other | T]) -> + [ Other | attribute_formatter(T)]; +attribute_formatter([]) -> []. + +percent_stripper(Line) -> + percent_stripper_r(percent_stripper_l(Line)). + +percent_stripper_l([$%|T]) -> percent_stripper_l(T); +percent_stripper_l([$\s|T]) -> percent_stripper_l(T); +percent_stripper_l(Line) -> Line. + +percent_stripper_r(Line) -> + lists:reverse( + percent_stripper_l( + lists:reverse(Line))). +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +%% Test helpers +-spec file(string()) -> schema() | cuttlefish_error:errorlist(). +file(Filename) -> + file(Filename, {[], [], []}). +-spec string(string()) -> schema() | cuttlefish_error:errorlist(). +string(S) -> + string(S, {[], [], []}). + +percent_stripper_test() -> + ?assertEqual("hi!", percent_stripper("%%% hi!")), + ?assertEqual("hi!", percent_stripper("%% hi!")), + ?assertEqual("hi!", percent_stripper("% hi!")), + ?assertEqual("hi!", percent_stripper(" hi!")), + ?assertEqual("hi!", percent_stripper(" % % hi!")), + ?assertEqual("hi!", percent_stripper("% % % hi!")), + ?assertEqual("hi!", percent_stripper("% % % hi! % % %")), + ok. + +comment_parser_test() -> + Comments = [ + " ", + "%% @doc this is a sample doc", + "%% it spans multiple lines %%", + "", + "%% there can be line breaks", + "%% @datatype enum on, off", + "%% @advanced", + "%% @include_default name_substitution", + "%% @mapping riak_kv.anti_entropy", + "%% @see mapping.a", + "%% @see mapping.b" + ], + ParsedComments = comment_parser(Comments), + ?assertEqual(["this is a sample doc", + "it spans multiple lines", + "there can be line breaks"], + proplists:get_value(doc, ParsedComments)), + ?assertEqual([["mapping.a"], ["mapping.b"]], + proplists:get_all_values(see, ParsedComments)), + ok. + +bad_file_test() -> + cuttlefish_lager_test_backend:bounce(), + {errorlist, ErrorList} = file("test/bad_erlang.schema"), + + Logs = cuttlefish_lager_test_backend:get_logs(), + [L1|Tail] = Logs, + [L2|[]] = Tail, + ?assertMatch({match, _}, re:run(L1, "Error scanning erlang near line 10")), + ?assertMatch({match, _}, re:run(L2, "Error parsing schema: test/bad_erlang.schema")), + + ?assertEqual([ + {error, {erl_scan, 10}} + ], ErrorList), + ok. + +parse_invalid_erlang_test() -> + cuttlefish_lager_test_backend:bounce(), + SchemaString = lists:flatten([ + "%% @doc some doc\n", + "%% the doc continues!\n", + "{mapping, \"ring_size\", \"riak_core.ring_creation_size\", [\n", + " {datatype, penguin}" + "}.\n" + ]), + Parsed = string(SchemaString), + + [Log] = cuttlefish_lager_test_backend:get_logs(), + ?assertMatch({match, _}, re:run(Log, "Schema parse error near line number 4")), + ?assertMatch({match, _}, re:run(Log, "syntax error before: ")), + ?assertMatch({match, _}, re:run(Log, "'}'")), + + ?assertEqual({errorlist, [{error, {erl_parse, {"syntax error before: '}'", 4}}}]}, + Parsed). + + +parse_bad_datatype_test() -> + cuttlefish_lager_test_backend:bounce(), + + SchemaString = lists:flatten([ + "%% @doc some doc\n", + "%% the doc continues!\n", + "{mapping, \"ring_size\", \"riak_core.ring_creation_size\", [\n", + " {default, \"blue\"}, ", + " {datatype, penguin}" + "]}.\n" + ]), + _Parsed = string(SchemaString), + ?assertEqual([], cuttlefish_lager_test_backend:get_logs()). + +files_test() -> + lager:start(), + %% files/1 takes a list of schemas in priority order. + %% Loads them in reverse order, as things are overridden + {Translations, Mappings, Validators} = files( + [ + "test/multi1.schema", + "test/multi2.schema", + "test/multi3.schema" + ]), + + ?assertEqual(6, length(Mappings)), + [M1, M2, M3, M4, M5, M6] = Mappings, + + %% Check mappings in correct order + io:format("~p", [Mappings]), + ?assertEqual(["top_level", "var1"], cuttlefish_mapping:variable(M1)), + ?assertEqual(["a", "some", "var1"], cuttlefish_mapping:variable(M2)), + ?assertEqual(["a", "some", "var2"], cuttlefish_mapping:variable(M3)), + ?assertEqual(["a", "some", "var3"], cuttlefish_mapping:variable(M4)), + ?assertEqual(["b", "some", "var1"], cuttlefish_mapping:variable(M5)), + ?assertEqual(["b", "some", "var2"], cuttlefish_mapping:variable(M6)), + + + %% Check correct mapping overrides + ?assertEqual("app_a.big_var", cuttlefish_mapping:mapping(M1)), + ?assertEqual("app_a.some_var1", cuttlefish_mapping:mapping(M2)), + ?assertEqual("app_a.some_var", cuttlefish_mapping:mapping(M3)), + ?assertEqual("app_a.some_var3", cuttlefish_mapping:mapping(M4)), + ?assertEqual("app_b.some_var3", cuttlefish_mapping:mapping(M5)), + ?assertEqual("app_b.some_var2", cuttlefish_mapping:mapping(M6)), + + ?assertEqual(6, length(Translations)), + [T1, T2, T3, T4, T5, T6] = Translations, + + %% Check translation overrides + AssertTran = fun(Mapping, Translation, Expected) -> + + %% Check Order + ?assertEqual(Mapping, cuttlefish_translation:mapping(Translation)), + %% Check Override + F1 = cuttlefish_translation:func(Translation), + ?assertEqual(Expected, F1(x)) + end, + + AssertTran("app_a.big_var", T1, "tippedy top"), + AssertTran("app_a.some_var1", T2, "a1"), + AssertTran("app_a.some_var2", T3, "a2"), + AssertTran("app_a.some_var3", T4, "toplevel"), + AssertTran("app_b.some_var1", T5, "b3"), + AssertTran("app_b.some_var2", T6, "b2"), + + %% One more time, for validators! + ?assertEqual(5, length(Validators)), + [V1, V2, V3, V4, V5] = Validators, + + %% Now check overrides + AssertVal = fun(Name, Validator, Expected) -> + %% Check Order + ?assertEqual(Name, cuttlefish_validator:name(Validator)), + %% Check Override + F1 = cuttlefish_validator:func(Validator), + ?assertEqual(Expected, F1(x)) + end, + + AssertVal("top.val", V1, false), + AssertVal("a.validator1", V2, true), + AssertVal("a.validator2", V3, false), + AssertVal("b.validator1", V4, false), + AssertVal("b.validator2", V5, true), + + ok. + +get_see_test() -> + Proplist = [ + {doc, ["line1", "line2", "line3"]}, + {see, ["a.b"]}, + {see, ["a.c"]} + ], + ?assertEqual([["a","b"],["a","c"]], get_see(Proplist)), + ok. + +see_test() -> + String = "{mapping, \"a.b\", \"e.k\", []}.\n" + ++ "%% @see a.b\n" + ++ "{mapping, \"a.c\", \"e.j\", []}.\n", + {_, Mappings, _} = strings([String]), + ?assertEqual(2, length(Mappings)), + [M1, M2] = Mappings, + ?assertEqual([], cuttlefish_mapping:see(M1)), + ?assertEqual([["a", "b"]], cuttlefish_mapping:see(M2)), + ok. + +strings_filtration_test() -> + + String = "{mapping, \"a.b\", \"e.k\", []}.\n" + ++ "{mapping, \"a.c\", \"e.k\", []}.\n" + ++ "{mapping, \"a.d\", \"e.j\", []}.\n" + ++ "{mapping, \"a.e\", \"e.j\", []}.\n" + ++ "{translation, \"e.j\", fun(X) -> \"1\" end}.\n" + ++ "{mapping, \"b.a\", \"e.i\", []}.\n" + ++ "{mapping, \"b.b\", \"e.i\", []}.\n" + ++ "{mapping, \"b.c\", \"e.i\", []}.\n" + ++ "{translation, \"e.i\", fun(X) -> \"1\" end}.\n", + {Translations, Mappings, _} = strings([String]), + ?assertEqual(2, length(Translations)), + ?assertEqual(6, length(Mappings)), + ?assertEqual(["a", "b"], cuttlefish_mapping:variable(hd(Mappings))), + ?assertEqual(["b", "b"], cuttlefish_mapping:variable(lists:nth(5, Mappings))), + ok. + +error_test() -> + {ErrorAtom, Errors} = strings(["tyktorp"]), + io:format("~p", [Errors]), + ?assertEqual(errorlist, ErrorAtom), + + {errorlist, [{error, Error}]} = strings(["{mapping, \"a\", [{datatype, unsupported_datatype}]}."]), + ?assertEqual( + "Unknown parse return: {mapping,\n {mapping,\"a\",[{datatype,unsupported_datatype}]}}", + ?XLATE(Error)), + ok. + +merge_across_multiple_schemas_test() -> + StringSchema1 = "{mapping, \"a.b\", \"erlang.key\", [merge, {default, on}]}.", + StringSchema2 = "%%@doc hi\n{mapping, \"a.b\", \"erlang.key\", [{default, off}, {datatype, flag}]}.", + + {_, Mappings, _} = strings([StringSchema1, StringSchema2]), + ?assertEqual(1, length(Mappings)), + [Mapping] = Mappings, + ?assertEqual([flag], cuttlefish_mapping:datatype(Mapping)), + ?assertEqual(on, cuttlefish_mapping:default(Mapping)), + ?assertEqual(["hi"], cuttlefish_mapping:doc(Mapping)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_translation.erl b/deps/cuttlefish/src/cuttlefish_translation.erl new file mode 100644 index 0000000..bfd618d --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_translation.erl @@ -0,0 +1,227 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_translation: models a cuttlefish translation +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_translation). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(translation, { + mapping::string(), + func::fun() | undefined + }). +-type translation() :: #translation{}. +-type translation_fun() :: fun(([proplists:property()]) -> any()). +-type raw_translation() :: {translation, string(), translation_fun()} | {translation, string()}. +-export_type([translation/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_translation/1, + mapping/1, + func/1, + replace/2]). + +-spec parse(raw_translation()) -> translation() | cuttlefish_error:error(). +parse({translation, Mapping}) -> + #translation{ + mapping = Mapping + }; +parse({translation, Mapping, Fun}) -> + #translation{ + mapping = Mapping, + func = Fun + }; +parse(X) -> + {error, {translation_parse, X}}. + +%% This assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_translation(), [translation()]) -> [translation()]. +parse_and_merge({translation, Mapping}, Translations) -> + lists:keydelete(Mapping, #translation.mapping, Translations); +parse_and_merge({translation, Mapping, _} = TranslationSource, Translations) -> + NewTranslation = parse(TranslationSource), + case lists:keyfind(Mapping, #translation.mapping, Translations) of + false -> + [ NewTranslation | Translations]; + _OldMapping -> + lists:keyreplace(Mapping, #translation.mapping, Translations, NewTranslation) + end. + +-spec is_translation(any()) -> boolean(). +is_translation(T) -> is_tuple(T) andalso element(1, T) =:= translation. + +-spec mapping(translation()) -> string(). +mapping(T) -> T#translation.mapping. + +-spec func(translation()) -> fun(). +func(T) -> T#translation.func. + +-spec replace(translation(), [translation()]) -> [translation()]. +replace(Translation, ListOfTranslations) -> + Exists = lists:keymember(mapping(Translation), #translation.mapping, ListOfTranslations), + case Exists of + true -> + lists:keyreplace(mapping(Translation), #translation.mapping, ListOfTranslations, Translation); + _ -> + [Translation | ListOfTranslations] + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + TranslationDataStruct = { + translation, + "mapping", + fun(X) -> X*2 end + }, + + Translation = parse(TranslationDataStruct), + + ?assertEqual("mapping", Translation#translation.mapping), + F = Translation#translation.func, + ?assertEqual(4, F(2)), + ok. + + +getter_test() -> + Translation = #translation{ + mapping = "mapping", + func = fun(X) -> X*2 end + }, + + ?assertEqual("mapping", mapping(Translation)), + + Fun = func(Translation), + ?assertEqual(4, Fun(2)), + ok. + + +replace_test() -> + Element1 = #translation{ + mapping = "mapping18", + func = fun(X) -> X*2 end + }, + ?assertEqual(4, (Element1#translation.func)(2)), + + Element2 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Element2#translation.func)(2)), + + SampleTranslations = [Element1, Element2], + + Override = #translation{ + mapping = "mapping1", + func = fun(X) -> X*5 end + }, + ?assertEqual(25, (Override#translation.func)(5)), + + NewTranslations = replace(Override, SampleTranslations), + ?assertEqual([Element1, Override], NewTranslations), + ok. + +parse_and_merge_test() -> + Sample1 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#translation.func)(2)), + + Sample2 = #translation{ + mapping = "mapping2", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#translation.func)(2)), + + SampleTranslations = [Sample1, Sample2], + + NewTranslations = parse_and_merge( + {translation, "mapping1", fun(X) -> X * 10 end}, + SampleTranslations), + F = func(hd(NewTranslations)), + ?assertEqual(50, F(5)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTuple} = parse(not_a_raw_translation), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_translation:parse/1 : not_a_raw_translation", + ?XLATE(ErrorTuple)), + ok. + +parse_empty_test() -> + TranslationDataStruct = { + translation, + "mapping" + }, + + Translation = parse(TranslationDataStruct), + + ?assertEqual("mapping", Translation#translation.mapping), + F = Translation#translation.func, + ?assertEqual(undefined, F), + ok. + +parse_and_merge_empty_test() -> + Sample1 = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#translation.func)(2)), + + Sample2 = #translation{ + mapping = "mapping2", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#translation.func)(2)), + + SampleTranslations = [Sample1, Sample2], + + NewTranslations = parse_and_merge( + {translation, "mapping1"}, + SampleTranslations), + F = func(hd(NewTranslations)), + ?assertEqual(1, length(NewTranslations)), + ?assertEqual(40, F(10)), + ok. + +is_translation_test() -> + ?assert(not(is_translation(not_a_translation))), + + T = #translation{ + mapping = "mapping1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (T#translation.func)(2)), + ?assert(is_translation(T)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_unit.erl b/deps/cuttlefish/src/cuttlefish_unit.erl new file mode 100644 index 0000000..6dbd2a3 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_unit.erl @@ -0,0 +1,209 @@ +-module(cuttlefish_unit). + +-include_lib("eunit/include/eunit.hrl"). +-compile([nowarn_export_all, export_all]). + +generate_templated_config(FileName, Conf, Context) -> + generate_templated_config(FileName, Conf, Context, {[], [], []}). + +generate_templated_config(FileName, Conf, Context, PreexistingSchema) -> + RenderedSchemas = case lists:all(fun(X) -> not is_list(X) end, FileName) of + true -> %% it's a single depth list, aka string + [{ cuttlefish_schema:string_fun_factory(), render_template(FileName, Context)}]; + _ -> %% It's a list of lists, aka multiple strings + [{ cuttlefish_schema:string_fun_factory(), render_template(F, Context)} || F <- FileName] + end, + Schema = cuttlefish_schema:merger(RenderedSchemas ++ [ { fun(_, _) -> PreexistingSchema end, ""} ]), + cuttlefish_generator:map(Schema, Conf). + +render_template(FileName, Context) -> + {ok, Bin, _} = erl_prim_loader:get_file(filename:absname(FileName)), + %% Stolen from rebar_templater:render/2 + %% Be sure to escape any double-quotes before rendering... + ReOpts = [global, {return, list}], + Str0 = re:replace(Bin, "\\\\", "\\\\\\", ReOpts), + Str1 = re:replace(Str0, "\"", "\\\\\"", ReOpts), + + %% the mustache module is only available in the context of a rebar run. + case {code:ensure_loaded(mustache), code:ensure_loaded(rebar_mustache), code:ensure_loaded(bbmustache)} of + {{module, mustache}, _, _} -> + mustache:render(Str1, dict:from_list(Context)); + {_, {module, rebar_mustache}, _} -> + rebar_mustache:render(Str1, dict:from_list(Context)); + {_, _, {module, bbmustache}} -> + Ret = bbmustache:render( + Bin, + maps:from_list( + [case is_atom(K) of + true -> {atom_to_list(K), V}; + false -> I + end || I = {K, V} <- Context])), + binary_to_list(Ret); + _ -> + io:format("mustache and/or rebar_mustache module not loaded. " + "This test can only be run in a rebar context.~n") + end. + +-spec generate_config(atom(), [string()]|string(), list()) -> list(). +generate_config(strings, SchemaStrings, Conf) -> + Schema = cuttlefish_schema:strings(SchemaStrings), + cuttlefish_generator:map(Schema, Conf); + +generate_config(string, SchemaString, Conf) -> + Schema = cuttlefish_schema:strings([SchemaString]), + cuttlefish_generator:map(Schema, Conf); + +generate_config(file, SchemaFile, Conf) -> + generate_config(SchemaFile, Conf). + +-spec generate_config(string(), list()) -> list(). +generate_config(SchemaFile, Conf) -> + Schema = cuttlefish_schema:files([SchemaFile]), + cuttlefish_generator:map(Schema, Conf). + +assert_valid_config(Config) -> + case Config of + List when is_list(List) -> + ok; + {error, Phase, {errorlist, Errors}} -> + erlang:exit({assert_valid_config_failed, + [{phase, Phase}, + {errorlist, Errors}]}); + Other -> + erlang:exit({assert_valid_config_failed, + [{bad_value, Other}]}) + end. + +assert_config(Config, Path, Value) -> + ok = assert_valid_config(Config), + ActualValue = case path(cuttlefish_variable:tokenize(Path), Config) of + {error, bad_nesting} -> + ?assertEqual({Path, Value}, {Path, nesting_error}); + notset -> + ?assertEqual({Path, Value}, {Path, notset}); + {ok, X} -> X + end, + ?assertEqual({Path, Value}, {Path, ActualValue}). + +assert_not_configured(Config, Path) -> + ok = assert_valid_config(Config), + case path(cuttlefish_variable:tokenize(Path), Config) of + {error, bad_nesting} -> + erlang:exit({assert_not_configured_failed, + [{bad_nesting, Path}, + {config, Config}]}); + {ok, Value} -> + erlang:exit({assert_not_configured_failed, + [{key, Path}, + {configured_to, Value}, + {config, Config}]}); + notset -> ok + end. + +%% @doc Asserts that the generated configuration is in error. +assert_error(Config) -> + ?assertMatch({error, _, {errorlist, _}}, Config). + +%% @doc Asserts that the generated configuration is in error, with the +%% error occurring in a specific phase. +assert_error_in_phase(Config, Phase) when is_atom(Phase) -> + ?assertMatch({error, Phase, {errorlist, _}}, Config). + +%% @doc Asserts that the generated configuration is in error, and the +%% given error message was emitted by the given phase. +assert_error(Config, Phase, Message) -> + assert_error_in_phase(Config, Phase), + assert_error_message(Config, Message). + +%% @doc Asserts that the generated configuration is in error and has +%% the given error messages. +assert_errors(Config, [H|_]=Messages) when is_list(H) -> + [ assert_error_message(Config, Message) || Message <- Messages ]. + +%% @doc Asserts that the generated configuration is in error, with +%% errors occuring in the given phase and containing the given +%% messages. +assert_errors(Config, Phase, [H|_]=Messages) when is_list(H) -> + assert_error_in_phase(Config, Phase), + [ assert_error_message(Config, Message) || Message <- Messages ]. + +%% @doc Asserts that the generated configuration is in error and +%% contains an error tuple that translates to the given error message +assert_error_message(Config, Message) -> + ok = assert_error(Config), + {errorlist, Errors} = element(3, Config), + chase_message(Message, Errors, Errors). + +chase_message(Message, [], Errors) -> + erlang:exit({assert_error_message_failed, + [{expected, Message}, + {actual, Errors}]}); +chase_message(Message, [{error, ErrorTerm}|T], Errors) -> + case lists:flatten(cuttlefish_error:xlate(ErrorTerm)) of + Message -> + ok; + _ -> + chase_message(Message, T, Errors) + end. + +-spec path(cuttlefish_variable:variable(), + [{ string() | atom() | binary() , term()}]) -> + {ok, any()} | notset | {error, bad_nesting}. +path(_, []) -> + {error, bad_nesting}; +path(_, undefined) -> + notset; +path([Last], Proplist) -> + case lists:dropwhile(key_no_match(Last), Proplist) of + [] -> notset; + [{_, V}|_] -> {ok, V} + end; +path([H|T], Proplist) when is_list(H)-> + case path([H], Proplist) of + {ok, SmallerProplist} -> + path(T, SmallerProplist); + Other -> + Other + end. + +-spec key_no_match(string()) -> fun((atom() | string() | binary()) -> boolean()). +key_no_match(Key) -> + fun({E, _}) when is_atom(E) -> E =/= list_to_atom(Key); + ({E, _}) when is_list(E) -> E =/= Key; + ({E, _}) when is_binary(E) -> E =/= list_to_binary(Key); + (_) -> true + end. + +-spec dump_to_file(any(), string()) -> ok. +dump_to_file(ErlangTerm, Filename) -> + {ok, S} = file:open(Filename, [write,append]), + io:format(S, "~p~n", [ErlangTerm]), + _ = file:close(S), + ok. + +-ifdef(TEST). + +path_test() -> + ?assertEqual( + {ok, "disable"}, + path(["vm_args", "-smp"], [{vm_args, [{'-smp', "disable"}]}])), + ok. + +multiple_schema_generate_templated_config_test() -> + lager:start(), + Context = [ + {mustache, "mustache"} + ], + PrereqSchema = {[], [ + cuttlefish_mapping:parse( + {mapping, "c", "app.c", [ + {default, "/c"} + ]}) + ], []}, + + Config = cuttlefish_unit:generate_templated_config("test/sample_mustache.schema", [], Context, PrereqSchema), + lager:error("~p", [Config]), + assert_config(Config, "app_a.setting_b", "/c/mustache/a.b"), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_util.erl b/deps/cuttlefish/src/cuttlefish_util.erl new file mode 100644 index 0000000..ce174aa --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_util.erl @@ -0,0 +1,191 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_util: various cuttlefish utility functions +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_util). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + replace_proplist_value/3, + numerify/1, + ceiling/1, + levenshtein/2]). + +%% Legacy API +-export([ + conf_get_value/2, + conf_get_value/3, + filter_by_variable_starts_with/2, + matches_for_variable_def/2, + fuzzy_variable_match/2 +]). + + +%% @deprecated +conf_get_value(Key, Conf) -> + lager:warning("cuttlefish_util:conf_get_value/2 has been deprecated. use cuttlefish:conf_get/2"), + cuttlefish:conf_get(Key, Conf). + +%% @deprecated +conf_get_value(Key, Conf, Default) -> + lager:warning("cuttlefish_util:conf_get_value/3 has been deprecated. use cuttlefish:conf_get/3"), + cuttlefish:conf_get(Key, Conf, Default). + +%% @deprecated +filter_by_variable_starts_with(Prefix, Conf) -> + lager:warning("cuttlefish_util:filter_by_variable_starts_with/2 has been deprecated. use cuttlefish_variable:filter_by_prefix/2"), + cuttlefish_variable:filter_by_prefix(Prefix, Conf). + +%% @deprecated +matches_for_variable_def(VarDef, Conf) -> + lager:warning("cuttlefish_util:matches_for_variable_def/2 has been deprecated. use cuttlefish_variable:fuzzy_matches/2"), + cuttlefish_variable:fuzzy_matches(VarDef, Conf). + +%% @deprecated +fuzzy_variable_match(Var, VarDef) -> + lager:warning("cuttlefish_util:fuzzy_variable_match/2 has been deprecated. use cuttlefish_variable:is_fuzzy_match/2"), + cuttlefish_variable:is_fuzzy_match(Var, VarDef). + +%% @doc replace the element in a proplist +-spec replace_proplist_value(atom() | string(), any(), [{string(), any()}]) -> [{string(), any()}]. +replace_proplist_value(Key, Value, Proplist) -> + lists:keystore(Key, 1, Proplist, {Key, Value}). + +%% @doc Turn a string into a number if `list_to_float' or +%% `list_to_integer' accept it as valid +-spec numerify(string()) -> integer()|float()|cuttlefish_error:error(). +numerify([$.|_]=Num) -> numerify([$0|Num]); +numerify(String) -> + try list_to_float(String) of + Float -> Float + catch + _:_ -> + try list_to_integer(String) of + Int -> Int + catch + _:_ -> + {error, {number_parse, String}} + end + end. + +%% @doc remember when you learned about decimal places. about a minute +%% later, you learned about rounding up and down. This is rounding up. +-spec ceiling(float()) -> integer(). +ceiling(X) -> + T = erlang:trunc(X), + case (X - T) of + Neg when Neg < 0 -> T; + Pos when Pos > 0 -> T + 1; + _ -> T + end. + +%% Levenshtein code by Adam Lindberg, Fredrik Svensson via +%% http://www.trapexit.org/String_similar_to_(Levenshtein) +%% +%%------------------------------------------------------------------------------ +%% @spec levenshtein(StringA :: string(), StringB :: string()) -> integer() +%% @doc Calculates the Levenshtein distance between two strings +%% @end +%%------------------------------------------------------------------------------ +levenshtein(Samestring, Samestring) -> 0; +levenshtein(String, []) -> length(String); +levenshtein([], String) -> length(String); +levenshtein(Source, Target) -> + levenshtein_rec(Source, Target, lists:seq(0, length(Target)), 1). + +%% Recurses over every character in the source string and calculates a list of distances +levenshtein_rec([SrcHead|SrcTail], Target, DistList, Step) -> + levenshtein_rec(SrcTail, Target, levenshtein_distlist(Target, DistList, SrcHead, [Step], Step), Step + 1); +levenshtein_rec([], _, DistList, _) -> + lists:last(DistList). + +%% Generates a distance list with distance values for every character in the target string +levenshtein_distlist([TargetHead|TargetTail], [DLH|DLT], SourceChar, NewDistList, LastDist) when length(DLT) > 0 -> + Min = lists:min([LastDist + 1, hd(DLT) + 1, DLH + dif(TargetHead, SourceChar)]), + levenshtein_distlist(TargetTail, DLT, SourceChar, NewDistList ++ [Min], Min); +levenshtein_distlist([], _, _, NewDistList, _) -> + NewDistList. + +% Calculates the difference between two characters or other values +dif(C, C) -> 0; +dif(_, _) -> 1. + +-ifdef(TEST). + +replace_proplist_value_test() -> + Proplist = [ + {"test1", 1}, + {"test2", 2}, + {"test3", 3} + ], + + NewProplist = replace_proplist_value("test2", 8, Proplist), + ?assertEqual( + 8, + proplists:get_value("test2", NewProplist) + ), + ok. + +replace_proplist_value_when_undefined_test() -> + Proplist = [ + {"test1", 1}, + {"test2", 2} + ], + + NewProplist = replace_proplist_value("test3", 3, Proplist), + ?assertEqual( + 3, + proplists:get_value("test3", NewProplist) + ), + ok. + +levenshtein_test() -> + ?assertEqual(0, levenshtein("X", "X")), + ?assertEqual(1, levenshtein("X", "XX")), + ?assertEqual(1, levenshtein("penguin", "penguino")), + ?assertEqual(1, levenshtein("dtrace", "ctrace")), + ?assertEqual(5, levenshtein("anti_entropy", "anti_entropy.tick")), + ?assertEqual(1, levenshtein("anti_entropy", "anti-entropy")), + ?assertEqual(4, levenshtein("", "four")), + ?assertEqual(4, levenshtein("four", "")), + ok. + +print_error_test() -> + application:stop(lager), + case lager:error("Error") of + {error, lager_not_running} -> + ?assertEqual(ok, (cuttlefish_error:print("Error"))); + Other -> + ?assertEqual({error, lager_not_running}, Other) + end, + ok. + +ceiling_test() -> + ?assertEqual(9, ceiling(8.99999)), + ?assertEqual(9, ceiling(8.00001)), + ?assertEqual(9, ceiling(9.0)), + ?assertEqual(-2, ceiling(-2.0000001)), + ?assertEqual(-2, ceiling(-2.9999999)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_validator.erl b/deps/cuttlefish/src/cuttlefish_validator.erl new file mode 100644 index 0000000..4b9e127 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_validator.erl @@ -0,0 +1,203 @@ +%% ------------------------------------------------------------------- +%% +%% cuttlefish_validator: models a cuttlefish validator +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_validator). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-record(validator, { + name::string(), + description::string(), + func::fun() + }). +-type validator() :: #validator{}. +-type validator_fun() :: fun((any()) -> boolean()). +-type raw_validator() :: {validator, string(), string(), validator_fun()}. +-export_type([validator/0]). + +-export([ + parse/1, + parse_and_merge/2, + is_validator/1, + name/1, + description/1, + func/1, + replace/2]). + +-spec parse(raw_validator()) -> validator() | cuttlefish_error:error(). +parse({validator, Name, Description, Fun}) -> + #validator{ + name = Name, + description = Description, + func = Fun + }; +parse(X) -> + {error, {validator_parse, X}}. + +%% This assumes it's run as part of a foldl over new schema elements +%% in which case, there's only ever one instance of a key in the list +%% so keyreplace works fine. +-spec parse_and_merge( + raw_validator(), [validator()]) -> [validator()|cuttlefish_error:error()]. +parse_and_merge({validator, ValidatorName, _, _} = ValidatorSource, Validators) -> + NewValidator = parse(ValidatorSource), + case lists:keyfind(ValidatorName, #validator.name, Validators) of + false -> + [ NewValidator | Validators]; + _OldMapping -> + lists:keyreplace(ValidatorName, #validator.name, Validators, NewValidator) + end. + +-spec is_validator(any()) -> boolean(). +is_validator(V) -> is_tuple(V) andalso element(1, V) =:= validator. + +-spec name(validator()) -> string(). +name(V) -> V#validator.name. + +-spec description(validator()) -> string(). +description(V) -> V#validator.description. + +-spec func(validator()) -> fun(). +func(V) -> V#validator.func. + +-spec replace(validator(), [validator()]) -> [validator()]. +replace(Validator, ListOfValidators) -> + Exists = lists:keymember(name(Validator), #validator.name, ListOfValidators), + case Exists of + true -> + lists:keyreplace(name(Validator), #validator.name, ListOfValidators, Validator); + _ -> + [Validator | ListOfValidators] + end. + +-ifdef(TEST). + +-define(XLATE(X), lists:flatten(cuttlefish_error:xlate(X))). + +parse_test() -> + ValidatorDataStruct = { + validator, + "name", + "description", + fun(X) -> X*2 end + }, + + Validator = parse(ValidatorDataStruct), + + ?assertEqual("name", Validator#validator.name), + ?assertEqual("description", Validator#validator.description), + F = Validator#validator.func, + ?assertEqual(4, F(2)), + ok. + + +getter_test() -> + Validator = #validator{ + name = "name", + description = "description", + func = fun(X) -> X*2 end + }, + + ?assertEqual("name", name(Validator)), + ?assertEqual("description", description(Validator)), + + Fun = func(Validator), + ?assertEqual(4, Fun(2)), + ok. + + +replace_test() -> + Element1 = #validator{ + name = "name18", + description = "description18", + func = fun(X) -> X*2 end + }, + ?assertEqual(4, (Element1#validator.func)(2)), + + Element2 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Element2#validator.func)(2)), + + SampleValidators = [Element1, Element2], + + Override = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*5 end + }, + ?assertEqual(25, (Override#validator.func)(5)), + + NewValidators = replace(Override, SampleValidators), + ?assertEqual([Element1, Override], NewValidators), + ok. + +remove_duplicates_test() -> + Sample1 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*3 end + }, + ?assertEqual(6, (Sample1#validator.func)(2)), + + Sample2 = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (Sample2#validator.func)(2)), + + SampleValidators = [Sample1, Sample2], + + [NewValidator|_] = parse_and_merge( + {validator, "name1", "description2", fun(X) -> X*10 end}, + SampleValidators), + F = func(NewValidator), + ?assertEqual(50, F(5)), + ?assertEqual("description2", description(NewValidator)), + ?assertEqual("name1", name(NewValidator)), + ok. + +parse_error_test() -> + {ErrorAtom, ErrorTerm} = parse(not_a_raw_validator), + ?assertEqual(error, ErrorAtom), + ?assertEqual( + "Poorly formatted input to cuttlefish_validator:parse/1 : not_a_raw_validator", + ?XLATE(ErrorTerm)), + ok. + +is_validator_test() -> + ?assert(not(is_validator(not_a_validator))), + + V = #validator{ + name = "name1", + description = "description1", + func = fun(X) -> X*4 end + }, + ?assertEqual(8, (V#validator.func)(2)), + ?assert(is_validator(V)), + ok. + +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_variable.erl b/deps/cuttlefish/src/cuttlefish_variable.erl new file mode 100644 index 0000000..08bdf82 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_variable.erl @@ -0,0 +1,272 @@ +%% ------------------------------------------------------------------- +%% +%% handles both variable and variable definitions +%% +%% Copyright (c) 2013 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. +%% +%% ------------------------------------------------------------------- +-module(cuttlefish_variable). + +-type variable() :: [string()]. +-export_type([variable/0]). + +-ifdef(TEST). +-ifdef(EQC). +-include_lib("eqc/include/eqc.hrl"). +-define(QC_OUT(Prop), on_output(fun(F,A) -> io:format(user, F, A) end, Prop)). +-endif. +-include_lib("eunit/include/eunit.hrl"). +-endif. + +-export([ + format/1, + tokenize/1, + split_on_match/1, + replace_match/2, + extract_first_match/2, + fuzzy_matches/2, + is_fuzzy_match/2, + filter_by_prefix/2 +]). + +%% @doc Formats a variable back into its dot-separated version. +%% Inverse of tokenize/1. +-spec format(variable()) -> string(). +format(Key=[H|_]) when is_list(H) -> + Escaped = [re:replace(Word, "[.]", "\\\\&", [{return, list}, global]) || + Word <- Key], + string:join(Escaped, "."). + +%% @doc like string:tokens(Key, "."), but if the dot was escaped +%% i.e. \\., don't tokenize that +-spec tokenize(string()) -> variable(). +tokenize(Key) -> + tokenize(Key, "", []). + +tokenize([$\\, $. |Rest], Part, Acc) -> + tokenize(Rest, [$. |Part], Acc); +tokenize([$. |Rest], Part, Acc) -> + tokenize(Rest, "", [lists:reverse(Part)|Acc]); +tokenize([], "", Acc) -> + lists:reverse(Acc); +tokenize([], Part, Acc) -> + lists:reverse([lists:reverse(Part)|Acc]); +tokenize([Char|Rest], Part, Acc) -> + tokenize(Rest, [Char|Part], Acc). + +%% @doc split a key definition into: +%% * Prefix: Things before the $var +%% * Var: The $var itself +%% * Suffix: Things after the $var +-spec split_on_match(variable()) -> {variable(), string(), variable()}. +split_on_match(Variable) -> + {PrefixToks, MatchGroup, SuffixToks} = lists:foldl( + fun(T, {Prefix, MatchGroup, Suffix}) -> + case {T, MatchGroup} of + {[$$|_], []} -> {Prefix, T, Suffix}; + {_, []} -> {[T|Prefix], MatchGroup, Suffix}; + {_, _} -> {Prefix, MatchGroup, [T|Suffix]} + end + end, + {[], [], []}, + Variable), + { + lists:reverse(PrefixToks), + MatchGroup, + lists:reverse(SuffixToks) + }. + +%% @doc replaces the $var in Key with Sub +-spec replace_match(variable(), string()) -> variable(). +replace_match(Variable, Sub) -> + [ begin + case {H, Sub} of + {$$, undefined} -> T; + {$$, Sub} -> Sub; + _ -> Tok + end + end || [H|T]=Tok <- Variable]. + +-spec extract_first_match(variable(), variable()) -> + nomatch | [{string(), string()}]. +%% If the lengths are equal, try to pair up a fuzzy segment with its match. +extract_first_match(VariableDef, Variable) when length(VariableDef) == length(Variable) -> + extract_first_match(VariableDef, Variable, nomatch); +%% This could never match because they are different lengths. +extract_first_match(_,_) -> nomatch. + +%% We have a perfect match, or no match at all, so return the result. +extract_first_match([], [], Result) when is_list(Result) -> + %% If the Result is 'nomatch', the last function clause will be + %% the only one that matches. + lists:reverse(Result); +%% We found the first fuzzy segment, grab the binding of the segment. +extract_first_match([[$$|_]=Fuzzy|VariableDef], [Value|Variable], nomatch) -> + extract_first_match(VariableDef, Variable, [{Fuzzy, Value}]); +%% We found a fuzzy segment and already have a match, so just recurse. +extract_first_match([[$$|_]=Fuzzy|VariableDef], [Value|Variable], Result) -> + extract_first_match(VariableDef, Variable, [{Fuzzy, Value}|Result]); +%% We found two segments that are static and equal. +extract_first_match([X|VariableDef], [X|Variable], Result) -> + extract_first_match(VariableDef, Variable, Result); +%% Something else happened, so we don't match! +extract_first_match(_,_,_) -> nomatch. + +%% @doc given a KeyDef "a.b.$c.d", what are the possible values for $c +%% in the set of Keys in Conf = [{Key, Value}]? +-spec fuzzy_matches(variable(), cuttlefish_conf:conf()) -> + [{string(), any()}]. +fuzzy_matches(VariableDef, Conf) -> + lists:foldl( + fun({Variable, _}, Acc) -> + case extract_first_match(VariableDef, Variable) of + nomatch -> + Acc; + [Match|_] -> + [Match|Acc] + end + end, [], Conf). + +%% @doc could this fixed Key be a match for the variable key KeyDef? +%% e.g. could a.b.$var.d =:= a.b.c.d? +-spec is_fuzzy_match(variable(), variable()) -> boolean(). +is_fuzzy_match(Variable, VariableDef) -> + case length(Variable) =:= length(VariableDef) of + true -> + Zipped = lists:zip(Variable, VariableDef), + lists:all( + fun({X,Y}) -> + X =:= Y orelse hd(Y) =:= $$ + end, + Zipped); + _ -> false + end. + + +%% @doc For Proplist, return the subset of the proplist that starts +%% with "Key" +-spec filter_by_prefix(string() | [string()], + [{[string()], any()}]) -> + [{[string()], any()}]. +filter_by_prefix([H|_T]=Prefix, Proplist) when is_list(H) -> + [ T || {Key,_}=T <- Proplist, lists:prefix(Prefix, Key) ]; +filter_by_prefix(StringPrefix, Proplist) -> + filter_by_prefix(tokenize(StringPrefix), Proplist). + +-ifdef(TEST). + +tokenize_variable_key_test() -> + ?assertEqual(["a", "b", "c", "d"], (tokenize("a.b.c.d"))), + ?assertEqual(["a", "b.c", "d"], (tokenize("a.b\\.c.d"))), + + %% Covers GH #22 + ?assertEqual( + ["listener", "http"], + (tokenize("listener.http.")) + ), + ok. + +split_variable_on_match_test() -> + ?assertEqual({["a", "b"], "$c", ["d", "e"]}, (split_on_match(["a", "b", "$c", "d", "e"]))), + ?assertEqual({["a", "b", "c", "d", "e"], [], []}, (split_on_match(["a", "b", "c", "d", "e"]))), + ?assertEqual({[], "$a", ["b", "c", "d", "e"]}, (split_on_match(["$a", "b", "c", "d", "e"]))), + ok. + +variable_match_replace_test() -> + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "d"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "e"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "f"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "b", "c"], "g"))), + ?assertEqual(["a", "g", "c"], (replace_match(["a", "$b", "c"], "g"))), + ?assertEqual(["a", "b", "c"], (replace_match(["a", "$b", "c"], undefined))), + + ok. + +fuzzy_variable_match_test() -> + ?assert(is_fuzzy_match(["alpha","bravo","charlie","delta"], ["alpha","bravo","charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","anything","delta"], ["alpha","bravo","$charlie","delta"])), + ?assertNot(is_fuzzy_match(["alpha","bravo.anything","delta"], ["alpha","bravo","charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","any.thing","delta"], ["alpha","bravo","$charlie","delta"])), + ?assert(is_fuzzy_match(["alpha","bravo","any.thing.you.need","delta"], ["alpha","bravo","$charlie","delta"])), + ok. + +matches_for_variable_def_test() -> + Conf = [ + {["multi_backend","backend1","storage_backend"], 1}, + {["multi_backend","backend2","storage_backend"], 2}, + {["multi_backend","backend.3","storage_backend"], 3}, + {["multi_backend","backend4","storage_backend"], 4} + ], + + Vars = proplists:get_all_values("$name", + fuzzy_matches(["multi_backend","$name","storage_backend"], Conf) + ), + + ?assertEqual(4, (length(Vars))), + ?assert(lists:member("backend1", Vars)), + ?assert(lists:member("backend2", Vars)), + ?assert(lists:member("backend.3", Vars)), + ?assert(lists:member("backend4", Vars)), + ?assertEqual(4, (length(Vars))), + ok. + +filter_by_variable_starts_with_test() -> + Proplist = [ + {["regular","key"], 1}, + {["other","normal","key"], 2}, + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["interleaved","key"], 5}, + {["prefixed","key3"], 6} + ], + + FilteredByList = filter_by_prefix(["prefixed"], Proplist), + ?assertEqual([ + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["prefixed","key3"], 6} + ], + FilteredByList), + + FilteredByString = filter_by_prefix("prefixed", Proplist), + ?assertEqual([ + {["prefixed","key1"], 3}, + {["prefixed","key2"], 4}, + {["prefixed","key3"], 6} + ], + FilteredByString), + ok. + +-ifdef(EQC). +variable_roundtrip_test_() -> + {timeout, 15, + [?_assert(quickcheck(eqc:testing_time(3,?QC_OUT(prop_format_tokenize_roundtrip()))))]}. + +prop_format_tokenize_roundtrip() -> + ?FORALL(Variable, non_empty(list(gen_word())), + tokenize(format(Variable)) == Variable). + +gen_word() -> + ?LET(F, non_empty(list(gen_word_char())), lists:flatten(F)). + +gen_word_char() -> + oneof([$., $_, $-, + choose($0, $9), + choose($A, $Z), + choose($a, $z)]). +-endif. +-endif. diff --git a/deps/cuttlefish/src/cuttlefish_vmargs.erl b/deps/cuttlefish/src/cuttlefish_vmargs.erl new file mode 100644 index 0000000..8908189 --- /dev/null +++ b/deps/cuttlefish/src/cuttlefish_vmargs.erl @@ -0,0 +1,57 @@ +-module(cuttlefish_vmargs). + +-export([stringify/1]). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-endif. + +%% @doc turns a proplist into a list of strings suitable for vm.args files +-spec stringify([{any(), string()}]) -> [string()]. +stringify(VMArgsProplist) -> + [ stringify_line(K, V) || {K, V} <- VMArgsProplist ]. + + +stringify_line(K, V) when is_list(V) -> + lists:flatten(io_lib:format("~s ~s", [K, V])); +stringify_line(K, V) -> + lists:flatten(io_lib:format("~s ~w", [K, V])). + +-ifdef(TEST). + +stringify_test() -> + VMArgsProplist = [ + {'-name', "dev1@127.0.0.1"}, + {'-setcookie', 'riak'}, + {'-smp', enable}, + {'+W',"w"}, + {'+K',"true"}, + {'+A',"64"}, + {'-env ERL_MAX_PORTS',"64000"}, + {'-env ERL_FULLSWEEP_AFTER',"0"}, + {'-env ERL_CRASH_DUMP',"./log/erl_crash.dump"}, + {'-env ERL_MAX_ETS_TABLES',"256000"}, + {'+P', "256000"}, + {'-kernel net_ticktime', "42"} + ], + + VMArgs = stringify(VMArgsProplist), + + Expected = [ + "-name dev1@127.0.0.1", + "-setcookie riak", + "-smp enable", + "+W w", + "+K true", + "+A 64", + "-env ERL_MAX_PORTS 64000", + "-env ERL_FULLSWEEP_AFTER 0", + "-env ERL_CRASH_DUMP ./log/erl_crash.dump", + "-env ERL_MAX_ETS_TABLES 256000", + "+P 256000", + "-kernel net_ticktime 42" + ], + [ ?assertEqual(E, V) || {E, V} <- lists:zip(Expected, VMArgs)], + ok. + +-endif. diff --git a/deps/cuttlefish/src/lager_stderr_backend.erl b/deps/cuttlefish/src/lager_stderr_backend.erl new file mode 100644 index 0000000..75a9753 --- /dev/null +++ b/deps/cuttlefish/src/lager_stderr_backend.erl @@ -0,0 +1,351 @@ +%% Copyright (c) 2011-2012 Basho Technologies, Inc. All Rights Reserved. +%% +%% This file is provided to you 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. + +%% @doc Console backend for lager. Configured with a single option, the loglevel +%% desired. + +-module(lager_stderr_backend). + +-behaviour(gen_event). + +-export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, + code_change/3]). + +-record(state, {level :: {'mask', integer()}, + formatter :: atom(), + format_config :: any(), + colors=[] :: list()}). + +-ifdef(TEST). +-include_lib("eunit/include/eunit.hrl"). +-compile([{parse_transform, lager_transform}]). +-endif. + +-include_lib("lager/include/lager.hrl"). +-define(TERSE_FORMAT,[time, " ", color, "[", severity,"] ", message]). + +%% @private +init([Level, true]) -> % for backwards compatibility + init([Level,{lager_default_formatter,[{eol, eol()}]}]); +init([Level,false]) -> % for backwards compatibility + init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]); +init([Level,{Formatter,FormatterConfig}]) when is_atom(Formatter) -> + Colors = case application:get_env(lager, colored) of + {ok, true} -> + {ok, LagerColors} = application:get_env(lager, colors), + LagerColors; + _ -> [] + end, + + try {is_new_style_console_available(), lager_util:config_to_mask(Level)} of + {false, _} -> + Msg = "Lager's console backend is incompatible with the 'old' shell, not enabling it", + %% be as noisy as possible, log to every possible place + try + alarm_handler:set_alarm({?MODULE, "WARNING: " ++ Msg}) + catch + _:_ -> + error_logger:warning_msg(Msg ++ "~n") + end, + io:format("WARNING: " ++ Msg ++ "~n"), + ?INT_LOG(warning, Msg, []), + {error, {fatal, old_shell}}; + {true, Levels} -> + {ok, #state{level=Levels, + formatter=Formatter, + format_config=FormatterConfig, + colors=Colors}} + catch + _:_ -> + {error, {fatal, bad_log_level}} + end; +init(Level) -> + init([Level,{lager_default_formatter,?TERSE_FORMAT ++ [eol()]}]). + + +%% @private +handle_call(get_loglevel, #state{level=Level} = State) -> + {ok, Level, State}; +handle_call({set_loglevel, Level}, State) -> + try lager_util:config_to_mask(Level) of + Levels -> + {ok, ok, State#state{level=Levels}} + catch + _:_ -> + {ok, {error, bad_log_level}, State} + end; +handle_call(_Request, State) -> + {ok, ok, State}. + +%% @private +handle_event({log, Message}, + #state{level=L,formatter=Formatter,format_config=FormatConfig,colors=Colors} = State) -> + case lager_util:is_loggable(Message, L, ?MODULE) of + true -> + io:put_chars(standard_error, Formatter:format(Message,FormatConfig,Colors)), + {ok, State}; + false -> + {ok, State} + end; +handle_event(_Event, State) -> + {ok, State}. + +%% @private +handle_info(_Info, State) -> + {ok, State}. + +%% @private +terminate(_Reason, _State) -> + ok. + +%% @private +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +eol() -> + case application:get_env(lager, colored) of + {ok, true} -> + "\e[0m\r\n"; + _ -> + "\r\n" + end. + +-ifdef(TEST). +is_new_style_console_available() -> + true. +-else. +is_new_style_console_available() -> + %% Criteria: + %% 1. If the user has specified '-noshell' on the command line, + %% then we will pretend that the new-style console is available. + %% If there is no shell at all, then we don't have to worry + %% about log events being blocked by the old-style shell. + %% 2. Windows doesn't support the new shell, so all windows users + %% have is the oldshell. + %% 3. If the user_drv process iss registered, all is OK. + %% 'user_drv' is a registered proc name used by the "new" + %% console driver. + init:get_argument(noshell) /= error orelse + element(1, os:type()) == win32 orelse + is_pid(whereis(user_drv)). +-endif. + +-ifdef(TEST). +console_log_test_() -> + %% tiny recursive fun that pretends to be a group leader + F = fun(Self) -> + fun() -> + YComb = fun(Fun) -> + receive + {io_request, From, ReplyAs, {put_chars, unicode, _Msg}} = Y -> + From ! {io_reply, ReplyAs, ok}, + Self ! Y, + Fun(Fun); + Other -> + ?debugFmt("unexpected message ~p~n", [Other]), + Self ! Other + end + end, + YComb(YComb) + end + end, + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, []), + application:set_env(lager, error_logger_redirect, false), + lager:start(), + whereis(standard_error) + end, + fun(User) -> + unregister(standard_error), + register(standard_error, User), + application:stop(lager), + error_logger:tty(true) + end, + [ + {"regular console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:log(info, self(), "Test message"), + receive + {io_request, From, ReplyAs, {put_chars, unicode, Msg}} -> + From ! {io_reply, ReplyAs, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[info]", TestMsg], re:split(Msg, " ", [{return, list}, {parts, 3}])) + after + 500 -> + ?assert(false) + end + end + }, + {"verbose console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, [info, true]), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:info("Test message"), + PidStr = pid_to_list(self()), + receive + {io_request, _, _, {put_chars, unicode, Msg}} -> + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, _, "[info]", PidStr, _, TestMsg], re:split(Msg, "[ @]", [{return, list}, {parts, 6}])) + after + 500 -> + ?assert(false) + end + end + }, + {"custom format console logging", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + erlang:group_leader(Pid, whereis(lager_event)), + gen_event:add_handler(lager_event, lager_stderr_backend, + [info, {lager_default_formatter, [date,"#",time,"#",severity,"#",node,"#",pid,"#", + module,"#",function,"#",file,"#",line,"#",message,"\r\n"]}]), + lager_config:set(loglevel, {?INFO, []}), + lager:info("Test message"), + PidStr = pid_to_list(self()), + NodeStr = atom_to_list(node()), + ModuleStr = atom_to_list(?MODULE), + receive + {io_request, _, _, {put_chars, unicode, Msg}} -> + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, _, "info", NodeStr, PidStr, ModuleStr, _, _, _, TestMsg], + re:split(Msg, "#", [{return, list}, {parts, 10}])) + after + 500 -> + ?assert(false) + end + end + }, + {"blacklisting a loglevel works", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:set_loglevel(lager_stderr_backend, '!=info'), + erlang:group_leader(Pid, whereis(lager_event)), + lager:debug("Test message"), + receive + {io_request, From1, ReplyAs1, {put_chars, unicode, Msg1}} -> + From1 ! {io_reply, ReplyAs1, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[debug]", TestMsg], re:split(Msg1, " ", [{return, list}, {parts, 3}])) + after + 1000 -> + ?assert(false) + end, + %% info is blacklisted + lager:info("Test message"), + receive + {io_request, From2, ReplyAs2, {put_chars, unicode, _Msg2}} -> + From2 ! {io_reply, ReplyAs2, ok}, + %% OOPS ?assert(false) + ok + after + 500 -> + ?assert(true) + end + end + }, + {"whitelisting a loglevel works", + fun() -> + Pid = spawn(F(self())), + unregister(standard_error), + register(standard_error, Pid), + gen_event:add_handler(lager_event, lager_stderr_backend, info), + lager_config:set(loglevel, {element(2, lager_util:config_to_mask(info)), []}), + lager:set_loglevel(lager_stderr_backend, '=debug'), + erlang:group_leader(Pid, whereis(lager_event)), + lager:debug("Test message"), + receive + {io_request, From1, ReplyAs1, {put_chars, unicode, Msg1}} -> + From1 ! {io_reply, ReplyAs1, ok}, + TestMsg = "Test message" ++ eol(), + ?assertMatch([_, "[debug]", TestMsg], re:split(Msg1, " ", [{return, list}, {parts, 3}])) + after + 1000 -> + ?assert(false) + end, + %% info is blacklisted + lager:error("Test message"), + receive + {io_request, From2, ReplyAs2, {put_chars, unicode, _Msg2}} -> + From2 ! {io_reply, ReplyAs2, ok}, + %% OOPS! ?assert(false) + ok + after + 500 -> + ?assert(true) + end + end + } + ] + }. + +set_loglevel_test_() -> + {foreach, + fun() -> + error_logger:tty(false), + application:load(lager), + application:set_env(lager, handlers, [{lager_stderr_backend, info}]), + application:set_env(lager, error_logger_redirect, false), + application:start(lager) + end, + fun(_) -> + application:stop(lager), + error_logger:tty(true) + end, + [ + {"Get/set loglevel test", + fun() -> + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, debug), + ?assertEqual(debug, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, '!=debug'), + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + lager:set_loglevel(lager_stderr_backend, '!=info'), + ?assertEqual(debug, lager:get_loglevel(lager_stderr_backend)), + ok + end + }, + {"Get/set invalid loglevel test", + fun() -> + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)), + ?assertEqual({error, bad_log_level}, + lager:set_loglevel(lager_stderr_backend, fatfinger)), + ?assertEqual(info, lager:get_loglevel(lager_stderr_backend)) + end + } + + ] + }. + +-endif. diff --git a/deps/eetcd/LICENSE b/deps/eetcd/LICENSE new file mode 100644 index 0000000..48864f2 --- /dev/null +++ b/deps/eetcd/LICENSE @@ -0,0 +1,191 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2018, zhongwencool . + + 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/deps/eetcd/Makefile b/deps/eetcd/Makefile new file mode 100644 index 0000000..31c6ea2 --- /dev/null +++ b/deps/eetcd/Makefile @@ -0,0 +1,24 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += -I ./_build/default/plugins/gpb/include + +DEPS += gun +dep_gun = hex 1.3.2 gun + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/eetcd/README.md b/deps/eetcd/README.md new file mode 100644 index 0000000..799db1b --- /dev/null +++ b/deps/eetcd/README.md @@ -0,0 +1,284 @@ +[![Build Status](https://travis-ci.org/zhongwencool/eetcd.svg?branch=master)](https://travis-ci.org/zhongwencool/eetcd) +[![GitHub tag](https://img.shields.io/github/tag/zhongwencool/eetcd.svg)](https://github.com/zhongwencool/eetcd) +[![Hex.pm Version](https://img.shields.io/hexpm/v/eetcd.svg)](https://hex.pm/packages/eetcd) + +eetcd +===== + +Erlang client for the [etcd](https://github.com/etcd-io/etcd) API v3. +`eetcd` aims to be a high-quality, production-ready client for the Protocol Buffer-based etcd v3 API. +All core features are supported. +It includes reconnection, transaction, software transactional memory, high-level query builders and lease management, watchers. + +See [the full API documentation](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md) for more. + +1. Adding, Fetching and Deleting Keys; +2. Transaction; +3. Lease -- as well as a few convenience features like continuous keep alive; +4. Watch; +5. Maintenance -- User, Role, Authentication, Cluster, Alarms; +6. Lock; +7. Election. + +Quick Start +----- +#### 1. Setup +```erlang +## rebar.config +{deps, [eetcd]}. + +``` +zero configuration. + +#### 2. Usage +All etcd3 API's are defined in [gRPC services](https://github.com/etcd-io/etcd/blob/master/etcdserver/etcdserverpb/rpc.proto), which categorize remote procedure calls (RPCs) understood by the etcd server. +A full listing of all etcd RPCs are documented in markdown in the [gRPC API listing](https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md). + +Firstly, open eetcd when your application starts. + +```erlang +-module(my_app). +-behaviour(application). +-export([start/2, stop/1]). +-define(NAME, etcd_example_conn). + +start(_StartType, _StartArgs) -> + Endpoints = ["127.0.0.1:2379", "127.0.0.1:2579", "127.0.0.1:2479"], + {ok, _Pid} = eetcd:open(?NAME, Endpoints), + my_sup:start_link(). + +stop(_State) -> + eetcd:close(?NAME), + ok. +``` + +##### KV - Creates, updates, fetches, and deletes key-value pairs. +```erlang + +%% creates +{ok,#{header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 6}}} + = eetcd_kv:put(?NAME, <<"key">>, <<"value">>). + +%% updates +Ctx = eetcd_kv:new(?NAME), +CtxExist = eetcd_kv:with_key(Ctx, <<"KeyExist">>), +Ctx2 = eetcd_kv:with_value(CtxExist, <<"NewValue">>), +Ctx3 = eetcd_kv:with_ignore_value(Ctx2), +{ok,#{header := + #{cluster_id := 11360555963653019356, + member_id := 16409577466894847729,raft_term := 5, + revision := 7}}} + = eetcd_kv:put(Ctx3). + +CtxNoExist = eetcd_kv:with_key(Ctx, <<"KeyNoExist">>), +Ctx5 = eetcd_kv:with_value(CtxNoExist, <<"NewValue">>), +Ctx6 = eetcd_kv:with_ignore_value(Ctx5), + +{error,{grpc_error,#{'grpc-message' := + <<"etcdserver: value is provided">>, + 'grpc-status' := 3}}} + = eetcd_kv:put(Ctx6). + +%% fetches +{ok,#{count := 1, + header := + #{cluster_id := 11360555963653019356, + member_id := 16409577466894847729,raft_term := 5, + revision := 7}, + kvs := + [#{create_revision := 7,key := <<"KeyExist">>,lease := 0, + mod_revision := 7,value := <<"NewValue">>,version := 1}], + more := false}} + = eetcd_kv:get(?NAME, <<"KeyExist">>). +%% fetches all keys +Ctx = eetcd_kv:new(?Name), +Ctx1 = eetcd_kv:with_key(Ctx, "\0"), +Ctx2 = eetcd_kv:with_range_end(Ctx1, "\0"), +Ctx3 = eetcd_kv:with_sort(Ctx2, 'KEY', 'ASCEND'), +{ok,#{count := 2, + header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 7}, + kvs := + [#{create_revision := 7,key := <<"KeyExist">>,lease := 0, + mod_revision := 7,value := <<"NewValue">>,version := 1} + %% .... + ], more := false}} + = eetcd_kv:get(Ctx3). + +%% deletes +{ok,#{deleted := 1, + header := + #{cluster_id := 11360555963653019356, + member_id := 11020526813496739906,raft_term := 5, + revision := 7}, + prev_kvs := []}} + = eetcd_kv:delete(?NAME, "KeyExist"). +%% batch deletes +Ctx = eetcd_kv:new(register), +Ctx1 = eetcd_kv:with_key(Ctx, "K"), +Ctx2 = eetcd_kv:with_prefix(Ctx1), +{ok,#{deleted := 100, + header := + #{cluster_id := 11360555963653019356, + member_id := 13803658152347727308,raft_term := 5, + revision := 9}, + prev_kvs := []}} + = eetcd_kv:delete(Ctx2). + +``` + +##### Txn - Transaction + +```erlang +%% implement etcd v2 CompareAndSwap by Txn +{ok,#{count := 1, + header := #{revision := Revision}, + kvs := + [#{ mod_revision := ModRev,value := Value}], + more := false}} + = eetcd_kv:get(?NAME, Kv1), + +Cmp = eetcd_compare:new(Kv1), +If = eetcd_compare:mod_revision(Cmp, "=", ModRev), +Then = eetcd_op:put(eetcd_kv:with_value(eetcd_kv:with_key(eetcd_kv:new(), Key), <<"Change", Value/binary>>)), +Else = [], +eetcd_kv:txn(EtcdConnName, If, Then, Else). + +``` + +##### Lease - Primitives for consuming client keep-alive messages. +```erlang + 1> eetcd_lease:grant(Name, TTL), +{ok,#{'ID' => 1076765125482045706,'TTL' => 100,error => <<>>, + header => + #{cluster_id => 11360555963653019356, + member_id => 16409577466894847729,raft_term => 5, + revision => 9}}} +2> eetcd_lease:keep_alive(Name, 1076765125482045706). +{ok,<0.456.0>} + +3> eetcd_lease:leases(Name). +{ok,#{header => + #{cluster_id => 11360555963653019356, + member_id => 11020526813496739906,raft_term => 5, + revision => 9}, + leases => [#{'ID' => 1076765125482045706}]}} + +``` +More detailed examples see [eetcd_kv_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_kv_SUITE.erl) [eetcd_watch_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_watch_SUITE.erl) [eetcd_lease_SUITE.erl](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_lease_SUITE.erl). + +##### Watch - Monitors changes to keys. +```erlang +-module(watch_example). + +-behaviour(gen_server). +-define(NAME, watch_example_conn). + +-export([start_link/0]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). + +start_link() -> + gen_server:start({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + erlang:process_flag(trap_exit, true), + Registers = ["127.0.0.1:2379", "127.0.0.1:2579", "127.0.0.1:2479"], + {ok, _Pid} = eetcd:open(?NAME, Registers), + ets:new(?MODULE, [named_table, {read_concurrency, true}, public]), + {ok, Services, Revision} = get_exist_services(), + ets:insert(?MODULE, Services), + {ok, Conn} = watch_services_event(Revision), + {ok, Conn}. + +get_exist_services() -> + Ctx = eetcd_kv:new(?NAME), + Ctx1 = eetcd_kv:with_key(Ctx, <<"heartbeat:">>), + Ctx2 = eetcd_kv:with_prefix(Ctx1), + Ctx3 = eetcd_kv:with_keys_only(Ctx2), + {ok, #{header := #{revision := Revision}, kvs := Services}} = eetcd_kv:get(Ctx3), + Services = + [begin + [_, Type, IP, Port] = binary:split(Key, [<<"|">>], [global]), + {{IP, Port}, Type} + end || #{key := Key} <- Services], + {ok, Services, Revision}. + +watch_services_event(Revision) -> + ReqInit = eetcd_watch:new(), + ReqKey = eetcd_watch:with_key(ReqInit, <<"heartbeat:">>), + ReqPrefix = eetcd_watch:with_prefix(ReqKey), + Req = eetcd_watch:with_start_revision(ReqPrefix, Revision), + eetcd_watch:watch(?NAME, Req). + +handle_info(Msg, Conn) -> + case eetcd_watch:watch_stream(Conn, Msg) of + {ok, NewConn, WatchEvent} -> + update_services(WatchEvent), + {noreply, NewConn}; + {more, NewConn} -> + {noreply, NewConn}; + {error, _Reason} -> + #{revision := Revision} = Conn, + {ok, NewConn} = watch_services_event(Revision), + {noreply, NewConn}; + unknown -> + {noreply, Conn} + end. + +handle_call(_Request, _From, Conn) -> + {reply, ok, Conn}. + +handle_cast(_Request, Conn) -> + {noreply, Conn}. + +terminate(_Reason, _Conn) -> + eetcd:close(?NAME), + ok. + +code_change(_OldVsn, Conn, _Extra) -> + {ok, Conn}. + +update_services(#{events := Events}) -> + [begin + [_, Type, IP, Port] = binary:split(Key, [<<"|">>], [global]), + case EventType of + 'PUT' -> ets:insert(?MODULE, {{IP, Port}, Type}); + 'DELETE' -> ets:delete(?MODULE, {IP, Port}) + end + end || #{kv := #{key := Key}, type := EventType} <- Events], + ok. +``` + +##### Election Example +[Election Example](https://github.com/zhongwencool/eetcd/blob/master/test/eetcd_election_leader_example.erl) + +##### Debug information +```erlang +1>eetcd:info(). +| Name | Status | IP:Port | Conn | Gun |LeaseNum| +| test | Active |127.0.0.1:2379|<0.535.0> |<0.536.0> | 1 | +| test | Active |127.0.0.1:2579|<0.535.0> |<0.539.0> | 2 | +| Name | Status | IP:Port | Conn | ReconnectSecond | +| test | Freeze |127.0.0.1:2479|<0.535.0> | 1.6 | +``` +- `Active` is normal connection. +- `Freeze` is a broken connection who try to reconnect after `ReconnectSecond`. + +Test +----- + +```erlang +rebar3 ct +``` +Gen proto and client file +----- +```erlang +rebar3 etcd gen +``` + + diff --git a/deps/eetcd/include/eetcd.hrl b/deps/eetcd/include/eetcd.hrl new file mode 100644 index 0000000..f3a2943 --- /dev/null +++ b/deps/eetcd/include/eetcd.hrl @@ -0,0 +1,37 @@ +-ifndef(etcd_hrl). +-define(etcd_hrl, true). +-include_lib("kernel/include/logger.hrl"). + +-define(HEADERS, [{<<"grpc-encoding">>, <<"identity">>}, {<<"content-type">>, <<"application/grpc+proto">>}]). +-define(GRPC_ERROR(Status, Message), {grpc_error, #{'grpc-status' => Status, 'grpc-message' => Message}}). + +-export_type([key/0, value/0, context/0, name/0, grpc_status/0, eetcd_error/0]). +-type key() :: iodata(). +-type value() :: iodata(). +-type context() :: map(). +-type name() :: atom() | reference(). +-type eetcd_error() :: timeout|{grpc_error,grpc_status()}|{gun_down,any()}|{gun_conn_error,any()}|{gun_stream_error,any()}|eetcd_conn_unavailable. +-type grpc_status() :: #{'grpc-status' => integer(), 'grpc-message' => binary()}. + +%% Grpc status code +-define(GRPC_STATUS_OK, 0). +-define(GRPC_STATUS_CANCELLED, 1). +-define(GRPC_STATUS_UNKNOWN, 2). +-define(GRPC_STATUS_INVALID_ARGUMENT, 3). +-define(GRPC_STATUS_DEADLINE_EXCEEDED, 4). +-define(GRPC_STATUS_NOT_FOUND, 5). +-define(GRPC_STATUS_ALREADY_EXISTS, 6). +-define(GRPC_STATUS_PERMISSION_DENIED, 7). +-define(GRPC_STATUS_RESOURCE_EXHAUSTED, 8). +-define(GRPC_STATUS_FAILED_PRECONDITION, 9). +-define(GRPC_STATUS_ABORTED, 10). +-define(GRPC_STATUS_OUT_OF_RANGE, 11). +-define(GRPC_STATUS_UNIMPLEMENTED, 12). +-define(GRPC_STATUS_INTERNAL, 13). +-define(GRPC_STATUS_UNAVAILABLE, 14). +-define(GRPC_STATUS_DATA_LOSS, 15). +-define(GRPC_STATUS_UNAUTHENTICATED, 16). + +-define(ETCD_CONNS, eetcd_conns). +-record(eetcd_conn, {id, gun, conn, token = []}). +-endif. diff --git a/deps/eetcd/priv/protos/auth.proto b/deps/eetcd/priv/protos/auth.proto new file mode 100644 index 0000000..731973c --- /dev/null +++ b/deps/eetcd/priv/protos/auth.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package authpb; + +import "gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +message UserAddOptions { + bool no_password = 1; +}; + +// User is a single entry in the bucket authUsers +message User { + bytes name = 1; + bytes password = 2; + repeated string roles = 3; + UserAddOptions options = 4; +} + +// Permission is a single entity +message Permission { + enum Type { + READ = 0; + WRITE = 1; + READWRITE = 2; + } + Type permType = 1; + + bytes key = 2; + bytes range_end = 3; +} + +// Role is a single entry in the bucket authRoles +message Role { + bytes name = 1; + + repeated Permission keyPermission = 2; +} diff --git a/deps/eetcd/priv/protos/gogo.proto b/deps/eetcd/priv/protos/gogo.proto new file mode 100644 index 0000000..0da211a --- /dev/null +++ b/deps/eetcd/priv/protos/gogo.proto @@ -0,0 +1,125 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/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. +// +// 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 gogoproto; + +import "google/protobuf/descriptor.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "GoGoProtos"; + +extend google.protobuf.EnumOptions { + optional bool goproto_enum_prefix = 62001; + optional bool goproto_enum_stringer = 62021; + optional bool enum_stringer = 62022; + optional string enum_customname = 62023; +} + +extend google.protobuf.EnumValueOptions { + optional string enumvalue_customname = 66001; +} + +extend google.protobuf.FileOptions { + optional bool goproto_getters_all = 63001; + optional bool goproto_enum_prefix_all = 63002; + optional bool goproto_stringer_all = 63003; + optional bool verbose_equal_all = 63004; + optional bool face_all = 63005; + optional bool gostring_all = 63006; + optional bool populate_all = 63007; + optional bool stringer_all = 63008; + optional bool onlyone_all = 63009; + + optional bool equal_all = 63013; + optional bool description_all = 63014; + optional bool testgen_all = 63015; + optional bool benchgen_all = 63016; + optional bool marshaler_all = 63017; + optional bool unmarshaler_all = 63018; + optional bool stable_marshaler_all = 63019; + + optional bool sizer_all = 63020; + + optional bool goproto_enum_stringer_all = 63021; + optional bool enum_stringer_all = 63022; + + optional bool unsafe_marshaler_all = 63023; + optional bool unsafe_unmarshaler_all = 63024; + + optional bool goproto_extensions_map_all = 63025; + optional bool goproto_unrecognized_all = 63026; + optional bool gogoproto_import = 63027; + optional bool protosizer_all = 63028; + optional bool compare_all = 63029; +} + +extend google.protobuf.MessageOptions { + optional bool goproto_getters = 64001; + optional bool goproto_stringer = 64003; + optional bool verbose_equal = 64004; + optional bool face = 64005; + optional bool gostring = 64006; + optional bool populate = 64007; + optional bool stringer = 67008; + optional bool onlyone = 64009; + + optional bool equal = 64013; + optional bool description = 64014; + optional bool testgen = 64015; + optional bool benchgen = 64016; + optional bool marshaler = 64017; + optional bool unmarshaler = 64018; + optional bool stable_marshaler = 64019; + + optional bool sizer = 64020; + + optional bool unsafe_marshaler = 64023; + optional bool unsafe_unmarshaler = 64024; + + optional bool goproto_extensions_map = 64025; + optional bool goproto_unrecognized = 64026; + + optional bool protosizer = 64028; + optional bool compare = 64029; +} + +extend google.protobuf.FieldOptions { + optional bool nullable = 65001; + optional bool embed = 65002; + optional string customtype = 65003; + optional string customname = 65004; + optional string jsontag = 65005; + optional string moretags = 65006; + optional string casttype = 65007; + optional string castkey = 65008; + optional string castvalue = 65009; + + optional bool stdtime = 65010; + optional bool stdduration = 65011; +} diff --git a/deps/eetcd/priv/protos/kv.proto b/deps/eetcd/priv/protos/kv.proto new file mode 100644 index 0000000..7aa9ae8 --- /dev/null +++ b/deps/eetcd/priv/protos/kv.proto @@ -0,0 +1,49 @@ +syntax = "proto3"; +package mvccpb; + +import "gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +message KeyValue { + // key is the key in bytes. An empty key is not allowed. + bytes key = 1; + // create_revision is the revision of last creation on this key. + int64 create_revision = 2; + // mod_revision is the revision of last modification on this key. + int64 mod_revision = 3; + // version is the version of the key. A deletion resets + // the version to zero and any modification of the key + // increases its version. + int64 version = 4; + // value is the value held by the key, in bytes. + bytes value = 5; + // lease is the ID of the lease that attached to key. + // When the attached lease expires, the key will be deleted. + // If lease is 0, then no lease is attached to the key. + int64 lease = 6; +} + +message Event { + enum EventType { + PUT = 0; + DELETE = 1; + } + // type is the kind of event. If type is a PUT, it indicates + // new data has been stored to the key. If type is a DELETE, + // it indicates the key was deleted. + EventType type = 1; + // kv holds the KeyValue for the event. + // A PUT event contains current kv pair. + // A PUT event with kv.Version=1 indicates the creation of a key. + // A DELETE/EXPIRE event contains the deleted key with + // its modification revision set to the revision of deletion. + KeyValue kv = 2; + + // prev_kv holds the key-value pair before the event happens. + KeyValue prev_kv = 3; +} \ No newline at end of file diff --git a/deps/eetcd/priv/protos/router.proto b/deps/eetcd/priv/protos/router.proto new file mode 100644 index 0000000..3f1ba84 --- /dev/null +++ b/deps/eetcd/priv/protos/router.proto @@ -0,0 +1,1147 @@ +syntax = "proto3"; +package Etcd; + + +import "gogo.proto"; +import "kv.proto"; +import "auth.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.unmarshaler_all) = true; + +service KV { + // Range gets the keys in the range from the key-value store. + rpc Range(RangeRequest) returns (RangeResponse) { + } + + // Put puts the given key into the key-value store. + // A put request increments the revision of the key-value store + // and generates one event in the event history. + rpc Put(PutRequest) returns (PutResponse) { + } + + // DeleteRange deletes the given range from the key-value store. + // A delete request increments the revision of the key-value store + // and generates a delete event in the event history for every deleted key. + rpc DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse) { + } + + // Txn processes multiple requests in a single transaction. + // A txn request increments the revision of the key-value store + // and generates events with the same revision for every completed request. + // It is not allowed to modify the same key several times within one txn. + rpc Txn(TxnRequest) returns (TxnResponse) { + } + + // Compact compacts the event history in the etcd key-value store. The key-value + // store should be periodically compacted or the event history will continue to grow + // indefinitely. + rpc Compact(CompactionRequest) returns (CompactionResponse) { + } +} + +service Watch { + // Watch watches for events happening or that have happened. Both input and output + // are streams; the input stream is for creating and canceling watchers and the output + // stream sends events. One watch RPC can watch on multiple key ranges, streaming events + // for several watches at once. The entire event history can be watched starting from the + // last compaction revision. + rpc Watch(stream WatchRequest) returns (stream WatchResponse) { + } +} + +service Lease { + // LeaseGrant creates a lease which expires if the server does not receive a keepAlive + // within a given time to live period. All keys attached to the lease will be expired and + // deleted if the lease expires. Each expired key generates a delete event in the event history. + rpc LeaseGrant (LeaseGrantRequest) returns (LeaseGrantResponse) { + } + + // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. + rpc LeaseRevoke (LeaseRevokeRequest) returns (LeaseRevokeResponse) { + } + + // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client + // to the server and streaming keep alive responses from the server to the client. + rpc LeaseKeepAlive (stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) { + } + + // LeaseTimeToLive retrieves lease information. + rpc LeaseTimeToLive (LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) { + } + + // LeaseLeases lists all existing leases. + rpc LeaseLeases (LeaseLeasesRequest) returns (LeaseLeasesResponse) { + } +} + +service Cluster { + // MemberAdd adds a member into the cluster. + rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) { + } + + // MemberRemove removes an existing member from the cluster. + rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) { + } + + // MemberUpdate updates the member configuration. + rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) { + } + + // MemberList lists all the members in the cluster. + rpc MemberList(MemberListRequest) returns (MemberListResponse) { + } + + // MemberPromote promotes a member from raft learner (non-voting) to raft voting member. + rpc MemberPromote(MemberPromoteRequest) returns (MemberPromoteResponse) { + } +} + +service Maintenance { + // Alarm activates, deactivates, and queries alarms regarding cluster health. + rpc Alarm(AlarmRequest) returns (AlarmResponse) { + } + + // Status gets the status of the member. + rpc Status(StatusRequest) returns (StatusResponse) { + } + + // Defragment defragments a member's backend database to recover storage space. + rpc Defragment(DefragmentRequest) returns (DefragmentResponse) { + } + + // Hash computes the hash of whole backend keyspace, + // including key, lease, and other buckets in storage. + // This is designed for testing ONLY! + // Do not rely on this in production with ongoing transactions, + // since Hash operation does not hold MVCC locks. + // Use "HashKV" API instead for "key" bucket consistency checks. + rpc Hash(HashRequest) returns (HashResponse) { + } + + // HashKV computes the hash of all MVCC keys up to a given revision. + // It only iterates "key" bucket in backend storage. + rpc HashKV(HashKVRequest) returns (HashKVResponse) { + } + + // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. + rpc Snapshot(SnapshotRequest) returns (stream SnapshotResponse) { + } + + // MoveLeader requests current leader node to transfer its leadership to transferee. + rpc MoveLeader(MoveLeaderRequest) returns (MoveLeaderResponse) { + } +} + +service Auth { + // AuthEnable enables authentication. + rpc AuthEnable(AuthEnableRequest) returns (AuthEnableResponse) { + } + + // AuthDisable disables authentication. + rpc AuthDisable(AuthDisableRequest) returns (AuthDisableResponse) { + } + + // Authenticate processes an authenticate request. + rpc Authenticate(AuthenticateRequest) returns (AuthenticateResponse) { + } + + // UserAdd adds a new user. User name cannot be empty. + rpc UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse) { + } + + // UserGet gets detailed user information. + rpc UserGet(AuthUserGetRequest) returns (AuthUserGetResponse) { + } + + // UserList gets a list of all users. + rpc UserList(AuthUserListRequest) returns (AuthUserListResponse) { + } + + // UserDelete deletes a specified user. + rpc UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse) { + } + + // UserChangePassword changes the password of a specified user. + rpc UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse) { + } + + // UserGrant grants a role to a specified user. + rpc UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse) { + } + + // UserRevokeRole revokes a role of specified user. + rpc UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse) { + } + + // RoleAdd adds a new role. Role name cannot be empty. + rpc RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse) { + } + + // RoleGet gets detailed role information. + rpc RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse) { + } + + // RoleList gets lists of all roles. + rpc RoleList(AuthRoleListRequest) returns (AuthRoleListResponse) { + } + + // RoleDelete deletes a specified role. + rpc RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse) { + } + + // RoleGrantPermission grants a permission of a specified key or range to a specified role. + rpc RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse) { + } + + // RoleRevokePermission revokes a key or range permission of a specified role. + rpc RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse) { + } +} + + +message ResponseHeader { + // cluster_id is the ID of the cluster which sent the response. + uint64 cluster_id = 1; + // member_id is the ID of the member which sent the response. + uint64 member_id = 2; + // revision is the key-value store revision when the request was applied. + // For watch progress responses, the header.revision indicates progress. All future events + // recieved in this stream are guaranteed to have a higher revision number than the + // header.revision number. + int64 revision = 3; + // raft_term is the raft term when the request was applied. + uint64 raft_term = 4; +} + +message RangeRequest { + enum SortOrder { + NONE = 0; // default, no sorting + ASCEND = 1; // lowest target value first + DESCEND = 2; // highest target value first + } + enum SortTarget { + KEY = 0; + VERSION = 1; + CREATE = 2; + MOD = 3; + VALUE = 4; + } + + // key is the first key for the range. If range_end is not given, the request only looks up key. + bytes key = 1; + // range_end is the upper bound on the requested range [key, range_end). + // If range_end is '\0', the range is all keys >= key. + // If range_end is key plus one (e.g., "aa"+1 == "ab", "a\xff"+1 == "b"), + // then the range request gets all keys prefixed with key. + // If both key and range_end are '\0', then the range request returns all keys. + bytes range_end = 2; + // limit is a limit on the number of keys returned for the request. When limit is set to 0, + // it is treated as no limit. + int64 limit = 3; + // revision is the point-in-time of the key-value store to use for the range. + // If revision is less or equal to zero, the range is over the newest key-value store. + // If the revision has been compacted, ErrCompacted is returned as a response. + int64 revision = 4; + + // sort_order is the order for returned sorted results. + SortOrder sort_order = 5; + + // sort_target is the key-value field to use for sorting. + SortTarget sort_target = 6; + + // serializable sets the range request to use serializable member-local reads. + // Range requests are linearizable by default; linearizable requests have higher + // latency and lower throughput than serializable requests but reflect the current + // consensus of the cluster. For better performance, in exchange for possible stale reads, + // a serializable range request is served locally without needing to reach consensus + // with other nodes in the cluster. + bool serializable = 7; + + // keys_only when set returns only the keys and not the values. + bool keys_only = 8; + + // count_only when set returns only the count of the keys in the range. + bool count_only = 9; + + // min_mod_revision is the lower bound for returned key mod revisions; all keys with + // lesser mod revisions will be filtered away. + int64 min_mod_revision = 10; + + // max_mod_revision is the upper bound for returned key mod revisions; all keys with + // greater mod revisions will be filtered away. + int64 max_mod_revision = 11; + + // min_create_revision is the lower bound for returned key create revisions; all keys with + // lesser create revisions will be filtered away. + int64 min_create_revision = 12; + + // max_create_revision is the upper bound for returned key create revisions; all keys with + // greater create revisions will be filtered away. + int64 max_create_revision = 13; +} + +message RangeResponse { + ResponseHeader header = 1; + // kvs is the list of key-value pairs matched by the range request. + // kvs is empty when count is requested. + repeated mvccpb.KeyValue kvs = 2; + // more indicates if there are more keys to return in the requested range. + bool more = 3; + // count is set to the number of keys within the range when requested. + int64 count = 4; +} + +message PutRequest { + // key is the key, in bytes, to put into the key-value store. + bytes key = 1; + // value is the value, in bytes, to associate with the key in the key-value store. + bytes value = 2; + // lease is the lease ID to associate with the key in the key-value store. A lease + // value of 0 indicates no lease. + int64 lease = 3; + + // If prev_kv is set, etcd gets the previous key-value pair before changing it. + // The previous key-value pair will be returned in the put response. + bool prev_kv = 4; + + // If ignore_value is set, etcd updates the key using its current value. + // Returns an error if the key does not exist. + bool ignore_value = 5; + + // If ignore_lease is set, etcd updates the key using its current lease. + // Returns an error if the key does not exist. + bool ignore_lease = 6; +} + +message PutResponse { + ResponseHeader header = 1; + // if prev_kv is set in the request, the previous key-value pair will be returned. + mvccpb.KeyValue prev_kv = 2; +} + +message DeleteRangeRequest { + // key is the first key to delete in the range. + bytes key = 1; + // range_end is the key following the last key to delete for the range [key, range_end). + // If range_end is not given, the range is defined to contain only the key argument. + // If range_end is one bit larger than the given key, then the range is all the keys + // with the prefix (the given key). + // If range_end is '\0', the range is all keys greater than or equal to the key argument. + bytes range_end = 2; + + // If prev_kv is set, etcd gets the previous key-value pairs before deleting it. + // The previous key-value pairs will be returned in the delete response. + bool prev_kv = 3; +} + +message DeleteRangeResponse { + ResponseHeader header = 1; + // deleted is the number of keys deleted by the delete range request. + int64 deleted = 2; + // if prev_kv is set in the request, the previous key-value pairs will be returned. + repeated mvccpb.KeyValue prev_kvs = 3; +} + +message RequestOp { + // request is a union of request types accepted by a transaction. + oneof request { + RangeRequest request_range = 1; + PutRequest request_put = 2; + DeleteRangeRequest request_delete_range = 3; + TxnRequest request_txn = 4; + } +} + +message ResponseOp { + // response is a union of response types returned by a transaction. + oneof response { + RangeResponse response_range = 1; + PutResponse response_put = 2; + DeleteRangeResponse response_delete_range = 3; + TxnResponse response_txn = 4; + } +} + +message Compare { + enum CompareResult { + EQUAL = 0; + GREATER = 1; + LESS = 2; + NOT_EQUAL = 3; + } + enum CompareTarget { + VERSION = 0; + CREATE = 1; + MOD = 2; + VALUE = 3; + LEASE = 4; + } + // result is logical comparison operation for this comparison. + CompareResult result = 1; + // target is the key-value field to inspect for the comparison. + CompareTarget target = 2; + // key is the subject key for the comparison operation. + bytes key = 3; + oneof target_union { + // version is the version of the given key + int64 version = 4; + // create_revision is the creation revision of the given key + int64 create_revision = 5; + // mod_revision is the last modified revision of the given key. + int64 mod_revision = 6; + // value is the value of the given key, in bytes. + bytes value = 7; + // lease is the lease id of the given key. + int64 lease = 8; + // leave room for more target_union field tags, jump to 64 + } + + // range_end compares the given target to all keys in the range [key, range_end). + // See RangeRequest for more details on key ranges. + bytes range_end = 64; + // TODO: fill out with most of the rest of RangeRequest fields when needed. +} + +// From google paxosdb paper: +// Our implementation hinges around a powerful primitive which we call MultiOp. All other database +// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically +// and consists of three components: +// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check +// for the absence or presence of a value, or compare with a given value. Two different tests in the guard +// may apply to the same or different entries in the database. All tests in the guard are applied and +// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise +// it executes f op (see item 3 below). +// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or +// lookup operation, and applies to a single database entry. Two different operations in the list may apply +// to the same or different entries in the database. These operations are executed +// if guard evaluates to +// true. +// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false. +message TxnRequest { + // compare is a list of predicates representing a conjunction of terms. + // If the comparisons succeed, then the success requests will be processed in order, + // and the response will contain their respective responses in order. + // If the comparisons fail, then the failure requests will be processed in order, + // and the response will contain their respective responses in order. + repeated Compare compare = 1; + // success is a list of requests which will be applied when compare evaluates to true. + repeated RequestOp success = 2; + // failure is a list of requests which will be applied when compare evaluates to false. + repeated RequestOp failure = 3; +} + +message TxnResponse { + ResponseHeader header = 1; + // succeeded is set to true if the compare evaluated to true or false otherwise. + bool succeeded = 2; + // responses is a list of responses corresponding to the results from applying + // success if succeeded is true or failure if succeeded is false. + repeated ResponseOp responses = 3; +} + +// CompactionRequest compacts the key-value store up to a given revision. All superseded keys +// with a revision less than the compaction revision will be removed. +message CompactionRequest { + // revision is the key-value store revision for the compaction operation. + int64 revision = 1; + // physical is set so the RPC will wait until the compaction is physically + // applied to the local database such that compacted entries are totally + // removed from the backend database. + bool physical = 2; +} + +message CompactionResponse { + ResponseHeader header = 1; +} + +message HashRequest { +} + +message HashKVRequest { + // revision is the key-value store revision for the hash operation. + int64 revision = 1; +} + +message HashKVResponse { + ResponseHeader header = 1; + // hash is the hash value computed from the responding member's MVCC keys up to a given revision. + uint32 hash = 2; + // compact_revision is the compacted revision of key-value store when hash begins. + int64 compact_revision = 3; +} + +message HashResponse { + ResponseHeader header = 1; + // hash is the hash value computed from the responding member's KV's backend. + uint32 hash = 2; +} + +message SnapshotRequest { +} + +message SnapshotResponse { + // header has the current key-value store information. The first header in the snapshot + // stream indicates the point in time of the snapshot. + ResponseHeader header = 1; + + // remaining_bytes is the number of blob bytes to be sent after this message + uint64 remaining_bytes = 2; + + // blob contains the next chunk of the snapshot in the snapshot stream. + bytes blob = 3; +} + +message WatchRequest { + // request_union is a request to either create a new watcher or cancel an existing watcher. + oneof request_union { + WatchCreateRequest create_request = 1; + WatchCancelRequest cancel_request = 2; + WatchProgressRequest progress_request = 3; + } +} + +message WatchCreateRequest { + // key is the key to register for watching. + bytes key = 1; + + // range_end is the end of the range [key, range_end) to watch. If range_end is not given, + // only the key argument is watched. If range_end is equal to '\0', all keys greater than + // or equal to the key argument are watched. + // If the range_end is one bit larger than the given key, + // then all keys with the prefix (the given key) will be watched. + bytes range_end = 2; + + // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". + int64 start_revision = 3; + + // progress_notify is set so that the etcd server will periodically send a WatchResponse with + // no events to the new watcher if there are no recent events. It is useful when clients + // wish to recover a disconnected watcher starting from a recent known revision. + // The etcd server may decide how often it will send notifications based on current load. + bool progress_notify = 4; + + enum FilterType { + // filter out put event. + NOPUT = 0; + // filter out delete event. + NODELETE = 1; + } + + // filters filter the events at server side before it sends back to the watcher. + repeated FilterType filters = 5; + + // If prev_kv is set, created watcher gets the previous KV before the event happens. + // If the previous KV is already compacted, nothing will be returned. + bool prev_kv = 6; + + // If watch_id is provided and non-zero, it will be assigned to this watcher. + // Since creating a watcher in etcd is not a synchronous operation, + // this can be used ensure that ordering is correct when creating multiple + // watchers on the same stream. Creating a watcher with an ID already in + // use on the stream will cause an error to be returned. + int64 watch_id = 7; + + // fragment enables splitting large revisions into multiple watch responses. + bool fragment = 8; +} + +message WatchCancelRequest { + // watch_id is the watcher id to cancel so that no more events are transmitted. + int64 watch_id = 1; +} + +// Requests the a watch stream progress status be sent in the watch response stream as soon as +// possible. +message WatchProgressRequest { +} + +message WatchResponse { + ResponseHeader header = 1; + // watch_id is the ID of the watcher that corresponds to the response. + int64 watch_id = 2; + + // created is set to true if the response is for a create watch request. + // The client should record the watch_id and expect to receive events for + // the created watcher from the same stream. + // All events sent to the created watcher will attach with the same watch_id. + bool created = 3; + + // canceled is set to true if the response is for a cancel watch request. + // No further events will be sent to the canceled watcher. + bool canceled = 4; + + // compact_revision is set to the minimum index if a watcher tries to watch + // at a compacted index. + // + // This happens when creating a watcher at a compacted revision or the watcher cannot + // catch up with the progress of the key-value store. + // + // The client should treat the watcher as canceled and should not try to create any + // watcher with the same start_revision again. + int64 compact_revision = 5; + + // cancel_reason indicates the reason for canceling the watcher. + string cancel_reason = 6; + + // framgment is true if large watch response was split over multiple responses. + bool fragment = 7; + + repeated mvccpb.Event events = 11; +} + +message LeaseGrantRequest { + // TTL is the advisory time-to-live in seconds. Expired lease will return -1. + int64 TTL = 1; + // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. + int64 ID = 2; +} + +message LeaseGrantResponse { + ResponseHeader header = 1; + // ID is the lease ID for the granted lease. + int64 ID = 2; + // TTL is the server chosen lease time-to-live in seconds. + int64 TTL = 3; + string error = 4; +} + +message LeaseRevokeRequest { + // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. + int64 ID = 1; +} + +message LeaseRevokeResponse { + ResponseHeader header = 1; +} + +message LeaseCheckpoint { + // ID is the lease ID to checkpoint. + int64 ID = 1; + + // Remaining_TTL is the remaining time until expiry of the lease. + int64 remaining_TTL = 2; +} + +message LeaseCheckpointRequest { + repeated LeaseCheckpoint checkpoints = 1; +} + +message LeaseCheckpointResponse { + ResponseHeader header = 1; +} + +message LeaseKeepAliveRequest { + // ID is the lease ID for the lease to keep alive. + int64 ID = 1; +} + +message LeaseKeepAliveResponse { + ResponseHeader header = 1; + // ID is the lease ID from the keep alive request. + int64 ID = 2; + // TTL is the new time-to-live for the lease. + int64 TTL = 3; +} + +message LeaseTimeToLiveRequest { + // ID is the lease ID for the lease. + int64 ID = 1; + // keys is true to query all the keys attached to this lease. + bool keys = 2; +} + +message LeaseTimeToLiveResponse { + ResponseHeader header = 1; + // ID is the lease ID from the keep alive request. + int64 ID = 2; + // TTL is the remaining TTL in seconds for the lease; the lease will expire in under TTL+1 seconds. + int64 TTL = 3; + // GrantedTTL is the initial granted time in seconds upon lease creation/renewal. + int64 grantedTTL = 4; + // Keys is the list of keys attached to this lease. + repeated bytes keys = 5; +} + +message LeaseLeasesRequest { +} + +message LeaseStatus { + int64 ID = 1; + // TODO: int64 TTL = 2; +} + +message LeaseLeasesResponse { + ResponseHeader header = 1; + repeated LeaseStatus leases = 2; +} + +message Member { + // ID is the member ID for this member. + uint64 ID = 1; + // name is the human-readable name of the member. If the member is not started, the name will be an empty string. + string name = 2; + // peerURLs is the list of URLs the member exposes to the cluster for communication. + repeated string peerURLs = 3; + // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. + repeated string clientURLs = 4; + // isLearner indicates if the member is raft learner. + bool isLearner = 5; +} + +message MemberAddRequest { + // peerURLs is the list of URLs the added member will use to communicate with the cluster. + repeated string peerURLs = 1; + // isLearner indicates if the added member is raft learner. + bool isLearner = 2; +} + +message MemberAddResponse { + ResponseHeader header = 1; + // member is the member information for the added member. + Member member = 2; + // members is a list of all members after adding the new member. + repeated Member members = 3; +} + +message MemberRemoveRequest { + // ID is the member ID of the member to remove. + uint64 ID = 1; +} + +message MemberRemoveResponse { + ResponseHeader header = 1; + // members is a list of all members after removing the member. + repeated Member members = 2; +} + +message MemberUpdateRequest { + // ID is the member ID of the member to update. + uint64 ID = 1; + // peerURLs is the new list of URLs the member will use to communicate with the cluster. + repeated string peerURLs = 2; +} + +message MemberUpdateResponse{ + ResponseHeader header = 1; + // members is a list of all members after updating the member. + repeated Member members = 2; +} + +message MemberListRequest { +} + +message MemberListResponse { + ResponseHeader header = 1; + // members is a list of all members associated with the cluster. + repeated Member members = 2; +} + +message MemberPromoteRequest { + // ID is the member ID of the member to promote. + uint64 ID = 1; +} + +message MemberPromoteResponse { + ResponseHeader header = 1; + // members is a list of all members after promoting the member. + repeated Member members = 2; +} + +message DefragmentRequest { +} + +message DefragmentResponse { + ResponseHeader header = 1; +} + +message MoveLeaderRequest { + // targetID is the node ID for the new leader. + uint64 targetID = 1; +} + +message MoveLeaderResponse { + ResponseHeader header = 1; +} + +enum AlarmType { + NONE = 0; // default, used to query if any alarm is active + NOSPACE = 1; // space quota is exhausted + CORRUPT = 2; // kv store corruption detected +} + +message AlarmRequest { + enum AlarmAction { + GET = 0; + ACTIVATE = 1; + DEACTIVATE = 2; + } + // action is the kind of alarm request to issue. The action + // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a + // raised alarm. + AlarmAction action = 1; + // memberID is the ID of the member associated with the alarm. If memberID is 0, the + // alarm request covers all members. + uint64 memberID = 2; + // alarm is the type of alarm to consider for this request. + AlarmType alarm = 3; +} + +message AlarmMember { + // memberID is the ID of the member associated with the raised alarm. + uint64 memberID = 1; + // alarm is the type of alarm which has been raised. + AlarmType alarm = 2; +} + +message AlarmResponse { + ResponseHeader header = 1; + // alarms is a list of alarms associated with the alarm request. + repeated AlarmMember alarms = 2; +} + +message StatusRequest { +} + +message StatusResponse { + ResponseHeader header = 1; + // version is the cluster protocol version used by the responding member. + string version = 2; + // dbSize is the size of the backend database physically allocated, in bytes, of the responding member. + int64 dbSize = 3; + // leader is the member ID which the responding member believes is the current leader. + uint64 leader = 4; + // raftIndex is the current raft committed index of the responding member. + uint64 raftIndex = 5; + // raftTerm is the current raft term of the responding member. + uint64 raftTerm = 6; + // raftAppliedIndex is the current raft applied index of the responding member. + uint64 raftAppliedIndex = 7; + // errors contains alarm/health information and status. + repeated string errors = 8; + // dbSizeInUse is the size of the backend database logically in use, in bytes, of the responding member. + int64 dbSizeInUse = 9; + // isLearner indicates if the member is raft learner. + bool isLearner = 10; +} + +message AuthEnableRequest { +} + +message AuthDisableRequest { +} + +message AuthenticateRequest { + string name = 1; + string password = 2; +} + +message AuthUserAddRequest { + string name = 1; + string password = 2; + authpb.UserAddOptions options = 3; +} + +message AuthUserGetRequest { + string name = 1; +} + +message AuthUserDeleteRequest { + // name is the name of the user to delete. + string name = 1; +} + +message AuthUserChangePasswordRequest { + // name is the name of the user whose password is being changed. + string name = 1; + // password is the new password for the user. + string password = 2; +} + +message AuthUserGrantRoleRequest { + // user is the name of the user which should be granted a given role. + string user = 1; + // role is the name of the role to grant to the user. + string role = 2; +} + +message AuthUserRevokeRoleRequest { + string name = 1; + string role = 2; +} + +message AuthRoleAddRequest { + // name is the name of the role to add to the authentication system. + string name = 1; +} + +message AuthRoleGetRequest { + string role = 1; +} + +message AuthUserListRequest { +} + +message AuthRoleListRequest { +} + +message AuthRoleDeleteRequest { + string role = 1; +} + +message AuthRoleGrantPermissionRequest { + // name is the name of the role which will be granted the permission. + string name = 1; + // perm is the permission to grant to the role. + authpb.Permission perm = 2; +} + +message AuthRoleRevokePermissionRequest { + string role = 1; + bytes key = 2; + bytes range_end = 3; +} + +message AuthEnableResponse { + ResponseHeader header = 1; +} + +message AuthDisableResponse { + ResponseHeader header = 1; +} + +message AuthenticateResponse { + ResponseHeader header = 1; + // token is an authorized token that can be used in succeeding RPCs + string token = 2; +} + +message AuthUserAddResponse { + ResponseHeader header = 1; +} + +message AuthUserGetResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserDeleteResponse { + ResponseHeader header = 1; +} + +message AuthUserChangePasswordResponse { + ResponseHeader header = 1; +} + +message AuthUserGrantRoleResponse { + ResponseHeader header = 1; +} + +message AuthUserRevokeRoleResponse { + ResponseHeader header = 1; +} + +message AuthRoleAddResponse { + ResponseHeader header = 1; +} + +message AuthRoleGetResponse { + ResponseHeader header = 1; + + repeated authpb.Permission perm = 2; +} + +message AuthRoleListResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserListResponse { + ResponseHeader header = 1; + + repeated string users = 2; +} + +message AuthRoleDeleteResponse { + ResponseHeader header = 1; +} + +message AuthRoleGrantPermissionResponse { + ResponseHeader header = 1; +} + +message AuthRoleRevokePermissionResponse { + ResponseHeader header = 1; +} + +message HealthCheckRequest { + string service = 1; +} + +message HealthCheckResponse { + enum ServingStatus { + UNKNOWN = 0; + SERVING = 1; + NOT_SERVING = 2; + SERVICE_UNKNOWN = 3; // Used only by the Watch method. + } + ServingStatus status = 1; +} + +service Health { + // If the requested service is unknown, the call will fail with status + // NOT_FOUND. + rpc Check(HealthCheckRequest) returns (HealthCheckResponse); + + // Performs a watch for the serving status of the requested service. + // The server will immediately send back a message indicating the current + // serving status. It will then subsequently send a new message whenever + // the service's serving status changes. + // + // If the requested service is unknown when the call is received, the + // server will send a message setting the serving status to + // SERVICE_UNKNOWN but will *not* terminate the call. If at some + // future point, the serving status of the service becomes known, the + // server will send a new message with the service's serving status. + // + // If the call terminates with status UNIMPLEMENTED, then clients + // should assume this method is not supported and should not retry the + // call. If the call terminates with any other status (including OK), + // clients should retry the call with appropriate exponential backoff. + rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse); +} + +message LockRequest { + // name is the identifier for the distributed shared lock to be acquired. + bytes name = 1; + // lease is the ID of the lease that will be attached to ownership of the + // lock. If the lease expires or is revoked and currently holds the lock, + // the lock is automatically released. Calls to Lock with the same lease will + // be treated as a single acquisition; locking twice with the same lease is a + // no-op. + int64 lease = 2; +} + +message LockResponse { + ResponseHeader header = 1; + // key is a key that will exist on etcd for the duration that the Lock caller + // owns the lock. Users should not modify this key or the lock may exhibit + // undefined behavior. + bytes key = 2; +} + +message UnlockRequest { + // key is the lock ownership key granted by Lock. + bytes key = 1; +} + +message UnlockResponse { + ResponseHeader header = 1; +} + +// The lock service exposes client-side locking facilities as a gRPC interface. +service Lock { + // Lock acquires a distributed shared lock on a given named lock. + // On success, it will return a unique key that exists so long as the + // lock is held by the caller. This key can be used in conjunction with + // transactions to safely ensure updates to etcd only occur while holding + // lock ownership. The lock is held until Unlock is called on the key or the + // lease associate with the owner expires. + rpc Lock(LockRequest) returns (LockResponse) { + } + + // Unlock takes a key returned by Lock and releases the hold on lock. The + // next Lock caller waiting for the lock will then be woken up and given + // ownership of the lock. + rpc Unlock(UnlockRequest) returns (UnlockResponse) { + } +} + +// The election service exposes client-side election facilities as a gRPC interface. +service Election { + // Campaign waits to acquire leadership in an election, returning a LeaderKey + // representing the leadership if successful. The LeaderKey can then be used + // to issue new values on the election, transactionally guard API requests on + // leadership still being held, and resign from the election. + rpc Campaign(CampaignRequest) returns (CampaignResponse) { + } + // Proclaim updates the leader's posted value with a new value. + rpc Proclaim(ProclaimRequest) returns (ProclaimResponse) { + } + // Leader returns the current election proclamation, if any. + rpc Leader(LeaderRequest) returns (LeaderResponse) { + } + // Observe streams election proclamations in-order as made by the election's + // elected leaders. + rpc Observe(stream LeaderRequest) returns (stream LeaderResponse) { + } + // Resign releases election leadership so other campaigners may acquire + // leadership on the election. + rpc Resign(ResignRequest) returns (ResignResponse) { + } +} + +message CampaignRequest { + // name is the election's identifier for the campaign. + bytes name = 1; + // lease is the ID of the lease attached to leadership of the election. If the + // lease expires or is revoked before resigning leadership, then the + // leadership is transferred to the next campaigner, if any. + int64 lease = 2; + // value is the initial proclaimed value set when the campaigner wins the + // election. + bytes value = 3; +} + +message CampaignResponse { + ResponseHeader header = 1; + // leader describes the resources used for holding leadership of the election. + LeaderKey leader = 2; +} + +message LeaderKey { + // name is the election identifier that corresponds to the leadership key. + bytes name = 1; + // key is an opaque key representing the ownership of the election. If the key + // is deleted, then leadership is lost. + bytes key = 2; + // rev is the creation revision of the key. It can be used to test for ownership + // of an election during transactions by testing the key's creation revision + // matches rev. + int64 rev = 3; + // lease is the lease ID of the election leader. + int64 lease = 4; +} + +message LeaderRequest { + // name is the election identifier for the leadership information. + bytes name = 1; +} + +message LeaderResponse { + ResponseHeader header = 1; + // kv is the key-value pair representing the latest leader update. + mvccpb.KeyValue kv = 2; +} + +message ResignRequest { + // leader is the leadership to relinquish by resignation. + LeaderKey leader = 1; +} + +message ResignResponse { + ResponseHeader header = 1; +} + +message ProclaimRequest { + // leader is the leadership hold on the election. + LeaderKey leader = 1; + // value is an update meant to overwrite the leader's current value. + bytes value = 2; +} + +message ProclaimResponse { + ResponseHeader header = 1; +} \ No newline at end of file diff --git a/deps/eetcd/rebar.config b/deps/eetcd/rebar.config new file mode 100644 index 0000000..ff574d5 --- /dev/null +++ b/deps/eetcd/rebar.config @@ -0,0 +1,30 @@ +{erl_opts, [{i, "./_build/default/plugins/gpb/include"}]}. +{deps, [ + {gun, "1.3.2"} +]}. + + +{gpb_opts, [ + {recursive, false}, + {i, "priv/protos"}, + {ipath, "_build/default/plugins/gpb/priv/proto3/"}, + use_packages, + {module_name_suffix, "_pb"}, + {o_erl, "src/protos"}, + {o_hrl, "include"}, + {strings_as_binaries, true}, + maps, + {maps_unset_optional, omitted}, + type_specs]}. + +{provider_hooks, [ + {pre, [ + {compile, {protobuf, compile}}, + {clean, {protobuf, clean}} + ]} +]}. + +{plugins, [ + {rebar3_gpb_plugin, "2.13.1"}, + {rebar3_eetcd_plugin, "0.3.0"} +]}. diff --git a/deps/eetcd/rebar.lock b/deps/eetcd/rebar.lock new file mode 100644 index 0000000..fccbeaf --- /dev/null +++ b/deps/eetcd/rebar.lock @@ -0,0 +1,8 @@ +{"1.1.0", +[{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.6.0">>},1}, + {<<"gun">>,{pkg,<<"gun">>,<<"1.3.2">>},0}]}. +[ +{pkg_hash,[ + {<<"cowlib">>, <<"8AA629F81A0FC189F261DC98A42243FA842625FEEA3C7EC56C48F4CCDB55490F">>}, + {<<"gun">>, <<"542064CBB9F613650B8A8100B3A927505F364FBE198B7A5A112868FF43F3E477">>}]} +]. diff --git a/deps/eetcd/src/clients/eetcd_auth_gen.erl b/deps/eetcd/src/clients/eetcd_auth_gen.erl new file mode 100644 index 0000000..a513a30 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_auth_gen.erl @@ -0,0 +1,124 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Auth +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_auth_gen). + +-export([auth_enable/1]). +-export([auth_disable/1]). +-export([authenticate/1]). +-export([user_add/1]). +-export([user_get/1]). +-export([user_list/1]). +-export([user_delete/1]). +-export([user_change_password/1]). +-export([user_grant_role/1]). +-export([user_revoke_role/1]). +-export([role_add/1]). +-export([role_get/1]). +-export([role_list/1]). +-export([role_delete/1]). +-export([role_grant_permission/1]). +-export([role_revoke_permission/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/AuthEnable" +-spec auth_enable(router_pb:'Etcd.AuthEnableRequest'()) -> + {ok, router_pb:'Etcd.AuthEnableResponse'()}|{error,eetcd:eetcd_error()}. +auth_enable(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthEnableRequest', <<"/etcdserverpb.Auth/AuthEnable">>, 'Etcd.AuthEnableResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/AuthDisable" +-spec auth_disable(router_pb:'Etcd.AuthDisableRequest'()) -> + {ok, router_pb:'Etcd.AuthDisableResponse'()}|{error,eetcd:eetcd_error()}. +auth_disable(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthDisableRequest', <<"/etcdserverpb.Auth/AuthDisable">>, 'Etcd.AuthDisableResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/Authenticate" +-spec authenticate(router_pb:'Etcd.AuthenticateRequest'()) -> + {ok, router_pb:'Etcd.AuthenticateResponse'()}|{error,eetcd:eetcd_error()}. +authenticate(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthenticateRequest', <<"/etcdserverpb.Auth/Authenticate">>, 'Etcd.AuthenticateResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserAdd" +-spec user_add(router_pb:'Etcd.AuthUserAddRequest'()) -> + {ok, router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd:eetcd_error()}. +user_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserAddRequest', <<"/etcdserverpb.Auth/UserAdd">>, 'Etcd.AuthUserAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserGet" +-spec user_get(router_pb:'Etcd.AuthUserGetRequest'()) -> + {ok, router_pb:'Etcd.AuthUserGetResponse'()}|{error,eetcd:eetcd_error()}. +user_get(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserGetRequest', <<"/etcdserverpb.Auth/UserGet">>, 'Etcd.AuthUserGetResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserList" +-spec user_list(router_pb:'Etcd.AuthUserListRequest'()) -> + {ok, router_pb:'Etcd.AuthUserListResponse'()}|{error,eetcd:eetcd_error()}. +user_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserListRequest', <<"/etcdserverpb.Auth/UserList">>, 'Etcd.AuthUserListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserDelete" +-spec user_delete(router_pb:'Etcd.AuthUserDeleteRequest'()) -> + {ok, router_pb:'Etcd.AuthUserDeleteResponse'()}|{error,eetcd:eetcd_error()}. +user_delete(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserDeleteRequest', <<"/etcdserverpb.Auth/UserDelete">>, 'Etcd.AuthUserDeleteResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserChangePassword" +-spec user_change_password(router_pb:'Etcd.AuthUserChangePasswordRequest'()) -> + {ok, router_pb:'Etcd.AuthUserChangePasswordResponse'()}|{error,eetcd:eetcd_error()}. +user_change_password(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserChangePasswordRequest', <<"/etcdserverpb.Auth/UserChangePassword">>, 'Etcd.AuthUserChangePasswordResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserGrantRole" +-spec user_grant_role(router_pb:'Etcd.AuthUserGrantRoleRequest'()) -> + {ok, router_pb:'Etcd.AuthUserGrantRoleResponse'()}|{error,eetcd:eetcd_error()}. +user_grant_role(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserGrantRoleRequest', <<"/etcdserverpb.Auth/UserGrantRole">>, 'Etcd.AuthUserGrantRoleResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/UserRevokeRole" +-spec user_revoke_role(router_pb:'Etcd.AuthUserRevokeRoleRequest'()) -> + {ok, router_pb:'Etcd.AuthUserRevokeRoleResponse'()}|{error,eetcd:eetcd_error()}. +user_revoke_role(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthUserRevokeRoleRequest', <<"/etcdserverpb.Auth/UserRevokeRole">>, 'Etcd.AuthUserRevokeRoleResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleAdd" +-spec role_add(router_pb:'Etcd.AuthRoleAddRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleAddResponse'()}|{error,eetcd:eetcd_error()}. +role_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleAddRequest', <<"/etcdserverpb.Auth/RoleAdd">>, 'Etcd.AuthRoleAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleGet" +-spec role_get(router_pb:'Etcd.AuthRoleGetRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleGetResponse'()}|{error,eetcd:eetcd_error()}. +role_get(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleGetRequest', <<"/etcdserverpb.Auth/RoleGet">>, 'Etcd.AuthRoleGetResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleList" +-spec role_list(router_pb:'Etcd.AuthRoleListRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleListResponse'()}|{error,eetcd:eetcd_error()}. +role_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleListRequest', <<"/etcdserverpb.Auth/RoleList">>, 'Etcd.AuthRoleListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleDelete" +-spec role_delete(router_pb:'Etcd.AuthRoleDeleteRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleDeleteResponse'()}|{error,eetcd:eetcd_error()}. +role_delete(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleDeleteRequest', <<"/etcdserverpb.Auth/RoleDelete">>, 'Etcd.AuthRoleDeleteResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleGrantPermission" +-spec role_grant_permission(router_pb:'Etcd.AuthRoleGrantPermissionRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleGrantPermissionResponse'()}|{error,eetcd:eetcd_error()}. +role_grant_permission(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleGrantPermissionRequest', <<"/etcdserverpb.Auth/RoleGrantPermission">>, 'Etcd.AuthRoleGrantPermissionResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Auth/RoleRevokePermission" +-spec role_revoke_permission(router_pb:'Etcd.AuthRoleRevokePermissionRequest'()) -> + {ok, router_pb:'Etcd.AuthRoleRevokePermissionResponse'()}|{error,eetcd:eetcd_error()}. +role_revoke_permission(Request) -> + eetcd_stream:unary(Request, 'Etcd.AuthRoleRevokePermissionRequest', <<"/etcdserverpb.Auth/RoleRevokePermission">>, 'Etcd.AuthRoleRevokePermissionResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_cluster_gen.erl b/deps/eetcd/src/clients/eetcd_cluster_gen.erl new file mode 100644 index 0000000..f339612 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_cluster_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Cluster +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_cluster_gen). + +-export([member_add/1]). +-export([member_remove/1]). +-export([member_update/1]). +-export([member_list/1]). +-export([member_promote/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberAdd" +-spec member_add(router_pb:'Etcd.MemberAddRequest'()) -> + {ok, router_pb:'Etcd.MemberAddResponse'()}|{error,eetcd:eetcd_error()}. +member_add(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberAddRequest', <<"/etcdserverpb.Cluster/MemberAdd">>, 'Etcd.MemberAddResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberRemove" +-spec member_remove(router_pb:'Etcd.MemberRemoveRequest'()) -> + {ok, router_pb:'Etcd.MemberRemoveResponse'()}|{error,eetcd:eetcd_error()}. +member_remove(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberRemoveRequest', <<"/etcdserverpb.Cluster/MemberRemove">>, 'Etcd.MemberRemoveResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberUpdate" +-spec member_update(router_pb:'Etcd.MemberUpdateRequest'()) -> + {ok, router_pb:'Etcd.MemberUpdateResponse'()}|{error,eetcd:eetcd_error()}. +member_update(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberUpdateRequest', <<"/etcdserverpb.Cluster/MemberUpdate">>, 'Etcd.MemberUpdateResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberList" +-spec member_list(router_pb:'Etcd.MemberListRequest'()) -> + {ok, router_pb:'Etcd.MemberListResponse'()}|{error,eetcd:eetcd_error()}. +member_list(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberListRequest', <<"/etcdserverpb.Cluster/MemberList">>, 'Etcd.MemberListResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Cluster/MemberPromote" +-spec member_promote(router_pb:'Etcd.MemberPromoteRequest'()) -> + {ok, router_pb:'Etcd.MemberPromoteResponse'()}|{error,eetcd:eetcd_error()}. +member_promote(Request) -> + eetcd_stream:unary(Request, 'Etcd.MemberPromoteRequest', <<"/etcdserverpb.Cluster/MemberPromote">>, 'Etcd.MemberPromoteResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_election_gen.erl b/deps/eetcd/src/clients/eetcd_election_gen.erl new file mode 100644 index 0000000..8b3dd65 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_election_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Election +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:46+00:00 and should not be modified manually + +-module(eetcd_election_gen). + +-export([campaign/1]). +-export([proclaim/1]). +-export([leader/1]). +-export([observe/1]). +-export([resign/1]). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Campaign" +-spec campaign(router_pb:'Etcd.CampaignRequest'()) -> + {ok, router_pb:'Etcd.CampaignResponse'()}|{error,eetcd:eetcd_error()}. +campaign(Request) -> + eetcd_stream:unary(Request, 'Etcd.CampaignRequest', <<"/v3electionpb.Election/Campaign">>, 'Etcd.CampaignResponse'). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Proclaim" +-spec proclaim(router_pb:'Etcd.ProclaimRequest'()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()}|{error,eetcd:eetcd_error()}. +proclaim(Request) -> + eetcd_stream:unary(Request, 'Etcd.ProclaimRequest', <<"/v3electionpb.Election/Proclaim">>, 'Etcd.ProclaimResponse'). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Leader" +-spec leader(router_pb:'Etcd.LeaderRequest'()) -> + {ok, router_pb:'Etcd.LeaderResponse'()}|{error,eetcd:eetcd_error()}. +leader(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaderRequest', <<"/v3electionpb.Election/Leader">>, 'Etcd.LeaderResponse'). + +%% @doc Stream RPC +-spec observe(router_pb:'Etcd.LeaderRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +observe(Request) -> + eetcd_stream:new(Request, <<"/v3electionpb.Election/Observe">>). + +%% @doc Unary RPC for service at path "/v3electionpb.Election/Resign" +-spec resign(router_pb:'Etcd.ResignRequest'()) -> + {ok, router_pb:'Etcd.ResignResponse'()}|{error,eetcd:eetcd_error()}. +resign(Request) -> + eetcd_stream:unary(Request, 'Etcd.ResignRequest', <<"/v3electionpb.Election/Resign">>, 'Etcd.ResignResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_health_gen.erl b/deps/eetcd/src/clients/eetcd_health_gen.erl new file mode 100644 index 0000000..5e7dda0 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_health_gen.erl @@ -0,0 +1,26 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Health +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_health_gen). + +-export([check/1]). +-export([watch/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Health/Check" +-spec check(router_pb:'Etcd.HealthCheckRequest'()) -> + {ok, router_pb:'Etcd.HealthCheckResponse'()}|{error,eetcd:eetcd_error()}. +check(Request) -> + eetcd_stream:unary(Request, 'Etcd.HealthCheckRequest', <<"/etcdserverpb.Health/Check">>, 'Etcd.HealthCheckResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Health/Watch" +-spec watch(router_pb:'Etcd.HealthCheckRequest'()) -> + {ok, router_pb:'Etcd.HealthCheckResponse'()}|{error,eetcd:eetcd_error()}. +watch(Request) -> + eetcd_stream:unary(Request, 'Etcd.HealthCheckRequest', <<"/etcdserverpb.Health/Watch">>, 'Etcd.HealthCheckResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_kv_gen.erl b/deps/eetcd/src/clients/eetcd_kv_gen.erl new file mode 100644 index 0000000..32c07ad --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_kv_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.KV +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_kv_gen). + +-export([range/1]). +-export([put/1]). +-export([delete_range/1]). +-export([txn/1]). +-export([compact/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Range" +-spec range(router_pb:'Etcd.RangeRequest'()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error,eetcd:eetcd_error()}. +range(Request) -> + eetcd_stream:unary(Request, 'Etcd.RangeRequest', <<"/etcdserverpb.KV/Range">>, 'Etcd.RangeResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Put" +-spec put(router_pb:'Etcd.PutRequest'()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error,eetcd:eetcd_error()}. +put(Request) -> + eetcd_stream:unary(Request, 'Etcd.PutRequest', <<"/etcdserverpb.KV/Put">>, 'Etcd.PutResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/DeleteRange" +-spec delete_range(router_pb:'Etcd.DeleteRangeRequest'()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error,eetcd:eetcd_error()}. +delete_range(Request) -> + eetcd_stream:unary(Request, 'Etcd.DeleteRangeRequest', <<"/etcdserverpb.KV/DeleteRange">>, 'Etcd.DeleteRangeResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Txn" +-spec txn(router_pb:'Etcd.TxnRequest'()) -> + {ok, router_pb:'Etcd.TxnResponse'()}|{error,eetcd:eetcd_error()}. +txn(Request) -> + eetcd_stream:unary(Request, 'Etcd.TxnRequest', <<"/etcdserverpb.KV/Txn">>, 'Etcd.TxnResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.KV/Compact" +-spec compact(router_pb:'Etcd.CompactionRequest'()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error,eetcd:eetcd_error()}. +compact(Request) -> + eetcd_stream:unary(Request, 'Etcd.CompactionRequest', <<"/etcdserverpb.KV/Compact">>, 'Etcd.CompactionResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_lease_gen.erl b/deps/eetcd/src/clients/eetcd_lease_gen.erl new file mode 100644 index 0000000..b24a5db --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_lease_gen.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Lease +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_lease_gen). + +-export([lease_grant/1]). +-export([lease_revoke/1]). +-export([lease_keep_alive/1]). +-export([lease_time_to_live/1]). +-export([lease_leases/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseGrant" +-spec lease_grant(router_pb:'Etcd.LeaseGrantRequest'()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error,eetcd:eetcd_error()}. +lease_grant(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseGrantRequest', <<"/etcdserverpb.Lease/LeaseGrant">>, 'Etcd.LeaseGrantResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseRevoke" +-spec lease_revoke(router_pb:'Etcd.LeaseRevokeRequest'()) -> + {ok, router_pb:'Etcd.LeaseRevokeResponse'()}|{error,eetcd:eetcd_error()}. +lease_revoke(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseRevokeRequest', <<"/etcdserverpb.Lease/LeaseRevoke">>, 'Etcd.LeaseRevokeResponse'). + +%% @doc Stream RPC +-spec lease_keep_alive(router_pb:'Etcd.LeaseKeepAliveRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +lease_keep_alive(Request) -> + eetcd_stream:new(Request, <<"/etcdserverpb.Lease/LeaseKeepAlive">>). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseTimeToLive" +-spec lease_time_to_live(router_pb:'Etcd.LeaseTimeToLiveRequest'()) -> + {ok, router_pb:'Etcd.LeaseTimeToLiveResponse'()}|{error,eetcd:eetcd_error()}. +lease_time_to_live(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseTimeToLiveRequest', <<"/etcdserverpb.Lease/LeaseTimeToLive">>, 'Etcd.LeaseTimeToLiveResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Lease/LeaseLeases" +-spec lease_leases(router_pb:'Etcd.LeaseLeasesRequest'()) -> + {ok, router_pb:'Etcd.LeaseLeasesResponse'()}|{error,eetcd:eetcd_error()}. +lease_leases(Request) -> + eetcd_stream:unary(Request, 'Etcd.LeaseLeasesRequest', <<"/etcdserverpb.Lease/LeaseLeases">>, 'Etcd.LeaseLeasesResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_lock_gen.erl b/deps/eetcd/src/clients/eetcd_lock_gen.erl new file mode 100644 index 0000000..baf0fdd --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_lock_gen.erl @@ -0,0 +1,26 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Lock +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:46+00:00 and should not be modified manually + +-module(eetcd_lock_gen). + +-export([lock/1]). +-export([unlock/1]). + +%% @doc Unary RPC for service at path "/v3lockpb.Lock/Lock" +-spec lock(router_pb:'Etcd.LockRequest'()) -> + {ok, router_pb:'Etcd.LockResponse'()}|{error,eetcd:eetcd_error()}. +lock(Request) -> + eetcd_stream:unary(Request, 'Etcd.LockRequest', <<"/v3lockpb.Lock/Lock">>, 'Etcd.LockResponse'). + +%% @doc Unary RPC for service at path "/v3lockpb.Lock/Unlock" +-spec unlock(router_pb:'Etcd.UnlockRequest'()) -> + {ok, router_pb:'Etcd.UnlockResponse'()}|{error,eetcd:eetcd_error()}. +unlock(Request) -> + eetcd_stream:unary(Request, 'Etcd.UnlockRequest', <<"/v3lockpb.Lock/Unlock">>, 'Etcd.UnlockResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_maintenance_gen.erl b/deps/eetcd/src/clients/eetcd_maintenance_gen.erl new file mode 100644 index 0000000..f7393f9 --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_maintenance_gen.erl @@ -0,0 +1,61 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Maintenance +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_maintenance_gen). + +-export([alarm/1]). +-export([status/1]). +-export([defragment/1]). +-export([hash/1]). +-export([hash_kv/1]). +-export([snapshot/1]). +-export([move_leader/1]). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Alarm" +-spec alarm(router_pb:'Etcd.AlarmRequest'()) -> + {ok, router_pb:'Etcd.AlarmResponse'()}|{error,eetcd:eetcd_error()}. +alarm(Request) -> + eetcd_stream:unary(Request, 'Etcd.AlarmRequest', <<"/etcdserverpb.Maintenance/Alarm">>, 'Etcd.AlarmResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Status" +-spec status(router_pb:'Etcd.StatusRequest'()) -> + {ok, router_pb:'Etcd.StatusResponse'()}|{error,eetcd:eetcd_error()}. +status(Request) -> + eetcd_stream:unary(Request, 'Etcd.StatusRequest', <<"/etcdserverpb.Maintenance/Status">>, 'Etcd.StatusResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Defragment" +-spec defragment(router_pb:'Etcd.DefragmentRequest'()) -> + {ok, router_pb:'Etcd.DefragmentResponse'()}|{error,eetcd:eetcd_error()}. +defragment(Request) -> + eetcd_stream:unary(Request, 'Etcd.DefragmentRequest', <<"/etcdserverpb.Maintenance/Defragment">>, 'Etcd.DefragmentResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Hash" +-spec hash(router_pb:'Etcd.HashRequest'()) -> + {ok, router_pb:'Etcd.HashResponse'()}|{error,eetcd:eetcd_error()}. +hash(Request) -> + eetcd_stream:unary(Request, 'Etcd.HashRequest', <<"/etcdserverpb.Maintenance/Hash">>, 'Etcd.HashResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/HashKV" +-spec hash_kv(router_pb:'Etcd.HashKVRequest'()) -> + {ok, router_pb:'Etcd.HashKVResponse'()}|{error,eetcd:eetcd_error()}. +hash_kv(Request) -> + eetcd_stream:unary(Request, 'Etcd.HashKVRequest', <<"/etcdserverpb.Maintenance/HashKV">>, 'Etcd.HashKVResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/Snapshot" +-spec snapshot(router_pb:'Etcd.SnapshotRequest'()) -> + {ok, router_pb:'Etcd.SnapshotResponse'()}|{error,eetcd:eetcd_error()}. +snapshot(Request) -> + eetcd_stream:unary(Request, 'Etcd.SnapshotRequest', <<"/etcdserverpb.Maintenance/Snapshot">>, 'Etcd.SnapshotResponse'). + +%% @doc Unary RPC for service at path "/etcdserverpb.Maintenance/MoveLeader" +-spec move_leader(router_pb:'Etcd.MoveLeaderRequest'()) -> + {ok, router_pb:'Etcd.MoveLeaderResponse'()}|{error,eetcd:eetcd_error()}. +move_leader(Request) -> + eetcd_stream:unary(Request, 'Etcd.MoveLeaderRequest', <<"/etcdserverpb.Maintenance/MoveLeader">>, 'Etcd.MoveLeaderResponse'). + diff --git a/deps/eetcd/src/clients/eetcd_watch_gen.erl b/deps/eetcd/src/clients/eetcd_watch_gen.erl new file mode 100644 index 0000000..8a51acc --- /dev/null +++ b/deps/eetcd/src/clients/eetcd_watch_gen.erl @@ -0,0 +1,19 @@ +%%%------------------------------------------------------------------- +%% @doc Behaviour to implement for eectd Etcd.Watch +%% @private +%% All detail documents please visit https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md +%% @end +%%%------------------------------------------------------------------- + +%% This module was generated on 2020-04-02T02:00:45+00:00 and should not be modified manually + +-module(eetcd_watch_gen). + +-export([watch/1]). + +%% @doc Stream RPC +-spec watch(router_pb:'Etcd.WatchRequest'()) -> + reference()|{error,eetcd:eetcd_error()}. +watch(Request) -> + eetcd_stream:new(Request, <<"/etcdserverpb.Watch/Watch">>). + diff --git a/deps/eetcd/src/eetcd.app.src b/deps/eetcd/src/eetcd.app.src new file mode 100644 index 0000000..d45916b --- /dev/null +++ b/deps/eetcd/src/eetcd.app.src @@ -0,0 +1,10 @@ +{application,eetcd, + [{description,"ETCD V3 client"}, + {vsn,"0.3.2"}, + {registered,[eetcd_sup,eetcd_conn_sup,eetcd_lease_sup]}, + {mod,{eetcd_app,[]}}, + {applications,[kernel,stdlib,gun]}, + {env,[]}, + {modules,[]}, + {licenses,["Apache 2.0"]}, + {links,[{"Github","https://github.com/zhongwencool/eetcd"}]}]}. diff --git a/deps/eetcd/src/eetcd.erl b/deps/eetcd/src/eetcd.erl new file mode 100644 index 0000000..040ae74 --- /dev/null +++ b/deps/eetcd/src/eetcd.erl @@ -0,0 +1,119 @@ +-module(eetcd). +-include("eetcd.hrl"). +%% API +-export([open/2, open/4, open/5, close/1]). +-export([info/0]). +-export([new/1, with_timeout/2]). +-export([get_prefix_range_end/1]). + +%% @doc Connects to a etcd server on TCP port +%% Port on the host with IP address Address, such as: +%% `open(test,["127.0.0.1:2379","127.0.0.1:2479","127.0.0.1:2579"]).' +-spec open(name(), [string()]) -> {ok, pid()} | {error, any()}. +open(Name, Hosts) -> + open(Name, Hosts, [], tcp, []). + +%% @doc Connects to a etcd server. +-spec open(name(), + [string()], + tcp | tls | ssl, + [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok, pid()} | {error, any()}. +open(Name, Hosts, Transport, TransportOpts) -> + open(Name, Hosts, [], Transport, TransportOpts). + +%% @doc Connects to a etcd server. +%% ssl:connect_option() see all options in ssl_api.hrl +%% such as [{certfile, Certfile}, {keyfile, Keyfile}] or [{cert, Cert}, {key, Key}]. +%% +%% Default mode is `connect_all', it creates multiple sub-connections (one sub-connection per each endpoint). +%% The balancing policy is round robin. +%% For instance, in 5-node cluster, `connect_all' would require 5 TCP connections, +%% This may consume more resources but provide more flexible load balance with better failover performance. +%% `eetcd_conn' will do his best to keep all connections normal, and try to reconnect when connection is broken. +%% The reconnect millisecond is 200 400 800 1600 3200 6400 12800 25600, and keep recycling this reconnection time until normal. +%% +%% `{mode, random}' creates only one connection to a random endpoint, +%% it would pick one address and use it to send all client requests. +%% The pinned address is maintained until the client connection is closed. +%% When the client receives an error, it randomly picks another normal endpoint. +%% +%% `[{name, string()},{password, string()}]' generates an authentication token based on a given user name and password. +%% +%% You can use `eetcd:info/0' to see the internal connection status. +-spec open(name(), + [string()], + [{mode, connect_all|random} |{name, string()} | {password, string()}], + tcp | tls | ssl, + [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok, pid()} | {error, any()}. +open(Name, Hosts, Options, Transport, TransportOpts) -> + Cluster = [begin [IP, Port] = string:tokens(Host, ":"), {IP, list_to_integer(Port)} end || Host <- Hosts], + eetcd_conn_sup:start_child([{Name, Cluster, Options, Transport, TransportOpts}]). + +%% @doc close connections with etcd server. +-spec close(name()) -> ok | {error, eetcd_conn_unavailable}. +close(Name) -> + case eetcd_conn:lookup(Name) of + {ok, Pid} -> eetcd_conn:close(Pid); + Err -> Err + end. + +%%% @doc etcd's overview. +-spec info() -> any(). +info() -> + Leases = eetcd_lease_sup:info(), + Conns = eetcd_conn_sup:info(), + io:format("|\e[4m\e[48;2;80;80;80m Name | Status | IP:Port | Conn | Gun |LeaseNum\e[0m|~n"), + [begin + {Name, #{etcd := Etcd, active_conns := Actives}} = Conn, + [begin + io:format("| ~-15.15s| Active |~s:~w|~p |~p |~7.7w | ~n", [Name, IP, Port, Etcd, Gun, maps:get(Gun, Leases, 0)]) + end || {{IP, Port}, Gun, _Token} <- Actives] + end || Conn <- Conns], + io:format("|\e[4m\e[48;2;184;0;0m Name | Status | IP:Port | Conn | ReconnectSecond \e[49m\e[0m|~n"), + [begin + {Name, #{etcd := Etcd, freeze_conns := Freezes}} = Conn, + [begin + io:format("| ~-15.15s| Freeze |~s:~w|~p | ~-15.15w | ~n", [Name, IP, Port, Etcd, Ms / 1000]) + end || {{IP, Port}, Ms} <- Freezes] + end || Conn <- Conns], + ok. + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(ConnName) when is_atom(ConnName) orelse is_reference(ConnName) -> #{eetcd_conn_name => ConnName}; +new(Context) when is_map(Context) -> Context. + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) when is_integer(Timeout); Timeout == infinity -> + case Timeout < 100 of + true -> + Reason = + lists:flatten( + io_lib:format("Setting timeout to ~wms(less than 100ms) is not allowed", [Timeout])), + throw({error, Reason}); + false -> ok + end, + maps:put(eetcd_reply_timeout, Timeout, Context). + +-define(UNBOUND_RANGE_END, "\0"). + +get_prefix_range_end(Key) -> + case eetcd_data_coercion:to_list(Key) of + [] -> ?UNBOUND_RANGE_END; + List0 when is_list(List0) -> + %% find last character < 0xff (255) + {Prefix, Suffix} = lists:splitwith(fun(Ch) -> Ch < 255 end, List0), + case Prefix of + %% keys where all characters >= 0xff are returned as is + [] -> Key; + Prefix -> + %% advance the last character + Ord = lists:last(Prefix), + lists:droplast(Prefix) ++ [Ord + 1] ++ Suffix + end + end. diff --git a/deps/eetcd/src/eetcd_app.erl b/deps/eetcd/src/eetcd_app.erl new file mode 100644 index 0000000..2b0fccd --- /dev/null +++ b/deps/eetcd/src/eetcd_app.erl @@ -0,0 +1,13 @@ +%% @private +-module(eetcd_app). + +-behaviour(application). + +%% Application callbacks +-export([start/2, stop/1]). + +start(_StartType, _StartArgs) -> + eetcd_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/eetcd/src/eetcd_auth.erl b/deps/eetcd/src/eetcd_auth.erl new file mode 100644 index 0000000..fc978fa --- /dev/null +++ b/deps/eetcd/src/eetcd_auth.erl @@ -0,0 +1,361 @@ +-module(eetcd_auth). +-include("eetcd.hrl"). + +%% API +-export([new/1, with_timeout/2]). +-export([auth_enable/1, auth_disable/1]). +-export([user_add/2, user_add/3, user_get/2, + user_list/1, user_delete/2, user_change_password/3, + user_grant_role/3, user_revoke_role/3 +]). +-export([role_add/2, role_get/2, role_list/1, role_delete/2, + role_grant_permission/5, role_revoke_permission/4 +]). + +%%% @doc AuthEnable enables auth of an etcd cluster. +%%%

+%%%
1.base
+%%%
`eetcd_auth:auth_enable(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.auth_enable() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec auth_enable(name()|context()) -> + {ok,router_pb:'Etcd.AuthEnableResponse'()}|{error,eetcd_error()}. +auth_enable(Context) -> + eetcd_auth_gen:auth_enable(new(Context)). + +%%% @doc AuthDisable disables auth of an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:auth_disable(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.auth_disable() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec auth_disable(name()|context()) -> + {ok,router_pb:'Etcd.AuthDisableResponse'()}|{error,eetcd_error()}. +auth_disable(Context) -> + eetcd_auth_gen:auth_disable(new(Context)). + +%%% @doc UserAdd adds a new user with password to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_add(ConnName, Name, Password)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name, password) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_add(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd_error()}. +user_add(Context, Name, Password) -> + C1 = new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(password, Password, C2), + eetcd_auth_gen:user_add(C3). + +%%% @doc UserAdd adds a new user without password to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_add(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_add(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserAddResponse'()}|{error,eetcd_error()}. +user_add(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(options, #{no_password => true}, C2), + eetcd_auth_gen:user_add(C3). + +%%% @doc UserDelete deletes a user from an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_delete(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_delete(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_delete(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserDeleteResponse'()}|{error,eetcd_error()}. +user_delete(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:user_delete(C2). + +%%% @doc UserChangePassword changes a password of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_change_password(ConnName, Name, Password)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_change_password(name, password) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_change_password(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserChangePasswordResponse'()}|{error,eetcd_error()}. +user_change_password(Context, Name, Password) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(password, Password, C2), + eetcd_auth_gen:user_change_password(C3). + +%%% @doc UserGrantRole grants a role to a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_grant_role(ConnName, User, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_grant_role(user, role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_grant_role(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserGrantRoleResponse'()}|{error,eetcd_error()}. +user_grant_role(Context, User, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(user, User, C1), + C3 = maps:put(role, Role, C2), + eetcd_auth_gen:user_grant_role(C3). + +%%% @doc UserGet gets a detailed information of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_get(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_get(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_get(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserGetResponse'()}|{error,eetcd_error()}. +user_get(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:user_get(C2). + +%%% @doc UserList gets a list of all users. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> eetcd_auth:user_list() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_list(name()|context()) -> + {ok,router_pb:'Etcd.AuthUserListResponse'()}|{error,eetcd_error()}. +user_list(Context) -> + eetcd_auth_gen:user_list(eetcd:new(Context)). + +%%% @doc UserRevokeRole revokes a role of a user. +%%%
+%%%
1.base
+%%%
`eetcd_auth:user_revoke_role(ConnName, Name, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_revoke_role(name, role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec user_revoke_role(name()|context(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthUserRevokeRoleResponse'()}|{error,eetcd_error()}. +user_revoke_role(Context, Name, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + C3 = maps:put(role, Role, C2), + eetcd_auth_gen:user_revoke_role(C3). + +%%% @doc RoleAdd adds a new role to an etcd cluster. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_add(ConnName, Name)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_add(name) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_add(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleAddResponse'()}|{error,eetcd_error()}. +role_add(Context, Name) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + eetcd_auth_gen:role_add(C2). + +%%% @doc RoleGrantPermission grants a permission to a role. +%%% PermType: 'READ' | 'WRITE' | 'READWRITE' +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_grant_permission(ConnName, Name, Key, RangeEnd, 'READ')'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.user_add(name, key, rangeEnd, :'WRITE') +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_grant_permission(name()|context(), iodata(), iodata(), iodata(), 'READ' | 'WRITE' | 'READWRITE') -> + {ok,router_pb:'Etcd.AuthRoleGrantPermissionResponse'()}|{error,eetcd_error()}. +role_grant_permission(Context, Name, Key, RangeEnd, PermType) -> + C1 = eetcd:new(Context), + C2 = maps:put(name, Name, C1), + Permission = #{key => Key, range_end => RangeEnd, permType => PermType}, + C3 = maps:put(perm, Permission, C2), + eetcd_auth_gen:role_grant_permission(C3). + +%%% @doc RoleGet gets a detailed information of a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_get(ConnName, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_get(role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_get(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleGetResponse'()}|{error,eetcd_error()}. +role_get(Context, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + eetcd_auth_gen:role_get(C2). + +%%% @doc RoleList gets a list of all roles. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_list() +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_list(name()|context()) -> + {ok,router_pb:'Etcd.AuthRoleListResponse'()}|{error,eetcd_error()}. +role_list(Context) -> + eetcd_auth_gen:role_list(eetcd:new(Context)). + +%%% @doc RoleRevokePermission revokes a permission from a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_revoke_permission(ConnName, Role, Key, RangeEnd)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_revoke_permission(role, key, rangeEnd) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_revoke_permission(name()|context(), iodata(), iodata(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleRevokePermissionResponse'()}|{error,eetcd_error()}. +role_revoke_permission(Context, Role, Key, RangeEnd) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + C3 = maps:put(key, Key, C2), + C4 = maps:put(range_end, RangeEnd, C3), + eetcd_auth_gen:role_revoke_permission(C4). + +%%% @doc RoleDelete deletes a role. +%%%
+%%%
1.base
+%%%
`eetcd_auth:role_delete(ConnName, Role)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_auth.new(connName) +%%% |> :eetcd_auth.with_timeout(6000) +%%% |> :eetcd_auth.role_delete(role) +%%% ''' +%%%
+%%% {@link eetcd_auth:with_timeout/2} {@link eetcd_auth:new/1} +%%% @end +-spec role_delete(name()|context(), iodata()) -> + {ok,router_pb:'Etcd.AuthRoleDeleteResponse'()}|{error,eetcd_error()}. +role_delete(Context, Role) -> + C1 = eetcd:new(Context), + C2 = maps:put(role, Role, C1), + eetcd_auth_gen:role_delete(C2). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). diff --git a/deps/eetcd/src/eetcd_cluster.erl b/deps/eetcd/src/eetcd_cluster.erl new file mode 100644 index 0000000..9c471ca --- /dev/null +++ b/deps/eetcd/src/eetcd_cluster.erl @@ -0,0 +1,151 @@ +-module(eetcd_cluster). + +%% API +-include("eetcd.hrl"). +-export([new/1, with_timeout/2]). +-export([member_list/1]). +-export([member_add/2, member_add_as_learner/2]). +-export([member_remove/2]). +-export([member_update/3]). +-export([member_promote/2]). + +%%% @doc MemberList lists the current cluster membership. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_list(ConnName)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_list() +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_list(context()|name()) -> + {ok,router_pb:'Etcd.MemberListResponse'()}|{error,eetcd_error()}. +member_list(Context) -> eetcd_cluster_gen:member_list(new(Context)). + +%% @doc MemberAdd adds a new member into the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_add(ConnName, ["http://127.0.0.1:2380"])'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_add(["http://127.0.0.1:2380"]) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_add(context()|name(), PeerURLs) -> + {ok,router_pb:'Etcd.MemberListResponse'()} + | {error, {'grpc_error', non_neg_integer(), binary()}} | {error, term()} + when PeerURLs :: [iodata()]. +member_add(Context, PeerAddrs) when is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put(peerURLs, PeerAddrs, C1), + C3 = maps:put(isLearner, false, C2), + eetcd_cluster_gen:member_add(C3). + +%% @doc MemberAddAsLearner adds a new learner member into the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_add_as_learner(ConnName, ["http://127.0.0.1:2380"])'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_add_as_learner(["http://127.0.0.1:2380"]) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_add_as_learner(context()|name(), PeerURLs) -> + {ok,router_pb:'Etcd.MemberListResponse'()} + | {error, {'grpc_error', non_neg_integer(), binary()}} | {error, term()} + when PeerURLs :: [iodata()]. +member_add_as_learner(Context, PeerAddrs) when is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put(peerURLs, PeerAddrs, C1), + C3 = maps:put(isLearner, true, C2), + eetcd_cluster_gen:member_add(C3). + +%% @doc MemberRemove removes an existing member from the cluster. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_remove(ConnName, Id)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_remove(id) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_remove(context()|name(), pos_integer()) -> + {ok,router_pb:'Etcd.MemberRemoveResponse'()}|{error,eetcd_error()}. +member_remove(Context, Id) when is_integer(Id) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + eetcd_cluster_gen:member_remove(C2). + +%% @doc MemberUpdate updates the peer addresses of the member. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_update(ConnName, Id, PeerAddrs)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_remove(id, peerAddrs) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_update(context()|name(), pos_integer(), [list()]) -> + {ok,router_pb:'Etcd.MemberUpdateResponse'()}|{error,eetcd_error()}. +member_update(Context, Id, PeerAddrs) + when is_integer(Id) andalso is_list(PeerAddrs) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + C3 = maps:put(peerURLs, PeerAddrs, C2), + eetcd_cluster_gen:member_update(C3). + +%% @doc MemberPromote promotes a member from raft learner (non-voting) to raft voting member. +%%%
+%%%
1.base
+%%%
`eetcd_cluster:member_promote(ConnName, Id)'
+%%%
2.elixir
+%%%
+%%% ``` +%%% :eetcd_cluster.new(connName) +%%% |> :eetcd_cluster.with_timeout(6000) +%%% |> :eetcd_cluster.member_promote(id) +%%% ''' +%%%
+%%% {@link eetcd_cluster:with_timeout/2} {@link eetcd_cluster:new/1} +%%% @end +-spec member_promote(context()|name(), pos_integer()) -> + {ok,router_pb:'Etcd.MemberPromoteResponse'()}|{error,eetcd_error()}. +member_promote(Context, Id) when is_integer(Id) -> + C1 = new(Context), + C2 = maps:put('ID', Id, C1), + eetcd_cluster_gen:member_promote(C2). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). diff --git a/deps/eetcd/src/eetcd_compare.erl b/deps/eetcd/src/eetcd_compare.erl new file mode 100644 index 0000000..86802ba --- /dev/null +++ b/deps/eetcd/src/eetcd_compare.erl @@ -0,0 +1,60 @@ +-module(eetcd_compare). + +-export([new/1, with_range_end/2]). +-export([value/3, version/3, + mod_revision/3, create_revision/3, + lease/3]). + +new(Key) -> #{key => Key}. + +%% WithRange sets the comparison to scan the range [key, end). +with_range_end(Cmp, End) -> Cmp#{range_end => End}. + +value(Cmp, Result, Value) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'VALUE', + target_union => {value, Value} + }). + +version(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'VERSION', + target_union => {version, Version} + }). + +mod_revision(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'MOD', + target_union => {mod_revision, Version} + }). + +create_revision(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'CREATE', + target_union => {create_revision, Version} + }). + +lease(Cmp, Result, Version) -> + maps:merge(Cmp, + #{ + result => to_result(Result), + target => 'LEASE', + target_union => {lease, Version} + }). + + +to_result("=") -> 'EQUAL'; +to_result("==") -> 'EQUAL'; +to_result("!=") -> 'NOT_EQUAL'; +to_result("=/=") -> 'NOT_EQUAL'; +to_result(">") -> 'GREATER'; +to_result("<") -> 'LESS'. + diff --git a/deps/eetcd/src/eetcd_conn.erl b/deps/eetcd/src/eetcd_conn.erl new file mode 100644 index 0000000..b618377 --- /dev/null +++ b/deps/eetcd/src/eetcd_conn.erl @@ -0,0 +1,462 @@ +%% @private +-module(eetcd_conn). +-include("eetcd.hrl"). + +-behaviour(gen_statem). + +%% API +-export([open/1, close/1, + round_robin_select/1, lookup/1, + check_health/1, flush_token/2]). + +-export([init/1, handle_event/4, terminate/3, + code_change/4, callback_mode/0, format_status/2]). + +-define(ready, ready). +-define(reconnect, reconnect). + +-define(check_health, check_health_msg). +-define(flush_token, flush_token_msg). + +%%% 200 400 800 1600 3200 6400 12800 25600 +-define(MIN_RECONN, 200). +-define(MAX_RECONN, 25600). + +%%%=================================================================== +%%% API +%%%=================================================================== + +open(Args) -> + case gen_statem:start_link(?MODULE, Args, []) of + {ok, Pid} -> {ok, Pid}; + {error, {shutdown, Err}} -> Err + end. + +close(Pid) -> + gen_statem:stop(Pid). + +round_robin_select(Name) -> + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_', token = H, gun = G})when N =:= Name -> {H, G} end), + MS = [{#eetcd_conn{id = {'_', '$1'}, gun = '$2', token = '$3', _ = '_'}, + [{'=:=', '$1', {const, Name}}], + [{{'$2', '$3'}}]}], + case ets:select(?ETCD_CONNS, MS) of + [] -> {error, eetcd_conn_unavailable}; + [{Gun, undefined}] -> {ok, Gun, ?HEADERS}; + [{Gun, Token}] -> {ok, Gun, [{<<"authorization">>, Token} | ?HEADERS]}; + [Uniq] -> Uniq; + Lists -> + Length = erlang:length(Lists), + Index = ets:update_counter(?ETCD_CONNS, Name, {1, 1, Length, 1}, {1, Name}), + case lists:nth(Index, Lists) of + {Gun, undefined} -> {ok, Gun, ?HEADERS}; + {Gun, Token} -> {ok, Gun, [{<<"authorization">>, Token} | ?HEADERS]} + end + end. + +lookup(Name) when is_atom(Name) orelse is_reference(Name) -> + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_', conn = G})when N =:= Name -> G end), + MS = [{#eetcd_conn{id = {'_', '$1'}, conn = '$2', _ = '_'}, + [{'=:=', '$1', {const, Name}}], + ['$2']}], + case ets:select(?ETCD_CONNS, MS) of + [] -> {error, eetcd_conn_unavailable}; + [Pid | _] -> {ok, Pid} + end. + +check_health(Name) -> + case lookup(Name) of + {ok, Pid} -> erlang:send(Pid, ?check_health); + Err -> Err + end. + +flush_token(Gun, Headers) -> + Token = proplists:get_value(<<"authorization">>, Headers), + %% ets:fun2ms(fun(#eetcd_conn{gun = G, _ = '_', conn = C})when G =:= Pid -> C end), + MS = [{#eetcd_conn{id = '_', gun = '$1', conn = '$2', _ = '_'}, + [{'=:=', '$1', {const, Gun}}], + ['$2']}], + [Pid | _] = ets:select(?ETCD_CONNS, MS), + NewToken = gen_statem:call(Pid, {?flush_token, Gun, Token}), + lists:keyreplace(<<"authorization">>, 1, Headers, {<<"authorization">>, NewToken}). +%%%=================================================================== +%%% gen_statem callbacks +%%%=================================================================== +init({Name, Hosts, Options, Transport, TransportOpts}) -> + erlang:process_flag(trap_exit, true), + GunOpts = #{protocols => [http2], + http2_opts => #{keepalive => 45000}, + retry => 0, + transport => Transport, + transport_opts => TransportOpts + }, + Data0 = #{ + name => Name, + gun_opts => GunOpts, + health_ref => undefined, + reconn_ref => undefined, + active_conns => [] + }, + Data = put_in_authenticate(Data0, Options), + case proplists:get_value(mode, Options, connect_all) of + connect_all -> + connect_all(Hosts, Name, GunOpts, Data); + random -> + Length = erlang:length(Hosts), + Data1 = Data#{endpoints => shuffle(Hosts), mode => random}, + Index = rand:uniform(Length), + connect_one(Index, 2 * Length, Data1, Length) + end. + +callback_mode() -> [handle_event_function]. + +format_status(_Opt, [_PDict, StateName, Data]) -> + #{'StateName' => StateName, 'StateData' => Data}. + +handle_event({call, From}, {?flush_token, Gun, Token}, _StateName, Data) -> + {NewToken, NewData} = do_flush_token(Gun, Token, Data), + {keep_state, NewData, [{reply, From, NewToken}]}; +handle_event(info, {'DOWN', _GunRef, process, Gun, _Reason}, _StateName, Data) -> + handle_conn_down(Data, Gun); +handle_event(info, {gun_down, Gun, http2, _Error, _KilledStreams, _UnprocessedStreams}, _StateName, Data) -> + handle_conn_down(Data, Gun); +handle_event(EventType, reconnecting, _StateName, Data) + when EventType =:= internal orelse EventType =:= info -> + reconnect_conns(Data); +handle_event(info, ?check_health, _StateName, Data) -> + {keep_state, do_check_health(Data)}; +handle_event(internal, ?ready, ?ready, #{name := Name}) -> + ?LOG_INFO("ETCD(~p, ~p)'s connections are ready.", [Name, self()]), + keep_state_and_data; +handle_event(EventType, EventContent, StateName, Data) -> + ?LOG_ERROR("~p: unknow event ~p ~p ~p ~n", + [{?MODULE, self()}, {EventType, EventContent}, StateName, Data]), + keep_state_and_data. + +terminate(_Reason, _StateName, Data) -> + #{name := Name, active_conns := Actives} = Data, + %% ets:fun2ms(fun(#eetcd_conn{id = {_, N}, _ = '_'})-> N =:= Name end), + MS = [{#eetcd_conn{id = {'_', '$1'}, _ = '_'}, [], [{'=:=', '$1', {const, Name}}]}], + ets:select_delete(?ETCD_CONNS, MS), + ets:match_delete(?ETCD_CONNS, {'_', Name}), + [begin gun:close(Gun) end || {_Host, Gun, _Token} <- Actives], + ok. + +code_change(_OldVsn, StateName, Data, _Extra) -> + {ok, StateName, Data}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== + +connect_all(Hosts, Name, GunOpts, Data) -> + Auth = maps:get(authenticate, Data, undefined), + case fold_connect(Hosts, Name, GunOpts, Auth, [], []) of + {Ok, []} -> + {ok, ?ready, Data#{ + mode => connect_all, + health_ref => next_check_health(), + active_conns => Ok, + freeze_conns => []}}; + {Ok, Failed} when length(Ok) > length(Failed) -> + Freezes = [{Host, ?MIN_RECONN} || {Host, _Reason} <- Failed], + {ok, ?reconnect, Data#{ + mode => connect_all, + health_ref => next_check_health(), + active_conns => Ok, + freeze_conns => Freezes}, + {next_event, internal, reconnecting}}; + {Ok, Failed} -> + [begin gun:close(G) end || {_Host, G, _Auth} <- Ok], + {stop, {shutdown, Failed}} + end. + +connect_one(Index, Retry, Data, Len) -> + #{endpoints := Hosts, name := Name, gun_opts := GunOpts} = Data, + case lookup(Name) of + {ok, _Pid} -> + {stop, {shutdown, {error, already_started}}}; + {error, eetcd_conn_unavailable} -> + Auth = maps:get(authenticate, Data, undefined), + Host = lists:nth(Index, Hosts), + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, AuthToken} -> + {ok, ?ready, Data#{ + index => Index, + health_ref => next_check_health(), + active_conns => [{Host, Gun, AuthToken}]}}; + {error, Reason} when Retry =< 0 -> + {stop, {shutdown, Reason}}; + {error, Reason} -> + ?LOG_WARNING("~p failed to connect ETCD host: ~p ~p~n", + [Name, Host, Reason]), + NewIndex = (Index + 1) rem Len + 1, + connect_one(NewIndex, Retry - 1, Data, Len) + end + end. + +fold_connect([], _Name, _GunOpts, _Auth, Ok, Fail) -> {Ok, Fail}; +fold_connect([Host | Hosts], Name, GunOpts, Auth, Ok, Fail) -> + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, Token} -> + NewOk = [{Host, Gun, Token} | Ok], + fold_connect(Hosts, Name, GunOpts, Auth, NewOk, Fail); + {error, Reason} -> + ?LOG_ERROR("Failed to connect ETCD: ~p by ~p", [Host, Reason]), + NewFail = [{Host, Reason} | Fail], + fold_connect(Hosts, Name, GunOpts, Auth, Ok, NewFail) + end. + +connect(Name, {IP, Port}, GunOpts, Auth) -> + {ok, Gun} = gun:open(IP, Port, GunOpts), + case gun:await_up(Gun, 1000) of + {ok, http2} -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> + case token_remote(Gun, Auth) of + {ok, Token} -> + try_update_conn(IP, Port, Name, Gun, Token); + {error, AuthReason} -> + exit_conn("Authenticate", Gun, AuthReason, Name, IP, Port) + end; + {error, LeaderReason} -> + exit_conn("No Leader", Gun, LeaderReason, Name, IP, Port) + end; + {error, HealthReason} -> + exit_conn("GRPC Unhealthy", Gun, HealthReason, Name, IP, Port) + end; + {error, GunReason} -> + exit_conn("Gun Down", Gun, GunReason, Name, IP, Port) + end. + +try_update_conn(IP, Port, Name, Gun, Token) -> + Conn = #eetcd_conn{id = {{IP, Port}, Name}, + gun = Gun, token = Token, + conn = self()}, + case ets:insert_new(?ETCD_CONNS, Conn) of + false -> + gun:close(Gun), + {error, already_started}; + true -> + erlang:monitor(process, Gun), + ?LOG_INFO("~p connect to ~p:~p gun(~p) successed~n", + [Name, IP, Port, Gun]), + {ok, Gun, Token} + end. + +exit_conn(Log, Gun, Reason, Name, IP, Port) -> + gun:close(Gun), + ?LOG_WARNING("~p failed to connect [~s:~p] by <~s> ~p~n", + [Name, IP, Port, Log, Reason]), + {error, Reason}. + +handle_conn_down(#{mode := connect_all} = Data, Gun) -> freeze_conn(Data, Gun); +handle_conn_down(#{mode := random} = Data, Gun) -> clean_stale_conn(Data, Gun). + +freeze_conn(Data, Gun) -> + #{active_conns := Actives, freeze_conns := Freezes, name := Name} = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, _, _}, NewActives} -> + ets:delete(?ETCD_CONNS, {Endpoint, Name}), + gun:close(Gun), + NewData = Data#{active_conns => NewActives, freeze_conns => [{Endpoint, ?MIN_RECONN} | Freezes]}, + {next_state, ?reconnect, NewData, {next_event, internal, reconnecting}}; + false when Freezes =:= [] -> + {next_state, ?ready, Data}; + false -> + {next_state, ?reconnect, Data, {next_event, internal, reconnecting}} + end. + +clean_stale_conn(Data, Gun) -> + #{active_conns := Actives, name := Name} = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, _, _}, NewActives} -> + ets:delete(?ETCD_CONNS, {Endpoint, Name}), + gun:close(Gun), + NewData = Data#{active_conns => NewActives}, + {next_state, ?reconnect, NewData, {next_event, internal, reconnecting}}; + false -> + {next_state, ?reconnect, Data, {next_event, internal, reconnecting}} + end. + +do_flush_token(Gun, OldToken, Data) -> + #{ + active_conns := Actives, + name := Name, + authenticate := Auth + } = Data, + case lists:keytake(Gun, 2, Actives) of + {value, {Endpoint, Gun, OldToken}, NewActives} -> + case token_remote(Gun, Auth) of + {ok, NewToken} -> + Conn = #eetcd_conn{conn = self(), + gun = Gun, token = NewToken, + id = {Endpoint, Name}}, + ets:insert(?ETCD_CONNS, Conn), + NewData = Data#{active_conns => [{Endpoint, Gun, NewToken} | NewActives]}, + {NewToken, NewData}; + {error, _AuthReason} -> {OldToken, Data} + end; + {value, {_Endpoint, _Gun, NewToken}, _NewActives} -> + {NewToken, Data}; + _ -> {OldToken, Data} + end. + +reconnect_conns(#{mode := connect_all} = Data) -> + #{ + name := Name, + freeze_conns := Freezes, + active_conns := Actives, + gun_opts := GunOpts, + reconn_ref := ReConnRef + } = Data, + Auth = maps:get(authenticate, Data, undefined), + is_reference(ReConnRef) andalso erlang:cancel_timer(ReConnRef), + {NewActives, NewFreezes} = + lists:foldl(fun({Host, Ms}, {Ok, Failed}) -> + case connect(Name, Host, GunOpts, Auth) of + {ok, Gun, Token} -> + {[{Host, Gun, Token} | Ok], Failed}; + {error, _Reason} -> + {Ok, [{Host, reconnect_time(Ms bsl 1)} | Failed]} + end end, + {[], []}, Freezes), + NewData = Data#{active_conns => NewActives ++ Actives, freeze_conns => NewFreezes}, + case NewFreezes =:= [] of + true -> {next_state, ?ready, NewData, {next_event, internal, ?ready}}; + false -> + NextReconnMs = lists:min([T || {_, T} <- NewFreezes]), + NewRef = erlang:send_after(NextReconnMs, self(), reconnecting), + {next_state, ?reconnect, NewData#{reconn_ref => NewRef}} + end; +reconnect_conns(#{mode := random, active_conns := []} = Data) -> + #{endpoints := Hosts, index := Index, reconn_ref := ReConnRef} = Data, + is_reference(ReConnRef) andalso erlang:cancel_timer(ReConnRef), + Len = erlang:length(Hosts), + case connect_one(Index, Len, Data, Len) of + {ok, ?ready, NewData} -> + {next_state, ?ready, NewData, {next_event, internal, ?ready}}; + {stop, {shutdown, _Reason}} -> + NewRef = erlang:send_after(1000, self(), reconnecting), + {next_state, ?reconnect, Data#{reconn_ref => NewRef}} + end; +reconnect_conns(_Data) -> keep_state_and_data. + +next_check_health() -> + Ms = application:get_env(eetcd, health_check_ms, 15000), + erlang:send_after(Ms, self(), ?check_health). + +do_check_health(Data = #{mode := Mode, health_ref := HealthRef}) -> + erlang:cancel_timer(HealthRef), + NewData = do_check_health(Mode, Data), + NewHealthRef = next_check_health(), + NewData#{health_ref => NewHealthRef}. + +do_check_health(connect_all, Data) -> + #{ + name := Name, + active_conns := Actives, + freeze_conns := Freezes + } = Data, + {NewActives, NewFreezes} = + lists:foldl(fun({Host, Gun, _Token} = Endpoint, {Health, Freeze}) -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> + {[Endpoint | Health], Freeze}; + {error, Reason} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) leader failed by ~p ", [Name, Host, Reason]), + {Health, [{Host, ?MIN_RECONN} | Freeze]} + end; + {error, Reason1} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) health failed by ~p ", [Name, Host, Reason1]), + {Health, [{Host, ?MIN_RECONN} | Freeze]} + end + end, {[], Freezes}, Actives), + Data#{active_conns => NewActives, freeze_conns => NewFreezes}; +do_check_health(random, Data) -> + #{name := Name, active_conns := ActiveConns} = Data, + case ActiveConns of + [{Host, Gun, _Token}] -> + case check_health_remote(Gun) of + ok -> + case check_leader_remote(Gun) of + ok -> Data; + {error, Reason} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) leader failed by ~p ", [Name, Host, Reason]), + Data#{active_conns => []} + end; + {error, Reason1} -> + ets:delete(?ETCD_CONNS, {Host, Name}), + gun:close(Gun), + ?LOG_ERROR("~p check (~p) health failed by ~p ", [Name, Host, Reason1]), + Data#{active_conns => []} + end; + [] -> Data + end. + +%% UNKNOWN = 0; +%% SERVING = 1; +%% NOT_SERVING = 2; +%% SERVICE_UNKNOWN = 3; // Used only by the Watch method. +check_health_remote(Gun) -> + Path = <<"/grpc.health.v1.Health/Check">>, + case eetcd_stream:unary(Gun, #{}, 'Etcd.HealthCheckRequest', Path, 'Etcd.HealthCheckResponse', ?HEADERS) of + {ok, #{status := 'SERVING'}} -> ok; + {ok, #{status := 'UNKNOWN'}} -> ok; + %% etcd does not support health checks in early versions of v3 API + {error, {grpc_error, #{'grpc-message' := <<"unknown service grpc.health.v1.Health">>, + 'grpc-status' := ?GRPC_STATUS_UNIMPLEMENTED}}} -> ok; + {ok, #{status := Status}} -> {error, {unhealthy, Status}}; + {error, _Reason} = Err -> Err + end. + +check_leader_remote(Gun) -> + Path = <<"/etcdserverpb.Maintenance/Status">>, + Request = eetcd:with_timeout(#{}, 10000), + case eetcd_stream:unary(Gun, Request, 'Etcd.StatusRequest', Path, 'Etcd.StatusResponse', ?HEADERS) of + {ok, #{leader := Leader}} when Leader > 0 -> ok; + {ok, #{errors := Errors, leader := 0}} -> {error, {no_leader, Errors}}; + {error, _Reason} = Err -> Err + end. + +token_remote(_Gun, undefined) -> {ok, undefined}; +token_remote(Gun, #{name := Name, password := Passwd}) -> + Path = <<"/etcdserverpb.Auth/Authenticate">>, + Req1 = eetcd:with_timeout(#{}, 10000), + Req2 = maps:put(name, Name, Req1), + Req3 = + case Passwd of + undefined -> Req2; + _ -> maps:put(password, Passwd, Req2) + end, + case eetcd_stream:unary(Gun, Req3, 'Etcd.AuthenticateRequest', Path, 'Etcd.AuthenticateResponse', ?HEADERS) of + {ok, #{token := Token}} -> {ok, Token}; + {error, _Reason} = Err -> Err + end. + +reconnect_time(Ms) when Ms > ?MAX_RECONN -> ?MIN_RECONN; +reconnect_time(Ms) -> Ms. + +put_in_authenticate(Data, Options) -> + case proplists:get_value(name, Options, undefined) of + undefined -> Data; + UserName -> + Password = proplists:get_value(password, Options), + Auth = #{name => UserName, password => Password}, + Data#{authenticate => Auth} + end. + +shuffle(List) -> + Disorders = [begin {rand:uniform(), K} end||K <-List], + [begin K end||{_, K} <- lists:keysort(1, Disorders)]. + diff --git a/deps/eetcd/src/eetcd_conn_sup.erl b/deps/eetcd/src/eetcd_conn_sup.erl new file mode 100644 index 0000000..523e783 --- /dev/null +++ b/deps/eetcd/src/eetcd_conn_sup.erl @@ -0,0 +1,44 @@ +%% @private +-module(eetcd_conn_sup). + +-behaviour(supervisor). +-include("eetcd.hrl"). + +%% API +-export([start_link/0, start_child/1, info/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Args) -> + supervisor:start_child(?MODULE, Args). + +info() -> + lists:foldl(fun({_, Pid, _, _}, Acc) -> + {_StateName, + #{ + name := Name, + active_conns := Actives + } = Data} = sys:get_state(Pid), + Freezes = maps:get(freeze_conns, Data, []), + [{Name, #{etcd => Pid, active_conns => Actives, freeze_conns => Freezes}} | Acc] + end, [], supervisor:which_children(?MODULE)). + +init([]) -> + ets:new(?ETCD_CONNS, [named_table, {read_concurrency, true}, public, {keypos, #eetcd_conn.id}]), + MaxRestarts = 300, + MaxSecondsBetweenRestarts = 60, + SupFlags = #{ + strategy => simple_one_for_one, + intensity => MaxRestarts, + period => MaxSecondsBetweenRestarts}, + Worker = eetcd_conn, + Child = #{ + id => Worker, + start => {Worker, open, []}, + restart => transient, + shutdown => 1000, + type => worker, + modules => [Worker]}, + {ok, {SupFlags, [Child]}}. diff --git a/deps/eetcd/src/eetcd_data_coercion.erl b/deps/eetcd/src/eetcd_data_coercion.erl new file mode 100644 index 0000000..71132bf --- /dev/null +++ b/deps/eetcd/src/eetcd_data_coercion.erl @@ -0,0 +1,17 @@ +-module(eetcd_data_coercion). + +%% API +-export([to_list/1, to_binary/1]). + +-spec to_list(Val :: integer() | list() | binary() | atom() | map()) -> list(). +to_list(Val) when is_list(Val) -> Val; +to_list(Val) when is_map(Val) -> maps:to_list(Val); +to_list(Val) when is_atom(Val) -> atom_to_list(Val); +to_list(Val) when is_binary(Val) -> binary_to_list(Val); +to_list(Val) when is_integer(Val) -> integer_to_list(Val). + +-spec to_binary(Val :: binary() | list() | atom() | integer()) -> binary(). +to_binary(Val) when is_list(Val) -> list_to_binary(Val); +to_binary(Val) when is_atom(Val) -> atom_to_binary(Val, utf8); +to_binary(Val) when is_integer(Val) -> integer_to_binary(Val); +to_binary(Val) -> Val. diff --git a/deps/eetcd/src/eetcd_election.erl b/deps/eetcd/src/eetcd_election.erl new file mode 100644 index 0000000..9637a93 --- /dev/null +++ b/deps/eetcd/src/eetcd_election.erl @@ -0,0 +1,308 @@ +-module(eetcd_election). +-include("eetcd.hrl"). + +-export([new/1, with_timeout/2, with_name/2, with_lease/2, with_leader/2]). +-export([campaign/4, proclaim/3, leader/2, resign/2]). +-export([campaign/1, proclaim/1, leader/1, resign/1]). +-export([campaign_request/4, campaign_response/2]). +-export([observe/3, observe_stream/2]). + +-export_type([campaign_ctx/0, observe_ctx/0]). +-type observe_ctx() :: #{leader => map(), http2_pid => pid(), monitor_ref => reference(), stream_ref => reference()}. +-type campaign_ctx() :: #{campaign => map()|'waiting_campaign_response', http2_pid => pid(), monitor_ref => reference(), stream_ref => reference()}. + +%%% @doc Creates a blank context for a request. +-spec new(atom()|reference()) -> context(). +new(Ctx) -> eetcd:new(Ctx). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Ctx, Timeout) -> eetcd:with_timeout(Ctx, Timeout). + +%%% @doc name is the election's identifier for the campaign. +-spec with_name(context(), Name :: binary()) -> context(). +with_name(Ctx, Name) -> + maps:put(name, Name, Ctx). + +%%% @doc lease is the ID of the lease attached to leadership of the election. If the +%% lease expires or is revoked before resigning leadership, then the +%% leadership is transferred to the next campaigner, if any. +-spec with_lease(context(), LeaseID :: pos_integer()) -> context(). +with_lease(Ctx, LeaseID) -> + maps:put(lease, LeaseID, Ctx). + +%%% @doc value is the value set when the campaigner wins the election. +-spec with_value(context(), Value :: binary()) -> context(). +with_value(Ctx, Value) -> + maps:put(value, Value, Ctx). + +%%% @doc leader describes the resources used for holding leadership of the election. +%%% It's a map return from CampaignResponse +%%% name is the election identifier that corresponds to the leadership key. +%%% key is an opaque key representing the ownership of the election. If the key is deleted, then leadership is lost. +%%% rev is the creation revision of the key. It can be used to test for ownership of an election during transactions by testing the key's creation revision matches rev. +%%% lease is the lease ID of the election leader. +-spec with_leader(context(), Leader :: binary()) -> context(). +with_leader(Ctx, Leader) -> + maps:put(leader, Leader, Ctx). + +%%% @doc +%%% Campaign waits to acquire leadership in an election, returning a LeaderKey +%%% representing the leadership if successful. The LeaderKey can then be used +%%% to issue new values on the election, transactionally guard API requests on +%%% leadership still being held, and resign from the election. +%%%
+%%%
1. base
+%%%
`eetcd_election:campaign(ConnName, Name, LeaseId, Value).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_timeout(3000) +%%% |> :eetcd_election.with_name(name) +%%% |> :eetcd_election.with_lease(leaseId) +%%% |> :eetcd_election.with_value(Value) +%%% |> :eetcd_kv.campaign() +%%% ''' +%%%
+%%% {@link eetcd_election:with_name/2}, {@link eetcd_election:with_lease/2}, +%%% {@link eetcd_election:with_value/2}, {@link eetcd_election:with_timeout/2} +%%% @end +-spec campaign(Ctx :: context()) -> {ok, router_pb:'Etcd.CampaignResponse'()} | {error, eetcd_error()}. +campaign(Ctx) -> + eetcd_election_gen:campaign(Ctx). + +-spec campaign(Ctx :: context()|name(), Name :: binary(), LeaseId :: integer(), Value :: binary()) -> + {ok, router_pb:'Etcd.CampaignResponse'()} | {error, eetcd_error()}. +campaign(Ctx, Name, LeaseId, Value) -> + Ctx1 = new(Ctx), + Ctx2 = with_name(Ctx1, Name), + Ctx3 = with_lease(Ctx2, LeaseId), + Ctx4 = with_value(Ctx3, Value), + eetcd_election_gen:campaign(Ctx4). + +%%% @doc campaign async to acquire leadership. +%%% if there is already a leader, campaign/4 will be held(block) forever until timeout. +%%% the campaign_request/4 will return immediately, +%%% then your can use campaign_response/2 to handle `Etcd.CampaignResponse`. +%%% gen_server example +%%% ``` +%%% init(Arg) -> +%%% ... +%%% {ok, CCtx} = eetcd_election:campaign_request(connName, Name, LeaderId, Value), +%%% ... +%%% handle_info(Msg, State=#{ctx := CCtx}) -> +%%% case eetcd_election:campaign_response(CCtx, Msg) of +%%% unknown -> do_handle_your_msg(Msg, State); +%%% {ok, #{campaign := Leader}} -> campaign_win(Leader); +%%% {error, Reason} -> campaign_error(Reason) +%%% end. +%%% ''' +-spec campaign_request(name(), Name :: binary(), LeaseId :: integer(), Value :: binary()) -> + {ok, campaign_ctx()} | {error, eetcd_error()}. +campaign_request(ConnName, Name, LeaseId, Value) -> + Request0 = with_name(#{}, Name), + Request1 = with_lease(Request0, LeaseId), + Request = with_value(Request1, Value), + case eetcd_stream:new(ConnName, <<"/v3electionpb.Election/Campaign">>) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.CampaignRequest', fin), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + campaign => waiting_campaign_response + } + }; + Err -> Err + end. + +-spec campaign_response(campaign_ctx(), term()) -> + unknown|{ok, campaign_ctx()} | {error, eetcd_error()}. +%%% @doc handle campaign async response `Etcd.CampaignResponse'. +campaign_response(CCtx, Msg) -> + case resp_stream(CCtx, Msg) of + {ok, Bin} -> + #{monitor_ref := MRef} = CCtx, + erlang:demonitor(MRef, [flush]), + {ok, #{leader := Leader}, <<>>} + = eetcd_grpc:decode(identity, Bin, 'Etcd.CampaignResponse'), + {ok, #{ + campaign => Leader, + http2_pid => undefined, + monitor_ref => undefined, + stream_ref => undefined + }}; + Other -> Other + end. + +%%% @doc +%%% Proclaim updates the leader's posted value with a new value. +%%% Leader is the leadership hold on the election. +%%% Value is an update meant to overwrite the leader's current value. +%%%
+%%%
1. base
+%%%
`eetcd_election:proclaim(ConnName, Leader, Value).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_leader(name) +%%% |> :eetcd_election.with_value(Value) +%%% |> :eetcd_kv.proclaim() +%%% ''' +%%%
+%%% {@link eetcd_election:with_leader/2}, {@link eetcd_election:with_value/2} +%%% @end +-spec proclaim(Ctx :: context()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()} | {error, eetcd_error()}. +proclaim(Ctx) -> + eetcd_election_gen:proclaim(Ctx). + +-spec proclaim(Ctx :: context()|name(), Leader :: map(), Value :: binary()) -> + {ok, router_pb:'Etcd.ProclaimResponse'()} | {error, eetcd_error()}. +proclaim(Ctx, Leader, Val) -> + Ctx1 = new(Ctx), + Ctx2 = with_leader(Ctx1, Leader), + Ctx3 = with_value(Ctx2, Val), + eetcd_election_gen:proclaim(Ctx3). + +%%% @doc +%%% Resign releases election leadership so other campaigners may acquire +%% leadership on the election. +%%%
+%%%
1. base
+%%%
`eetcd_election:resign(ConnName, Leader).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_leader(Leader) +%%% |> :eetcd_kv.resign() +%%% ''' +%%%
+%%% {@link eetcd_election:with_leader/2} +%%% @end +-spec resign(Ctx :: context()) -> + {ok, router_pb:'Etcd.ResignResponse'()} | {error, eetcd_error()}. +resign(Ctx) -> + eetcd_election_gen:resign(Ctx). + +-spec resign(Ctx :: context()|name(), Leader :: binary()) -> + {ok, router_pb:'Etcd.ResignResponse'()} | {error, eetcd_error()}. +resign(Ctx, Leader) -> + Ctx1 = new(Ctx), + Ctx2 = with_leader(Ctx1, Leader), + eetcd_election_gen:resign(Ctx2). + +%%% @doc +%%% Leader returns the current election proclamation, if any. +%%%
+%%%
1. base
+%%%
`eetcd_election:leader(ConnName, Name).'
+%%%
2. elixir
+%%%
+%%% ``` +%%% :eetcd_election.new(connName) +%%% |> :eetcd_election.with_name(name) +%%% |> :eetcd_kv.leader() +%%% ''' +%%%
+%%% {@link eetcd_election:with_name/2} +%%% @end +-spec leader(Ctx :: context()) -> + {ok, router_pb:'Etcd.LeaderResponse'()} | {error, eetcd_error()}. +leader(Ctx) -> + eetcd_election_gen:leader(Ctx). + +-spec leader(Ctx :: context()|name(), Name :: binary()) -> + {ok, router_pb:'Etcd.LeaderResponse'()} | {error, eetcd_error()}. +leader(Ctx, Name) -> + Ctx1 = new(Ctx), + Ctx2 = with_name(Ctx1, Name), + eetcd_election_gen:leader(Ctx2). + +%%% @doc Observe streams election proclamations in-order as made by the election's elected leaders. +%%% Timeout is an integer greater than zero which specifies how many milliseconds to wait for a leaders, +%%% or the atom infinity to wait indefinitely. If no leader is received within the specified time, +%%% the function call return 'election_no_leader'. and will streams election proclamations by order messages. +-spec observe(name(), binary(), timeout()) -> {ok, observe_ctx()}|{error, eetcd_error()}. +observe(ConnName, Name, Timeout) -> + Request = #{name => Name}, + {ok, Gun, StreamRef} = eetcd_election_gen:observe(ConnName), + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.LeaderRequest', fin), + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Body} -> + {ok, #{kv := KV}, <<>>} + = eetcd_grpc:decode(identity, Body, 'Etcd.LeaderResponse'), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + leader => KV + } + }; + {error, _} = Err1 -> + erlang:demonitor(MRef, [flush]), + Err1 + end; + {response, fin, 200, RespHeaders} -> + erlang:demonitor(MRef, [flush]), + {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, timeout} -> + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + leader => 'election_no_leader' + } + }; + {error, _} = Err2 -> + erlang:demonitor(MRef, [flush]), + Err2 + end. + +%%% @doc handle observe stream `Etcd.LeaderResponse'. +-spec observe_stream(observe_ctx(), term()) -> + unknown|{ok, observe_ctx()} | {error, eetcd_error()}. +observe_stream(OCtx, Msg) -> + case resp_stream(OCtx, Msg) of + {ok, Bin} -> + {ok, #{kv := KV}, <<>>} = eetcd_grpc:decode(identity, Bin, 'Etcd.LeaderResponse'), + {ok, OCtx#{leader => KV}}; + Other -> Other + end. + +resp_stream(#{stream_ref := Ref, http2_pid := Pid}, + {gun_response, Pid, Ref, nofin, 200, _Headers}) -> + receive {gun_data, Pid, Ref, nofin, Bin} -> + {ok, Bin} + after 2000 -> unknown + end; +resp_stream(#{stream_ref := Ref, http2_pid := Pid}, + {gun_data, Pid, Ref, nofin, Bin}) -> + {ok, Bin}; +resp_stream(#{stream_ref := SRef, http2_pid := Pid, monitor_ref := MRef}, + {gun_error, Pid, SRef, Reason}) -> %% stream error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {stream_error, Reason}}; +resp_stream(#{http2_pid := Pid, stream_ref := SRef, monitor_ref := MRef}, + {gun_error, Pid, Reason}) -> %% gun connection process state error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {conn_error, Reason}}; +resp_stream(#{http2_pid := Pid, monitor_ref := MRef}, + {'DOWN', MRef, process, Pid, Reason}) -> %% gun connection down + erlang:demonitor(MRef, [flush]), + {error, {http2_down, Reason}}; +resp_stream(_OCtx, _UnKnow) -> unknown. diff --git a/deps/eetcd/src/eetcd_grpc.erl b/deps/eetcd/src/eetcd_grpc.erl new file mode 100644 index 0000000..5801dd6 --- /dev/null +++ b/deps/eetcd/src/eetcd_grpc.erl @@ -0,0 +1,58 @@ +%% @private +-module(eetcd_grpc). +-include("eetcd.hrl"). + +-export([decode/3, encode/3]). +-export([grpc_status/1]). + +%%==================================================================== +%% API functions +%%==================================================================== + +-spec encode(identity | gzip, map(), atom()) -> binary(). +encode(GrpcType, Msg, MsgName) -> + PbMsg = router_pb:encode_msg(Msg, MsgName, [{verify, true}]), + encode_(GrpcType, PbMsg). + +-spec decode(identity | gzip, binary(), atom()) -> grpc_status(). +decode(Encoding, Frame, PbType) -> + case decode_(Frame, Encoding) of + {ok, PbBin, Fragment} -> + {ok, router_pb:decode_msg(PbBin, PbType), Fragment}; + more -> more + end. + + +grpc_status(RespHeaders) -> + GrpcStatus = binary_to_integer(proplists:get_value(<<"grpc-status">>, RespHeaders, <<"0">>)), + GrpcMessage = proplists:get_value(<<"grpc-message">>, RespHeaders, <<"">>), + #{'grpc-status' => GrpcStatus, 'grpc-message' => GrpcMessage}. + +%%==================================================================== +%% Internal functions +%%==================================================================== + +encode_(identity, Bin) -> + Length = byte_size(Bin), + <<0, Length:32, Bin/binary>>; +encode_(gzip, Bin) -> + CompressedBin = zlib:gzip(Bin), + Length = byte_size(CompressedBin), + <<1, Length:32, CompressedBin/binary>>; +encode_(Encoding, _) -> + throw({error, {unknown_encoding, Encoding}}). + +decode_(<<0, Length:32, Encoded:Length/binary, Rest/binary>>, _Encoding) -> {ok, Encoded, Rest}; +decode_(<<0, _Length:32, _Binary/binary>>, _Encoding) -> more; +decode_(<<1, Length:32, Compressed:Length/binary>>, gzip) -> + try + zlib:gunzip(Compressed) + catch + error:data_error -> + throw(?GRPC_ERROR(?GRPC_STATUS_INTERNAL, + <<"Could not decompress but compression algorithm gzip is supported">>)) + end; +decode_(<<_, Length:32, _Compressed:Length/binary, _Rest/binary>>, Encoding) -> + throw(?GRPC_ERROR(?GRPC_STATUS_UNIMPLEMENTED, + <<"Compression mechanism ", (atom_to_binary(Encoding, utf8))/binary, + " used for received frame not supported">>)). diff --git a/deps/eetcd/src/eetcd_kv.erl b/deps/eetcd/src/eetcd_kv.erl new file mode 100644 index 0000000..a782483 --- /dev/null +++ b/deps/eetcd/src/eetcd_kv.erl @@ -0,0 +1,368 @@ +-module(eetcd_kv). +-include("eetcd.hrl"). + +-export([put/1, put/3]). +-export([get/1, get/2]). +-export([delete/1, delete/2]). +-export([compact/1, compact/2]). +-export([txn/4]). + +-export([ + new/1, new/0, with_timeout/2, + with_key/2, with_value/2, with_prefix/1, + with_lease/2, with_ignore_value/1, with_ignore_lease/1, + with_from_key/1, with_range_end/2, with_limit/2, + with_rev/2, with_sort/3, with_serializable/1, + with_keys_only/1, with_count_only/1, + with_min_mod_rev/2, with_max_mod_rev/2, with_min_create_rev/2, + with_max_create_rev/2, with_first_create/1, with_last_create/1, + with_first_rev/1, with_last_rev/1, with_first_key/1, with_last_key/1, + with_top/3, with_prev_kv/1, with_physical/1 +]). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). +-spec new() -> context(). +new() -> #{}. + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%%% @doc Sets data for the request's `key'. +-spec with_key(context(), key()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%% @doc Sets data for the request's `value'. +-spec with_value(context(), key()) -> context(). +with_value(Context, Key) -> + maps:put(value, Key, Context). + +%% @doc Enables `get', `delete' requests to operate +%% on the keys with matching prefix. For example, `get(with_prefix(with_key(Ctx, "foo"))' +%% can return 'foo1', 'foo2', and so on. +-spec with_prefix(context()) -> context(). +with_prefix(#{key := Key} = Context) -> + with_range_end(Context, eetcd:get_prefix_range_end(Key)). + +%% @doc Specifies the range of `get', `delete' requests +%% to be equal or greater than the key in the argument. +-spec with_from_key(context()) -> context(). +with_from_key(Context) -> + with_range_end(Context, "\x00"). + +%% @doc Sets data for the request's `range_end'. +-spec with_range_end(context(), iodata()) -> context(). +with_range_end(Context, End) -> + maps:put(range_end, End, Context). + +%% @doc Limit the number of results to return from `get' request. +%% If with_limit is given a 0 limit, it is treated as no limit. +-spec with_limit(context(), iodata()) -> context(). +with_limit(Context, End) -> + maps:put(limit, End, Context). + +%% @doc Specifies the store revision for `get' request. +-spec with_rev(context(), pos_integer()) -> context(). +with_rev(Context, Rev) -> + maps:put(revision, Rev, Context). + +%% @doc Specifies the ordering in `get' request. It requires +%% `with_range' and/or `with_prefix' to be specified too. +%% `target' specifies the target to sort by: 'KEY', 'VERSION', 'VALUE', 'CREATE', 'MOD'. +%% `order' can be either 'NONE', 'ASCEND', 'DESCEND'. +-spec with_sort(context(), + 'KEY' | 'VERSION' | 'VALUE' | 'CREATE' |'MOD', + 'NONE' | 'ASCEND' | 'DESCEND') -> context(). +with_sort(Context, Target, Order) -> + Targets = router_pb:find_enum_def('Etcd.RangeRequest.SortTarget'), + Orders = router_pb:find_enum_def('Etcd.RangeRequest.SortOrder'), + (not lists:keymember(Target, 1, Targets)) andalso throw({sort_target, Target}), + (not lists:keymember(Order, 1, Orders)) andalso throw({sort_order, Order}), + R1 = maps:put(sort_order, Order, Context), + maps:put(sort_target, Target, R1). + +%% @doc Make `get' request serializable. By default, +%% it's linearizable. Serializable requests are better for lower latency +%% requirement. +-spec with_serializable(context()) -> context(). +with_serializable(Context) -> + maps:put(serializable, true, Context). + +%% @doc Make the `get' request return only the keys and the corresponding +%% values will be omitted. +-spec with_keys_only(context()) -> context(). +with_keys_only(Context) -> + maps:put(keys_only, true, Context). + +%% @doc Make the `get' request return only the count of keys. +-spec with_count_only(context()) -> context(). +with_count_only(Context) -> + maps:put(count_only, true, Context). + +%% @doc Filter out keys for `get' with modification revisions less than the given revision. +-spec with_min_mod_rev(context(), pos_integer()) -> context(). +with_min_mod_rev(Context, Rev) -> + maps:put(min_mod_revision, Rev, Context). + +%% @doc Filter out keys for `get' with modification revisions greater than the given revision. +-spec with_max_mod_rev(context(), pos_integer()) -> context(). +with_max_mod_rev(Context, Rev) -> + maps:put(max_mod_revision, Rev, Context). + +%% @doc Filter out keys for `get' with creation revisions less than the given revision. +-spec with_min_create_rev(context(), pos_integer()) -> context(). +with_min_create_rev(Context, Rev) -> + maps:put(min_create_revision, Rev, Context). + +%% @doc Filter out keys for `get' with creation revisions greater than the given revision. +-spec with_max_create_rev(context(), pos_integer()) -> context(). +with_max_create_rev(Context, Rev) -> + maps:put(max_create_revision, Rev, Context). + +%% @doc Get the key with the oldest creation revision in the request range. +-spec with_first_create(context()) -> context(). +with_first_create(Context) -> + with_top(Context, 'CREATE', 'ASCEND'). + +%% @doc Get the lexically last key in the request range. +-spec with_last_create(context()) -> context(). +with_last_create(Context) -> + with_top(Context, 'CREATE', 'DESCEND'). + +%% @doc Get the key with the oldest modification revision in the request range. +-spec with_first_rev(context()) -> context(). +with_first_rev(Context) -> + with_top(Context, 'MOD', 'ASCEND'). + +%% @doc Get the key with the latest modification revision in the request range. +-spec with_last_rev(context()) -> context(). +with_last_rev(Context) -> + with_top(Context, 'MOD', 'DESCEND'). + +%% @doc Get the lexically first key in the request range. +-spec with_first_key(context()) -> context(). +with_first_key(Context) -> + with_top(Context, 'KEY', 'ASCEND'). + +%% @doc Get the lexically last key in the request range. +-spec with_last_key(context()) -> context(). +with_last_key(Context) -> + with_top(Context, 'KEY', 'DESCEND'). + +%% @doc Get the first key over the get's prefix given a sort order +-spec with_top(context(), + 'KEY' | 'VERSION' | 'VALUE' | 'CREATE' |'MOD', + 'NONE' | 'ASCEND' | 'DESCEND') -> context(). +with_top(Context, SortTarget, SortOrder) -> + C1 = with_prefix(with_sort(Context, SortTarget, SortOrder)), + with_limit(C1, 1). + +%% @doc Get the previous key-value pair before the event happens. +%% If the previous KV is already compacted, nothing will be returned. +-spec with_prev_kv(context()) -> context(). +with_prev_kv(Context) -> + maps:put(prev_kv, true, Context). + +%% @doc Attache a lease ID to a key in `put' request. +-spec with_lease(context(), integer()) -> context(). +with_lease(Context, Id) when is_integer(Id) -> + maps:put(lease, Id, Context). + +%% @doc Update the key using its current value. +%% This option can not be combined with non-empty values. +%% Returns an error if the key does not exist. +-spec with_ignore_value(context()) -> context(). +with_ignore_value(Context) -> + maps:put(ignore_value, true, Context). + +%% @doc Update the key using its current lease. +%% This option can not be combined with `with_lease/2'. +%% Returns an error if the key does not exist. +-spec with_ignore_lease(context()) -> context(). +with_ignore_lease(Context) -> + maps:put(ignore_lease, true, Context). + +%% @doc WithPhysical makes Compact wait until all compacted entries are +%% removed from the etcd server's storage. +-spec with_physical(context()) -> context(). +with_physical(Context) -> + maps:put(physical, true, Context). + +%%% @doc Put puts a key-value pair into etcd. +%%%
+%%%
1. base
+%%%
`eetcd_kv:put(ConnName, Key, Value).'
+%%%
2. with lease id
+%%%
`eetcd_kv:put(Key, Value, eetcd_kv:with_lease(eetcd_kv:new(ConnName), LeaseID)).'
+%%%
3. elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(connName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_value(value) +%%% |> :eetcd_kv.with_lease(leaseId) +%%% |> :eetcd_kv.with_ignore_value() +%%% |> :eetcd_kv.with_timeout(6000) +%%% |> :eetcd_kv.put() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_key/2}, {@link eetcd_kv:with_value/2}, {@link eetcd_kv:with_lease/2}, +%%% {@link eetcd_kv:with_ignore_value/2}, {@link eetcd_kv:with_ignore_lease/2}, {@link eetcd_kv:with_timeout/2} +%%% @end +-spec put(context()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error, eetcd_error()}. +put(Context) -> eetcd_kv_gen:put(Context). + +%%% @doc Put puts a key-value pair into etcd with options {@link put/1} +-spec put(name()|context(), key(), value()) -> + {ok, router_pb:'Etcd.PutResponse'()}|{error, eetcd_error()}. +put(Context, Key, Value) -> + C1 = new(Context), + C2 = with_key(C1, Key), + C3 = with_value(C2, Value), + eetcd_kv_gen:put(C3). + +%%% @doc Get retrieves keys. +%%% By default, Get will return the value for Key, if any. +%%% When passed {@link eetcd_kv:with_range_end/2}, Get will return the keys in the range `[Key, End)'. +%%% When passed {@link eetcd_kv:with_from_key/1}, Get returns keys greater than or equal to key. +%%% When passed {@link eetcd_kv:with_revision/2} with Rev > 0, Get retrieves keys at the given revision; +%%% if the required revision is compacted, the request will fail with ErrCompacted. +%%% When passed {@link eetcd_kv:with_limit/1}, the number of returned keys is bounded by Limit. +%%% When passed {@link eetcd_kv:with_sort/3}, the keys will be sorted. +%%%
+%%%
1.base
+%%%
`eetcd_kv:get(ConnName,Key).'
+%%%
2.with range end
+%%%
`eetcd_kv:get(eetcd_kv:with_range_end(eetcd_kv:with_key(eetcd_kv:new(ConnName),Key),End)).'
+%%%
3.Elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(connName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_range_end(rangeEnd) +%%% |> :eetcd_kv.with_limit(limit) +%%% |> :eetcd_kv.with_revision(rev) +%%% |> :eetcd_kv.with_sort(:'KEY', :'ASCEND') %% 'NONE' | 'ASCEND' | 'DESCEND' enum Etcd.RangeRequest.SortOrder +%%% |> :eetcd_kv.with_serializable() +%%% |> :eetcd_kv.with_keys_only() +%%% |> :eetcd_kv.with_count_only() +%%% |> :eetcd_kv.with_min_mod_revision(minModRev) +%%% |> :eetcd_kv.with_max_mod_revision(maxModRev) +%%% |> :eetcd_kv.with_min_create_revision(minCreateRev) +%%% |> :eetcd_kv.with_max_create_revision(maxCreateRev) +%%% |> :eetcd_kv:get() +%%% ''' +%%%
+%%%
+%%% {@link eetcd_kv:with_key/2} {@link eetcd_kv:with_range_end/2} {@link eetcd_kv:with_limit/2} +%%% {@link eetcd_kv:with_revision/2} {@link eetcd_kv:with_sort/3} +%%% {@link eetcd_kv:with_serializable/1} {@link eetcd_kv:with_keys_only/1} +%%% {@link eetcd_kv:with_count_only/1} {@link eetcd_kv:with_min_mod_revision/2} +%%% {@link eetcd_kv:with_max_mod_revision/2} {@link eetcd_kv:with_min_create_revision/2} {@link eetcd_kv:with_max_create_revision/2} +%%% @end +-spec get(context()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error, eetcd_error()}. +get(Context) when is_map(Context) -> eetcd_kv_gen:range(Context). +%%% @doc Get retrieves keys with options. +-spec get(context()|name(), key()) -> + {ok, router_pb:'Etcd.RangeResponse'()}|{error, eetcd_error()}. +get(Context, Key) -> + C0 = new(Context), + C1 = with_key(C0, Key), + eetcd_kv_gen:range(C1). + +%%% @doc Delete deletes a key, or optionally using eetcd_kv:with_range(End), [Key, End). +%%%
+%%%
1.base
+%%%
`eetcd_kv:delete(ConnName,Key).'
+%%%
2.with range end
+%%%
`eetcd_kv:delete(eetcd_kv:with_range_end(eetcd_kv:with_key(eetcd_kv:new(ConnName),Key), End)).'
+%%%
3.elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(ConnName) +%%% |> :eetcd_kv.with_key(key) +%%% |> :eetcd_kv.with_range_end(rangeEnd) +%%% |> :eetcd_kv.with_prev_kv() +%%% |> :eetcd_kv.delete() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_key/2} {@link eetcd_kv:with_range_end/2} {@link eetcd_kv:with_prev_kv/1} +%%% @end +-spec delete(context()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error, eetcd_error()}. +delete(Context) when is_map(Context) -> eetcd_kv_gen:delete_range(Context). +%%% @doc Delete deletes a key with options +-spec delete(name()|context(), key()) -> + {ok, router_pb:'Etcd.DeleteRangeResponse'()}|{error, eetcd_error()}. +delete(Context, Key) -> + C0 = new(Context), + C1 = with_key(C0, Key), + eetcd_kv_gen:delete_range(C1). + +%% @doc Compact compacts etcd KV history before the given revision. +%%%
+%%%
1.base
+%%%
`eetcd_kv:compact(ConnName,Revision).'
+%%%
2.with physical
+%%%
`eetcd_kv:compact(eetcd_kv:with_physical(eetcd_kv:with_revision(eetcd_kv:new(ConnName), Revision))).'
+%%%
3.Elixir
+%%%
+%%% ``` +%%% :eetcd_kv.new(ConnName) +%%% |> :eetcd_kv.with_revision(revision) +%%% |> :eetcd_kv.with_physical() +%%% |> :eetcd_kv.compact() +%%% ''' +%%%
+%%% {@link eetcd_kv:with_revision/2} {@link eetcd_kv:with_physical/1} +%%% @end +-spec compact(context()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error, eetcd_error()}. +compact(Context) when is_map(Context) -> eetcd_kv_gen:compact(Context). +%% @doc Compact compacts etcd KV history before the given revision with options +-spec compact(name()|context(), integer()) -> + {ok, router_pb:'Etcd.CompactionResponse'()}|{error, eetcd_error()}. +compact(Context, Revision) -> + C0 = new(Context), + C1 = with_rev(C0, Revision), + eetcd_kv_gen:compact(C1). + +%%% @doc Txn creates a transaction. +%%
If takes a list of comparison. If all comparisons passed in succeed,
+%%
the operations passed into Then() will be executed.
+%%
Or the operations passed into Else() will be executed.
+%%
Then takes a list of operations. The Ops list will be executed, if the comparisons passed in If() succeed.
+%%
Else takes a list of operations. The Ops list will be executed, if the comparisons passed in If() fail.
+%%%
+%%%
+%%% ``` +%%% Cmp = eetcd_compare:new(Key), +%%% If = eetcd_compare:value(Cmp, ">", Value), +%%% Then = eetcd_op:put(eetcd_kv:with_value(eetcd_kv:with_key(eetcd_kv:new(), Key), NewValue)), +%%% Else = eetcd_op:delete(eetcd_kv:with_key(eetcd_kv:new(), Key)), +%%% eetcd_kv:txn(EtcdConnName, If, Then, Else). +%%% ''' +%%%
+%%% {@link eetcd_compare:new/1} {@link eetcd_compare:with_range/2} +%%% {@link eetcd_compare:value/3} {@link eetcd_compare:version/3} +%%% {@link eetcd_compare:mod_revision/3} {@link eetcd_compare:create_revision/3} +%%% {@link eetcd_compare:lease/3} +%%% {@link eetcd_op:put/1} {@link eetcd_op:get/1} +%%% {@link eetcd_op:delete/1} {@link eetcd_op:txn/1} +%%% @end +-spec txn(name()|context(), [router_pb:'Etcd.Compare'()], [router_pb:'Etcd.RequestOp'()], [router_pb:'Etcd.RequestOp'()]) -> + {ok, router_pb:'Etcd.TxnResponse'()}|{error, eetcd_error()}. +txn(Context, If, Then, Else) -> + C1 = new(Context), + Compare = case is_list(If) of true -> If; false -> [If] end, + Success = case is_list(Then) of true -> Then; false -> [Then] end, + Failure = case is_list(Else) of true -> Else; false -> [Else] end, + Txn = maps:merge(#{compare => Compare, success => Success, failure => Failure}, C1), + eetcd_kv_gen:txn(Txn). diff --git a/deps/eetcd/src/eetcd_lease.erl b/deps/eetcd/src/eetcd_lease.erl new file mode 100644 index 0000000..4a993e4 --- /dev/null +++ b/deps/eetcd/src/eetcd_lease.erl @@ -0,0 +1,278 @@ +-module(eetcd_lease). +-include("eetcd.hrl"). +-behaviour(gen_server). + +-export([new/1, with_timeout/2]). +-export([grant/2, revoke/2, time_to_live/3, leases/1]). +-export([keep_alive/2, keep_alive_once/2]). +-export([close/0]). + +-export([start_link/3]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). + +-define(BLOCK, 3). +-define(LeaseNotFound, <<"etcdserver: requested lease not found">>). +-define(Event(ID, Reason), #{event => 'KeepAliveHalted', lease_id => ID, reason => Reason}). +-define(TRY_RECONNECTING, try_reconnecting). + +%%% @doc Create context for request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. Default value is 5000. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%% @doc Grant creates a new lease with the provided TTL in seconds. +-spec grant(context(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +grant(Context, TTL) -> + C1 = new(Context), + C2 = maps:put('TTL', TTL, C1), + eetcd_lease_gen:lease_grant(C2). + +%% @doc Revoke revokes the given lease. +-spec revoke(context(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +revoke(Context, LeaseID) -> + C1 = new(Context), + C2 = maps:put('ID', LeaseID, C1), + eetcd_lease_gen:lease_revoke(C2). + +%% @doc TimeToLive retrieves the lease information of the given lease ID. +%% The 3rd argument is a option of `NeedAttachedKeys'. +-spec time_to_live(context(), pos_integer(), boolean()) -> + {ok, router_pb:'Etcd.LeaseGrantResponse'()}|{error, eetcd_error()}. +time_to_live(Context, LeaseID, WithKeys) when is_boolean(WithKeys) -> + C1 = new(Context), + C2 = maps:put('ID', LeaseID, C1), + C3 = maps:put(keys, WithKeys, C2), + case eetcd_lease_gen:lease_time_to_live(C3) of + {ok, #{'TTL' := TTL}} when TTL =< 0 -> + {error, #{'grpc-status' => ?GRPC_STATUS_NOT_FOUND, 'grpc-message' => ?LeaseNotFound}}; + {ok, _Reps} = Status -> Status; + {error, _Reason} = Err -> Err + end. + +%% @doc Leases retrieves all leases. +-spec leases(context()) -> + {ok, router_pb:'Etcd.LeaseLeasesResponse'()}|{error, eetcd_error()}. +leases(ConnName) -> + C1 = new(ConnName), + eetcd_lease_gen:lease_leases(C1). + +%% @doc KeepAlive attempts to keep the given lease alive forever. +%% +%% If client keep alive processes halts with an unexpected error (e.g. "etcdserver: no leader") or canceled by others, +%% KeepAlive process send a KeepAliveHalted event(`#{event => 'KeepAliveHalted', lease_id => ID, reason => Reason}') to caller. +%% +%% KeepAlive makes best efforts to keep lease TTL, event the connection disconnect in 0 to ttl seconds. +%% todo more detail +-spec keep_alive(name(), pos_integer()) -> {ok, pid()} |{error, term()}. +keep_alive(Name, LeaseID) -> + case eetcd_lease_sup:start_child(Name, LeaseID) of + {ok, Pid} -> {ok, Pid}; + {error, {shutdown, Reason}} -> {error, Reason} + end. + +%% @doc KeepAliveOnce renews the lease once. The response corresponds to the +%% first message from calling KeepAlive. If the response has a recoverable +%% error, KeepAliveOnce will not retry the RPC with a new keep alive message. +%% In most of the cases, Keepalive should be used instead of KeepAliveOnce. +-spec keep_alive_once(name(), pos_integer()) -> + {ok, router_pb:'Etcd.LeaseKeepAliveResponse'()}|{error, eetcd_error()}. +keep_alive_once(Name, LeaseID) when is_atom(Name) orelse is_reference(Name) -> + case eetcd_lease_gen:lease_keep_alive(Name) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + Res = keep_alive_once(Gun, StreamRef, LeaseID, MRef), + gun:cancel(Gun, StreamRef), + erlang:demonitor(MRef, [flush]), + Res; + Err -> Err + end. + +%% @doc Close releases all resources Lease keeps for efficient communication with the etcd server. +%% Return the count of all close processes. +%% If you want to revokes the given lease, please use `revoke/2'. +-spec close() -> pos_integer(). +close() -> + lists:foldl( + fun({_Id, Pid, _Type, _Modules}, Acc) -> + gen_server:cast(Pid, close), + Acc + 1 + end, 0, + supervisor:which_children(eetcd_lease_sup)). + +-spec start_link(pid(), name(), integer()) -> {ok, pid()}. +start_link(Caller, Name, LeaseID) -> + gen_server:start_link(?MODULE, [Caller, Name, LeaseID], []). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +init([Caller, Name, LeaseID]) -> + case first_keep_alive_once(Name, LeaseID) of + {ok, Gun, Ref, MRef, TTL} -> + After = erlang:max(round(TTL / ?BLOCK), 1) * 1000, + TimeRef = schedule_next_keep_alive(After), + {ok, #{name => Name, gun => Gun, caller => Caller, + ttl => TTL, lease_id => LeaseID, + stream_ref => Ref, monitor_ref => MRef, next_ref => TimeRef, + ongoing => 0, last_disconnect => 0} + }; + {error, Err} -> {stop, {shutdown, Err}} + end. + +handle_call(_Request, _From, State) -> + {reply, ignore, State, State}. + +handle_cast(close, State = #{lease_id := ID, caller := Caller}) -> + erlang:send(Caller, ?Event(ID, <<"stream closed manually">>)), + {stop, normal, State}; + +handle_cast(_Request, State) -> + {noreply, State, State}. + +handle_info(?TRY_RECONNECTING, State) -> + try_reconnecting(State); + +handle_info({'DOWN', Ref, process, Gun, Reason}, #{gun := Gun, monitor_ref := Ref} = State) -> + ?LOG_INFO("Lease KeepAlive: ~p find gun(~p) process stop ~p~n", [self(), Gun, Reason]), + reconnect(State); + +handle_info({gun_data, _Pid, Ref, nofin, Data}, + State = #{stream_ref := Ref, ongoing := Ongoing, caller := Caller}) -> + case eetcd_grpc:decode(identity, Data, 'Etcd.LeaseKeepAliveResponse') of + {ok, #{'ID' := ID, 'TTL' := TTL}, <<>>} when TTL =< 0 -> + Event = ?Event(ID, ?LeaseNotFound), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State}; + {ok, #{'TTL' := _TTL}, <<>>} -> {noreply, State#{ongoing => Ongoing - 1}} + end; + +%% [{<<"grpc-status">>,<<"14">>},{<<"grpc-message">>,<<"etcdserver: no leader">>}]} +handle_info({gun_trailers, Gun, StreamRef, Header}, + State = #{name := Name, stream_ref := StreamRef, gun := Gun}) -> + check_leader(Header, Name), + reconnect(State); +%% it will receive another stream_ref gun_response to this process, notifying no leader event. +%% [{<<"grpc-status">>,<<"14">>},{<<"grpc-message">>,<<"etcdserver: no leader">>}]} +handle_info({gun_response, Gun, _StreamRef, _Fin, 200, Header}, + State = #{name := Name, gun := Gun}) -> + check_leader(Header, Name), + reconnect(State); +handle_info({keep_ttl, Next}, State) -> + keep_ttl(Next, State); +handle_info({gun_error, Gun, _StreamRef, _Reason}, State = #{gun := Gun}) -> + reconnect(State); +handle_info({gun_error, Gun, _Reason}, State = #{gun := Gun}) -> + reconnect(State); + +handle_info(Info, State) -> + ?LOG_ERROR("Leaser({~p,~p}) receive unknow msg ~p~n state~p~n", + [?MODULE, self(), Info, State]), + {noreply, State}. + +terminate(_Reason, #{stream_ref := Ref, gun := Gun}) -> + gun:cancel(Gun, Ref), + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +first_keep_alive_once(Name, LeaseID) -> + case eetcd_lease_gen:lease_keep_alive(Name) of + {ok, Gun, StreamRef} -> + MRef = erlang:monitor(process, Gun), + case keep_alive_once(Gun, StreamRef, LeaseID, MRef) of + {ok, #{'TTL' := TTL}} -> {ok, Gun, StreamRef, MRef, TTL}; + Err -> Err + end; + {error, _Reason} = Err -> Err + end. + +keep_alive_once(Gun, StreamRef, LeaseID, MRef) -> + eetcd_stream:data(Gun, StreamRef, #{'ID' => LeaseID}, 'Etcd.LeaseKeepAliveRequest', nofin), + case eetcd_stream:await(Gun, StreamRef, 5000, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, 5000, MRef) of + {data, nofin, ResBody} -> + case eetcd_grpc:decode(identity, ResBody, 'Etcd.LeaseKeepAliveResponse') of + {ok, #{'TTL' := TTL}, <<>>} when TTL =< 0 -> + {error, #{'grpc-status' => ?GRPC_STATUS_NOT_FOUND, 'grpc-message' => ?LeaseNotFound}}; + {ok, Resp, <<>>} -> {ok, Resp} + end; + {error, _Reason} = Err1 -> Err1 + end; + {response, fin, 200, RespHeaders} -> {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, _Reason} = Err2 -> Err2 + end. + +keep_ttl(Next, State) -> + #{stream_ref := Ref, gun := Gun, + lease_id := ID, ongoing := Ongoing, + name := Name, caller := Caller} = State, + case Ongoing =< 2 * ?BLOCK of + true -> + eetcd_stream:data(Gun, Ref, #{'ID' => ID}, 'Etcd.LeaseKeepAliveRequest', nofin), + TimeRef = schedule_next_keep_alive(Next), + {noreply, State#{ongoing => Ongoing + 1, next_ref => TimeRef}}; + false -> + case time_to_live(Name, ID, false) of + {ok, _} -> reconnect(State); + {error, Reason} -> + Event = ?Event(ID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State} + end + end. + +schedule_next_keep_alive(After) -> + erlang:send_after(After, self(), {keep_ttl, After}). + +reconnect(State) -> + #{next_ref := NextRef, stream_ref := Ref, gun := Gun} = State, + erlang:cancel_timer(NextRef), + gun:cancel(Gun, Ref), + NewState = State#{ongoing => 0, last_disconnect => erlang:system_time(second)}, + try_reconnecting(NewState). + +try_reconnecting(State) -> + #{ + name := Name, lease_id := LeaseID, + last_disconnect := LastDisconnect, ttl := TTL, + caller := Caller + } = State, + case erlang:system_time(second) - LastDisconnect > TTL of + true -> + case time_to_live(Name, LeaseID, false) of + {ok, _} -> reconnect(State); + {error, Reason} -> + Event = ?Event(LeaseID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State} + end; + false -> + case init([Caller, Name, LeaseID]) of + {ok, NewState} -> {noreply, NewState}; + {stop, {shutdown, #{'grpc-status' := ?GRPC_STATUS_NOT_FOUND} = Reason}} -> + Event = ?Event(LeaseID, Reason), + erlang:send(Caller, Event), + {stop, {shutdown, Event}, State}; + {stop, _Reason} -> + erlang:send_after(1000, self(), ?TRY_RECONNECTING), + {noreply, State} + end + end. +check_leader(Header, Name) -> + case eetcd_grpc:grpc_status(Header) of + #{'grpc-status' := 14} -> eetcd_conn:check_health(Name); + _ -> ok + end. diff --git a/deps/eetcd/src/eetcd_lease_sup.erl b/deps/eetcd/src/eetcd_lease_sup.erl new file mode 100644 index 0000000..a4aa29d --- /dev/null +++ b/deps/eetcd/src/eetcd_lease_sup.erl @@ -0,0 +1,38 @@ +%% @private +-module(eetcd_lease_sup). + +-behaviour(supervisor). +-include("eetcd.hrl"). + +%% API +-export([start_link/0, start_child/2, info/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Name, LeaseID) -> + supervisor:start_child(?MODULE, [self(), Name, LeaseID]). + +info() -> + lists:foldl(fun({_, Pid, _, _}, Acc) -> + #{gun := Gun} = sys:get_state(Pid), + maps:update_with(Gun, fun(C) -> C + 1 end, 1, Acc) + end, #{}, supervisor:which_children(?MODULE)). + +init([]) -> + MaxRestarts = 300, + MaxSecondsBetweenRestarts = 10, + SupFlags = #{ + strategy => simple_one_for_one, + intensity => MaxRestarts, + period => MaxSecondsBetweenRestarts}, + Worker = eetcd_lease, + Child = #{ + id => Worker, + start => {Worker, start_link, []}, + restart => temporary, + shutdown => 1000, + type => worker, + modules => [Worker]}, + {ok, {SupFlags, [Child]}}. diff --git a/deps/eetcd/src/eetcd_lock.erl b/deps/eetcd/src/eetcd_lock.erl new file mode 100644 index 0000000..4c8828b --- /dev/null +++ b/deps/eetcd/src/eetcd_lock.erl @@ -0,0 +1,60 @@ +-module(eetcd_lock). +-include("eetcd.hrl"). + +-export([new/1, with_timeout/2, with_name/2, with_lease/2, with_key/2]). +-export([lock/1, lock/3, unlock/2]). + + +%%% @doc Creates a blank context for a request. +-spec new(atom()|reference()) -> context(). +new(Context) -> eetcd:new(Context). + +%% @doc Timeout is an integer greater than zero which specifies how many milliseconds to wait for a reply, +%% or the atom infinity to wait indefinitely. +%% If no reply is received within the specified time, the function call fails with `{error, timeout}'. +-spec with_timeout(context(), pos_integer()|infinity) -> context(). +with_timeout(Context, Timeout) -> eetcd:with_timeout(Context, Timeout). + +%%% @doc name is the identifier for the distributed shared lock to be acquired. +-spec with_name(context(), Name :: binary()) -> context(). +with_name(Context, Name) -> + maps:put(name, Name, Context). + +%%% @doc lease is the ID of the lease that will be attached to ownership of the +%%% lock. If the lease expires or is revoked and currently holds the lock, +%%% the lock is automatically released. Calls to Lock with the same lease will +%%% be treated as a single acquisition; locking twice with the same lease is a no-op. +-spec with_lease(context(), LeaseID :: pos_integer()) -> context(). +with_lease(Context, LeaseID) -> + maps:put(lease, LeaseID, Context). + +%%% @doc key is a key that will exist on etcd for the duration that the Lock caller +%% owns the lock. Users should not modify this key or the lock may exhibit undefined behavior. +-spec with_key(context(), Key :: binary()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%%% @doc Lock acquires a distributed shared lock on a given named lock. +%%% On success, it will return a unique key that exists so long as the +%%% lock is held by the caller. This key can be used in conjunction with +%%% transactions to safely ensure updates to etcd only occur while holding +%%% lock ownership. The lock is held until Unlock is called on the key or the +%%% lease associate with the owner expires. +-spec lock(Ctx :: context()) -> {ok, router_pb:'Etcd.LockResponse'()} | {error, eetcd_error()}. +lock(Context) -> + eetcd_lock_gen:lock(Context). + +-spec lock(Ctx :: context()|name(), Name :: binary(), LeaseID :: pos_integer()) -> {ok, router_pb:'Etcd.LockResponse'()} | {error, eetcd_error()}. +lock(Context0, Name, LeaseID) -> + Context1 = new(Context0), + Context = with_lease(with_name(Context1, Name), LeaseID), + eetcd_lock_gen:lock(Context). + +%%% @doc Unlock takes a key returned by Lock and releases the hold on lock. The +%%% next Lock caller waiting for the lock will then be woken up and given +%%% ownership of the lock. +-spec unlock(Ctx :: context()|name(), Key :: binary()) -> {ok, router_pb:'Etcd.UnlockRequest'()} | {error, eetcd_error()}. +unlock(Context0, Key) -> + Context1 = new(Context0), + Context = with_key(Context1, Key), + eetcd_lock_gen:unlock(Context). diff --git a/deps/eetcd/src/eetcd_maintenance.erl b/deps/eetcd/src/eetcd_maintenance.erl new file mode 100644 index 0000000..3b5c5a9 --- /dev/null +++ b/deps/eetcd/src/eetcd_maintenance.erl @@ -0,0 +1,97 @@ +-module(eetcd_maintenance). +-include("eetcd.hrl"). +%% API +-export([alarm_list/1, alarm_disarm/3, alarm_disarm_all/1]). +-export([defragment/3, status/3, hash_kv/4, move_leader/2]). + +%%% @doc AlarmList gets all active alarms. +-spec alarm_list(context()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_list(ConnName) -> + C1 = eetcd:new(ConnName), + C2 = maps:put(action, 'GET', C1), + C3 = maps:put(memberID, 0, C2), + C4 = maps:put(alarm, 'NONE', C3), + eetcd_maintenance_gen:alarm(C4). + +%%% @doc AlarmDisarm disarms a given alarm. +-spec alarm_disarm(context(), integer(), integer()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_disarm(Context, MemberId, Alarm) -> + C1 = eetcd:new(Context), + C2 = maps:put(action, 'DEACTIVATE', C1), + C3 = maps:put(memberID, MemberId, C2), + C4 = maps:put(alarm, Alarm, C3), + eetcd_maintenance_gen:alarm(C4). + +%%% @doc AlarmDisarmAll disarms all alarm. +-spec alarm_disarm_all(context()) -> + {ok,router_pb:'Etcd.AlarmResponse'()}|{error,eetcd_error()}. +alarm_disarm_all(ConnName) -> + {ok, Acc0 = #{alarms := List}} = alarm_list(ConnName), + lists:foldl(fun(#{memberID := Id, alarm := Alarm}, Acc) -> + #{alarm := Old} = Acc, + {ok, A = #{alarm := L}} = alarm_disarm(ConnName, Id, Alarm), + A#{alarm => L ++ Old} end, Acc0#{alarm => []}, List). + +%%% @doc Defragment releases wasted space from internal fragmentation on a given etcd member. +%%% Defragment is only needed when deleting a large number of keys and want to reclaim the resources. +%%% Defragment is an expensive operation. User should avoid defragmenting multiple members at the same time. +%%% To defragment multiple members in the cluster, user need to call defragment multiple +%%% times with different endpoints. +-spec defragment(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok,router_pb:'Etcd.DefragmentResponse'()}|{error,eetcd_error()}. +defragment(Endpoint, Transport, TransportOpts) -> + Fun = fun(Conn) -> eetcd_maintenance_gen:defragment(eetcd:new(Conn)) end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% @doc Status gets the status of the endpoint. +-spec status(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()]) -> + {ok,router_pb:'Etcd.StatusResponse'()}|{error,eetcd_error()}. +status(Endpoint, Transport, TransportOpts) -> + Fun = fun(Conn) -> eetcd_maintenance_gen:status(eetcd:new(Conn)) end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% @doc HashKV returns a hash of the KV state at the time of the RPC. +%%% If revision is zero, the hash is computed on all keys. If the revision +%%% is non-zero, the hash is computed on all keys at or below the given revision. +-spec hash_kv(iodata(), tcp | tls | ssl, [gen_tcp:connect_option()] | [ssl:connect_option()], pos_integer()) -> + {ok,router_pb:'Etcd.HashKVResponse'()}|{error,eetcd_error()}. +hash_kv(Endpoint, Transport, TransportOpts, Rev) -> + Fun = fun(Conn) -> + Context = maps:put(revision, Rev, eetcd:new(Conn)), + eetcd_maintenance_gen:hash_kv(Context) + end, + dial(Endpoint, Transport, TransportOpts, Fun). + +%%% Snapshot provides a reader for a point-in-time snapshot of etcd. +%%% If the context "ctx" is canceled or timed out, reading from returned +%%% "io.ReadCloser" would error out (e.g. context.Canceled, context.DeadlineExceeded). +%% snapshot(Context) (io.ReadCloser, error) +%% todo + +%%% @doc MoveLeader requests current leader to transfer its leadership to the transferee. +%%% Request must be made to the leader. +-spec move_leader(name()|context(), pos_integer()) -> + {ok,router_pb:'Etcd.MoveLeaderResponse'()}|{error,eetcd_error()}. +move_leader(Context, TargetID) -> + C1 = eetcd:new(Context), + C2 = maps:put(targetID, TargetID, C1), + eetcd_maintenance_gen:move_leader(C2). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +dial(Endpoint, Transport, TransportOpts, Fun) -> + Conn = make_ref(), + try + case eetcd:open(Conn, [Endpoint], Transport, TransportOpts) of + {ok, _Pid} -> Fun(Conn); + Err -> + Err + end + catch E:R -> + {error, E, R} + after + eetcd:close(Conn) + end. diff --git a/deps/eetcd/src/eetcd_op.erl b/deps/eetcd/src/eetcd_op.erl new file mode 100644 index 0000000..21452e3 --- /dev/null +++ b/deps/eetcd/src/eetcd_op.erl @@ -0,0 +1,14 @@ +-module(eetcd_op). +-export([put/1, get/1, delete/1, txn/1]). + +put(PutRequest) -> + #{request => {request_put, PutRequest}}. + +get(RangeRequest) -> + #{request => {request_range, RangeRequest}}. + +delete(DeleteRangeRequest) -> + #{request => {request_delete_range, DeleteRangeRequest}}. + +txn(TxnRequest) -> + #{request => {request_txn, TxnRequest}}. diff --git a/deps/eetcd/src/eetcd_stream.erl b/deps/eetcd/src/eetcd_stream.erl new file mode 100644 index 0000000..aa60991 --- /dev/null +++ b/deps/eetcd/src/eetcd_stream.erl @@ -0,0 +1,152 @@ +%% @private +-module(eetcd_stream). + +%% API +-export([unary/4, unary/6]). +-export([new/2, new/4]). +-export([data/5]). +-export([await/4]). + +-include("eetcd.hrl"). + +-spec new(Name, Path) -> {ok, GunPid, Http2Ref} when + Name :: name(), + Path :: iodata(), + GunPid :: pid(), + Http2Ref :: reference(). +new(Name, Path) -> + case eetcd_conn:round_robin_select(Name) of + {ok, Pid, Headers} -> + Ref = gun:request(Pid, <<"POST">>, Path, Headers, <<>>), + {ok, Pid, Ref}; + Err -> Err + end. + +-spec new(Name, EtcdMsg, EtcdMsgName, Http2Path) -> Http2Ref when + Name :: name(), + EtcdMsg :: map(), + EtcdMsgName :: atom(), + Http2Path :: iodata(), + Http2Ref :: reference(). +new(Name, Msg, MsgName, Path) -> + case new(Name, Path) of + {ok, Pid, Ref} -> + data(Pid, Ref, Msg, MsgName, nofin), + {ok, Pid, Ref}; + Err -> Err + end. + +-spec data(GunPid, Http2Ref, EtcdMsg, EtcdMsgName, Http2Path) -> Http2Ref when + GunPid :: pid(), + Http2Ref :: reference(), + EtcdMsg :: map(), + EtcdMsgName :: atom(), + Http2Path :: iodata(). +data(Pid, Ref, Msg, MsgName, IsFin) -> + EncodeBody = eetcd_grpc:encode(identity, Msg, MsgName), + gun:data(Pid, Ref, IsFin, EncodeBody), + Ref. + +-spec unary(EtcdRequest, EtcdRequestName, Http2Path, EtcdResponseType) -> EtcdResponse when + EtcdRequest :: map(), + EtcdRequestName :: atom(), + Http2Path :: iodata(), + EtcdResponseType :: atom(), + EtcdResponse :: tuple() | eetcd_error(). +unary(Request, RequestName, Path, ResponseType) -> + case maps:find(eetcd_conn_name, Request) of + {ok, Name} -> + case eetcd_conn:round_robin_select(Name) of + {ok, Pid, Headers} -> + NewRequest = maps:remove(eetcd_conn_name, Request), + unary(Pid, NewRequest, RequestName, Path, ResponseType, Headers); + Err -> Err + end; + error -> {error, eetcd_conn_unavailable} + end. + +-spec unary(Pid, EtcdRequest, EtcdRequestName, Http2Path, EtcdResponseType, Http2Headers) -> EtcdResponse when + Pid :: pid(), + EtcdRequest :: map(), + EtcdRequestName :: atom(), + Http2Path :: iodata(), + EtcdResponseType :: atom(), + Http2Headers :: list(), + EtcdResponse :: tuple(). +unary(Pid, Request, RequestName, Path, ResponseType, Headers) when is_pid(Pid) -> + Timeout = maps:get(eetcd_reply_timeout, Request, 9000), + EncodeBody = eetcd_grpc:encode(identity, maps:remove(eetcd_reply_timeout, Request), RequestName), + MRef = erlang:monitor(process, Pid), + StreamRef = gun:request(Pid, <<"POST">>, Path, Headers, EncodeBody), + Res = + case await(Pid, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case await_body(Pid, StreamRef, Timeout, MRef, <<>>) of + {ok, ResBody, _Trailers} -> + {ok, Resp, <<>>} = eetcd_grpc:decode(identity, ResBody, ResponseType), + {ok, Resp}; + {error, _} = Error1 -> Error1 + end; + {response, fin, 200, RespHeaders} -> + case eetcd_grpc:grpc_status(RespHeaders) of + #{'grpc-status' := ?GRPC_STATUS_UNAUTHENTICATED, + 'grpc-message' := <<"etcdserver: invalid auth token">>} -> + NewHeaders = eetcd_conn:flush_token(Pid, Headers), + StreamRef1 = gun:request(Pid, <<"POST">>, Path, NewHeaders, EncodeBody), + case await(Pid, StreamRef1, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case await_body(Pid, StreamRef1, Timeout, MRef, <<>>) of + {ok, ResBody, _Trailers} -> + {ok, Resp, <<>>} = eetcd_grpc:decode(identity, ResBody, ResponseType), + {ok, Resp}; + {error, _} = Error1 -> Error1 + end; + {response, fin, 200, RespHeaders} -> + {error, {grpc_error, eetcd_grpc:grpc_status(RespHeaders)}} + end; + Error3 -> {error, {grpc_error, Error3}} + end; + {error, _} = Error2 -> Error2 + end, + erlang:demonitor(MRef, [flush]), + Res. + +%% `gun:await/2,3,4`, `gun:await_body/2,3,4` and `gun:await_up/1,2,3` don't distinguish the error types until v2.0.0. +%% They can be a timeout, a connection error, a stream error or a down error (when the Gun process exited while waiting). +%% so we copy some code from gun v2.0.0 to replace `gun:await/4` +%% TODO remove this when upgrade gun to v2.0.0 +await(ServerPid, StreamRef, Timeout, MRef) -> + receive + {gun_response, ServerPid, StreamRef, IsFin, Status, Headers} -> + {response, IsFin, Status, Headers}; + {gun_data, ServerPid, StreamRef, IsFin, Data} -> + {data, IsFin, Data}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, {gun_stream_error, Reason}}; + {gun_error, ServerPid, Reason} -> + {error, {gun_conn_error, Reason}}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, {gun_down, Reason}} + after Timeout -> + {error, timeout} + end. + +await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> + receive + {gun_data, ServerPid, StreamRef, nofin, Data} -> + await_body(ServerPid, StreamRef, Timeout, MRef, + <>); + {gun_data, ServerPid, StreamRef, fin, Data} -> + {ok, <>}; + %% It's OK to return trailers here because the client specifically requested them + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {ok, Acc, Trailers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, {gun_stream_error, Reason}}; + {gun_error, ServerPid, Reason} -> + {error, {gun_conn_error, Reason}}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, {gun_down, Reason}} + after Timeout -> + {error, timeout} + end. diff --git a/deps/eetcd/src/eetcd_sup.erl b/deps/eetcd/src/eetcd_sup.erl new file mode 100644 index 0000000..06513a2 --- /dev/null +++ b/deps/eetcd/src/eetcd_sup.erl @@ -0,0 +1,47 @@ +%%%------------------------------------------------------------------- +%% @doc eetcd top level supervisor. +%% @private +%% @end +%%%------------------------------------------------------------------- + +-module(eetcd_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%%==================================================================== +%% API functions +%%==================================================================== + +-spec start_link() -> {ok, pid()}. +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%%==================================================================== +%% Supervisor callbacks +%%==================================================================== + +init([]) -> + SupFlags = #{strategy => one_for_one, intensity => 1000, period => 10}, + Http2Sup = eetcd_conn_sup, + LeaserSup = eetcd_lease_sup, + ChildSpecs = [ + #{id => Http2Sup, + start => {Http2Sup, start_link, []}, + restart => permanent, + shutdown => 5000, + type => worker, + modules => [Http2Sup]}, + #{id => LeaserSup, + start => {LeaserSup, start_link, []}, + restart => permanent, + shutdown => 5000, + type => worker, + modules => [LeaserSup]} + ], + {ok, {SupFlags, ChildSpecs}}. diff --git a/deps/eetcd/src/eetcd_watch.erl b/deps/eetcd/src/eetcd_watch.erl new file mode 100644 index 0000000..ed37616 --- /dev/null +++ b/deps/eetcd/src/eetcd_watch.erl @@ -0,0 +1,259 @@ +-module(eetcd_watch). +-include("eetcd.hrl"). + +-export_type([watch_conn/0]). +-type watch_conn() :: #{http2_pid => pid(), +monitor_ref => reference(), +stream_ref => reference(), +unprocessed => binary(), +revision => integer(), %% Revision is the revision of the KV when the watchResponse is created. For a normal response, the revision should be the same as the last modified revision inside Events. +compact_revision => integer(), %% CompactRevision is set when the watcher is cancelled due to compaction. +watch_id => integer(), +response => router_pb:'Etcd.WatchResponse'()}. + +%% API +-export([new/0, with_key/2, + with_range_end/2, with_prefix/1, with_from_key/1, + with_start_revision/2, + with_filter_delete/1, with_filter_put/1, + with_prev_kv/1, + with_watch_id/2, + with_fragment/1, + with_progress_notify/1 +]). +-export([watch/2, watch/3]). +-export([watch_stream/2]). +-export([unwatch/2]). +-export([rev/1]). + +%%% @doc init watch request +-spec new() -> context(). +new() -> #{}. + +%% @doc AutoWatchID is the watcher ID passed in WatchStream.Watch when no +%% user-provided ID is available, an ID will automatically be assigned. +with_watch_id(Context, WatchId) -> + maps:put(watch_id, WatchId, Context). + +%% @doc Get the previous key-value pair before the event happens. +%% If the previous KV is already compacted, nothing will be returned. +-spec with_prev_kv(context()) -> context(). +with_prev_kv(Context) -> + maps:put(prev_kv, true, Context). + +%% @doc WithFragment to receive raw watch response with fragmentation. +%%Fragmentation is disabled by default. If fragmentation is enabled, +%%etcd watch server will split watch response before sending to clients +%%when the total size of watch events exceed server-side request limit. +%%The default server-side request limit is 1.5 MiB, which can be configured +%%as "--max-request-bytes" flag value + gRPC-overhead 512 bytes. +-spec with_fragment(context()) -> context(). +with_fragment(Context) -> + maps:put(fragment, true, Context). + +with_start_revision(Context, Rev) -> + maps:put(start_revision, Rev, Context). + +%% @doc Make watch server send periodic progress updates +%% every 10 minutes when there is no incoming events. +%% Progress updates have zero events in WatchResponse. +-spec with_progress_notify(context()) -> context(). +with_progress_notify(Context) -> + maps:put(progress_notify, true, Context). + +%% @doc discards PUT events from the watcher. +-spec with_filter_put(context()) -> context(). +with_filter_put(Context) -> + maps:update_with(filters, + fun(V) -> lists:usort(['NOPUT' | V]) end, + ['NOPUT'], + Context). + +%% @doc discards DELETE events from the watcher. +-spec with_filter_delete(context()) -> context(). +with_filter_delete(Context) -> + maps:update_with(filters, + fun(V) -> lists:usort(['NODELETE' | V]) end, + ['NODELETE'], + Context). + +%%% @doc Sets the byte slice for the Op's `key'. +-spec with_key(context(), key()) -> context(). +with_key(Context, Key) -> + maps:put(key, Key, Context). + +%% @doc Enables `watch' requests to operate +%% on the keys with matching prefix. For example, `watch("foo", with_prefix())' +%% can return 'foo1', 'foo2', and so on. +-spec with_prefix(context()) -> context(). +with_prefix(#{key := Key} = Context) -> + with_range_end(Context, eetcd:get_prefix_range_end(Key)). + +%% @doc Specifies the range of `get', `delete' requests +%% to be equal or greater than the key in the argument. +-spec with_from_key(context()) -> context(). +with_from_key(Context) -> + with_range_end(Context, "\x00"). + +%% @doc Sets the byte slice for the Op's `range_end'. +-spec with_range_end(context(), iodata()) -> context(). +with_range_end(Context, End) -> + maps:put(range_end, End, Context). + +%% @doc @equiv watch(name(), context(), 5000). +-spec watch(name(), context()) -> + {ok, watch_conn()} | {error, {stream_error | conn_error | http2_down, term()} | timeout}. +watch(Name, CreateReq) -> + watch(Name, CreateReq, 5000). + +%% @doc Watch watches for events happening or that have happened. Both input and output are streams; +%% the input stream is for creating watchers and the output stream sends events. +%% One watch RPC can watch on multiple key ranges, streaming events for several watches at once. +%% The entire event history can be watched starting from the last compaction revision. +%% +%% Watch creates a watcher. The watcher watches the events happening or +%% happened on the given key or range [key, end) from the given startRev. +%% +%% The whole event history can be watched unless compacted. +%% If `startRev <= 0', watch observes events after currentRev. +%% +%% The returned "id" is the ID of this watcher. It appears as WatchID +%% in events that are sent to the created watcher through stream channel. +-spec watch(name(), context(), pos_integer()) -> + {ok, watch_conn()} | {error, {stream_error | conn_error | http2_down, term()} | timeout}. +watch(Name, CreateReq, Timeout) -> + Request = #{request_union => {create_request, CreateReq}}, + {ok, Gun, StreamRef} = eetcd_watch_gen:watch(Name), + MRef = erlang:monitor(process, Gun), + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.WatchRequest', nofin), + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {response, nofin, 200, _Headers} -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Body} -> + {ok, + #{ + created := true, + canceled := false, + compact_revision := CompactRev, + header := #{revision := Rev}, + watch_id := WatchId + }, <<>>} + = eetcd_grpc:decode(identity, Body, 'Etcd.WatchResponse'), + {ok, + #{ + http2_pid => Gun, + monitor_ref => MRef, + stream_ref => StreamRef, + revision => Rev, + compact_revision => CompactRev, + watch_id => WatchId, + unprocessed => <<>> + } + }; + {error, _} = Err1 -> + erlang:demonitor(MRef, [flush]), + Err1 + end; + {response, fin, 200, RespHeaders} -> + erlang:demonitor(MRef, [flush]), + {error, eetcd_grpc:grpc_status(RespHeaders)}; + {error, _} = Err2 -> + erlang:demonitor(MRef, [flush]), + Err2 + end. + +%% @doc Streams the next batch of events from the given message. +%%This function processes a "message" which can be any term, but should be a message received by the process that owns the stream_ref. +%%Processing a message means that this function will parse it and check if it's a message that is directed to this connection, +%%that is, a gun_* message received on the gun connection. +%%If it is, then this function will parse the message, turn it into watch responses, and possibly take action given the responses. +%%If there's no error, this function returns {ok, WatchConn, 'Etcd.WatchResponse'()}|{more, WatchConn} +%%If there's an error, {error, {stream_error | conn_error | http2_down, term()} | timeout} is returned. +%%If the given message is not from the gun connection, this function returns unknown. +-spec watch_stream(watch_conn(), Message) -> + {ok, watch_conn(), router_pb:'Etcd.WatchResponse'()} + | {more, watch_conn()} + | unknown + | {error, {stream_error | conn_error | http2_down, term()}} when + Message :: term(). + +watch_stream(#{stream_ref := Ref, http2_pid := Pid, unprocessed := Unprocessed} = Conn, + {gun_data, Pid, Ref, nofin, Data}) -> + Bin = <>, + case eetcd_grpc:decode(identity, Bin, 'Etcd.WatchResponse') of + {ok, Resp, NewUnprocessed} -> + #{compact_revision := CompactRev, + header := #{revision := Rev}, + watch_id := WatchId} = Resp, + {ok, + Conn#{ + revision => Rev, + compact_revision => CompactRev, + watch_id => WatchId, + unprocessed => NewUnprocessed}, + Resp}; + more -> {more, Conn#{unprocessed => Bin}} + end; +watch_stream(#{stream_ref := SRef, http2_pid := Pid, monitor_ref := MRef}, + {gun_error, Pid, SRef, Reason}) -> %% stream error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {stream_error, Reason}}; +watch_stream(#{http2_pid := Pid, stream_ref := SRef, monitor_ref := MRef}, + {gun_error, Pid, Reason}) -> %% gun connection process state error + erlang:demonitor(MRef, [flush]), + gun:cancel(Pid, SRef), + {error, {conn_error, Reason}}; +watch_stream(#{http2_pid := Pid, monitor_ref := MRef}, + {'DOWN', MRef, process, Pid, Reason}) -> %% gun connection down + erlang:demonitor(MRef, [flush]), + {error, {http2_down, Reason}}; +watch_stream(_Conn, _UnKnow) -> unknown. + +%% @doc Rev returns the current revision of the KV the stream watches on. + +rev(#{revision := Rev}) -> Rev. + +%% @doc Cancel watching so that no more events are transmitted. +%% This is a synchronous operation. +%% Other change events will be returned in OtherEvents when these events arrive between the request and the response. +-spec unwatch(watch_conn(), Timeout) -> + {ok, router_pb:'Etcd.WatchResponse'(), OtherEvents} + | {error, {stream_error | conn_error | http2_down, term()} | timeout, OtherEvents} when + Timeout :: pos_integer(), + OtherEvents :: [router_pb:'Etcd.WatchResponse'()]. +unwatch(WatchConn, Timeout) -> + #{ + http2_pid := Gun, + monitor_ref := MRef, + stream_ref := StreamRef, + watch_id := WatchId, + unprocessed := Unprocessed + } = WatchConn, + Request = #{request_union => {cancel_request, #{watch_id => WatchId}}}, + eetcd_stream:data(Gun, StreamRef, Request, 'Etcd.WatchRequest', fin), + await_unwatch_resp(Gun, StreamRef, Unprocessed, WatchId, Timeout, MRef, []). + +%%==================================================================== +%% Internal functions +%%==================================================================== + +await_unwatch_resp(Gun, StreamRef, Unprocessed, WatchId, Timeout, MRef, Acc) -> + case eetcd_stream:await(Gun, StreamRef, Timeout, MRef) of + {data, nofin, Data} -> + Bin = <>, + case eetcd_grpc:decode(identity, Bin, 'Etcd.WatchResponse') of + {ok, Resp, NewUnprocessed} -> + case Resp of + #{created := false, watch_id := WatchId, canceled := true} -> + erlang:demonitor(MRef, [flush]), + gun:cancel(Gun, StreamRef), + {ok, Resp, lists:reverse(Acc)}; + OtherEvent -> + await_unwatch_resp(Gun, StreamRef, NewUnprocessed, WatchId, Timeout, MRef, [OtherEvent | Acc]) + end; + more -> + await_unwatch_resp(Gun, StreamRef, Bin, WatchId, Timeout, MRef, Acc) + end; + {error, Reason} -> {error, Reason, lists:reverse(Acc)} + end. diff --git a/deps/eetcd/src/protos/auth_pb.erl b/deps/eetcd/src/protos/auth_pb.erl new file mode 100644 index 0000000..513bdca --- /dev/null +++ b/deps/eetcd/src/protos/auth_pb.erl @@ -0,0 +1,29983 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(auth_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_authpb.Permission.Type'/1, 'enum_value_by_symbol_authpb.Permission.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'authpb.Permission.Type'() :: 'READ' | 'WRITE' | 'READWRITE'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['authpb.Permission.Type'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'authpb.UserAddOptions'() :: + #{no_password => boolean() | 0 | 1 % = 1 + }. + +-type 'authpb.User'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + roles => [iodata()], % = 3 + options => 'authpb.UserAddOptions'() % = 4 + }. + +-type 'authpb.Permission'() :: + #{permType => 'READ' | 'WRITE' | 'READWRITE' | integer(), % = 1, enum authpb.Permission.Type + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'authpb.Role'() :: + #{name => iodata(), % = 1 + keyPermission => ['authpb.Permission'()] % = 2 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['authpb.UserAddOptions'/0, 'authpb.User'/0, 'authpb.Permission'/0, 'authpb.Role'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'encode_msg_authpb.UserAddOptions'(id(Msg, TrUserData), + TrUserData); + 'authpb.User' -> + 'encode_msg_authpb.User'(id(Msg, TrUserData), + TrUserData); + 'authpb.Permission' -> + 'encode_msg_authpb.Permission'(id(Msg, TrUserData), + TrUserData); + 'authpb.Role' -> + 'encode_msg_authpb.Role'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_authpb.UserAddOptions'(Msg, TrUserData) -> + 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_authpb.UserAddOptions'(#{} = M, Bin, + TrUserData) -> + case M of + #{no_password := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_authpb.User'(Msg, TrUserData) -> + 'encode_msg_authpb.User'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.User'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{roles := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_authpb.User_roles'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= undefined -> B3; + true -> + 'e_mfield_authpb.User_options'(TrF4, <>, + TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_authpb.Permission'(Msg, TrUserData) -> + 'encode_msg_authpb.Permission'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Permission'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{permType := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'READ'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_authpb.Permission.Type'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.Role'(Msg, TrUserData) -> + 'encode_msg_authpb.Role'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Role'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keyPermission := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_authpb.Role_keyPermission'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_field_authpb.User_roles'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_authpb.User_roles'(Rest, Bin3, TrUserData); +'e_field_authpb.User_roles'([], Bin, _TrUserData) -> + Bin. + +'e_mfield_authpb.User_options'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_authpb.Role_keyPermission'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.Role_keyPermission'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_authpb.Role_keyPermission'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_authpb.Role_keyPermission'(Rest, Bin3, + TrUserData); +'e_field_authpb.Role_keyPermission'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_authpb.Permission.Type'('READ', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('WRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('READWRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('authpb.UserAddOptions', Bin, + TrUserData) -> + id('decode_msg_authpb.UserAddOptions'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.User', Bin, TrUserData) -> + id('decode_msg_authpb.User'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Permission', Bin, + TrUserData) -> + id('decode_msg_authpb.Permission'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Role', Bin, TrUserData) -> + id('decode_msg_authpb.Role'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_authpb.UserAddOptions'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Bin, 0, 0, + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.UserAddOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}; +'dfp_read_field_def_authpb.UserAddOptions'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_authpb.UserAddOptions'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_authpb.UserAddOptions'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.UserAddOptions'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_authpb.UserAddOptions'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_authpb.UserAddOptions'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}. + +'d_field_authpb.UserAddOptions_no_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'d_field_authpb.UserAddOptions_no_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.UserAddOptions'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_authpb.UserAddOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_authpb.UserAddOptions'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_authpb.UserAddOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_authpb.UserAddOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_authpb.UserAddOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.UserAddOptions'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_authpb.UserAddOptions'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_authpb.UserAddOptions'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_authpb.UserAddOptions'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_authpb.User'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Bin, 0, 0, + id(<<>>, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_authpb.User'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_password'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_roles'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_options'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end; +'dfp_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.User_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 18 -> + 'd_field_authpb.User_password'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 26 -> + 'd_field_authpb.User_roles'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 34 -> + 'd_field_authpb.User_options'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 1 -> + 'skip_64_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_authpb.User'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_authpb.User'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end. + +'d_field_authpb.User_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_roles'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_roles'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_roles'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, TrUserData). + +'d_field_authpb.User_options'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_options'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, F@_3, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_authpb.User'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_authpb.User'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_authpb.User'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.User'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_authpb.User'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.User'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_authpb.User'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_authpb.User'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_authpb.Permission'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Bin, 0, 0, + id('READ', TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_authpb.Permission'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_permType'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.Permission_permType'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_authpb.Permission_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_authpb.Permission_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_authpb.Permission'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_authpb.Permission'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_authpb.Permission_permType'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_permType'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_permType'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_authpb.Permission.Type'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_authpb.Permission_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_authpb.Permission_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_authpb.Permission'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_authpb.Permission'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_authpb.Permission'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Permission'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_authpb.Permission'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Permission'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_authpb.Permission'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_authpb.Permission'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_authpb.Role'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Bin, 0, 0, + id(<<>>, TrUserData), id([], TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.Role'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_name'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_authpb.Role'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_keyPermission'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData) -> + 'dg_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData). + +'dg_read_field_def_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.Role_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_authpb.Role_keyPermission'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.Role'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 3 -> + 'skip_group_authpb.Role'(Rest, Key bsr 3, 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end. + +'d_field_authpb.Role_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_authpb.Role_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_authpb.Role_keyPermission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_keyPermission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_authpb.Role_keyPermission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_authpb.Role'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_authpb.Role'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_authpb.Role'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_length_delimited_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'skip_length_delimited_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Role'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_authpb.Role'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Role'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_authpb.Role'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_64_authpb.Role'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_authpb.Permission.Type'(0) -> 'READ'; +'d_enum_authpb.Permission.Type'(1) -> 'WRITE'; +'d_enum_authpb.Permission.Type'(2) -> 'READWRITE'; +'d_enum_authpb.Permission.Type'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'merge_msg_authpb.UserAddOptions'(Prev, New, + TrUserData); + 'authpb.User' -> + 'merge_msg_authpb.User'(Prev, New, TrUserData); + 'authpb.Permission' -> + 'merge_msg_authpb.Permission'(Prev, New, TrUserData); + 'authpb.Role' -> + 'merge_msg_authpb.Role'(Prev, New, TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.UserAddOptions'/3}). +'merge_msg_authpb.UserAddOptions'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{no_password := NFno_password}} -> + S1#{no_password => NFno_password}; + {#{no_password := PFno_password}, _} -> + S1#{no_password => PFno_password}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.User'/3}). +'merge_msg_authpb.User'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S3#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S3#{roles => NFroles}; + {#{roles := PFroles}, _} -> S3#{roles => PFroles}; + {_, _} -> S3 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Permission'/3}). +'merge_msg_authpb.Permission'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{permType := NFpermType}} -> + S1#{permType => NFpermType}; + {#{permType := PFpermType}, _} -> + S1#{permType => PFpermType}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Role'/3}). +'merge_msg_authpb.Role'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{keyPermission := PFkeyPermission}, + #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => + 'erlang_++'(PFkeyPermission, NFkeyPermission, + TrUserData)}; + {_, #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => NFkeyPermission}; + {#{keyPermission := PFkeyPermission}, _} -> + S2#{keyPermission => PFkeyPermission}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'authpb.UserAddOptions' -> + 'v_msg_authpb.UserAddOptions'(Msg, [MsgName], + TrUserData); + 'authpb.User' -> + 'v_msg_authpb.User'(Msg, [MsgName], TrUserData); + 'authpb.Permission' -> + 'v_msg_authpb.Permission'(Msg, [MsgName], TrUserData); + 'authpb.Role' -> + 'v_msg_authpb.Role'(Msg, [MsgName], TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_authpb.UserAddOptions'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.UserAddOptions'/3}). +'v_msg_authpb.UserAddOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{no_password := F1} -> + v_type_bool(F1, [no_password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (no_password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.UserAddOptions'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.UserAddOptions'}, + M, Path); +'v_msg_authpb.UserAddOptions'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.UserAddOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.User'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.User'/3}). +'v_msg_authpb.User'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_bytes(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{roles := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [roles | Path]) + end; + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_authpb.UserAddOptions'(F4, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (roles) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.User'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.User'}, + M, Path); +'v_msg_authpb.User'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.User'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Permission'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Permission'/3}). +'v_msg_authpb.Permission'(#{} = M, Path, TrUserData) -> + case M of + #{permType := F1} -> + 'v_enum_authpb.Permission.Type'(F1, [permType | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (permType) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Permission'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Permission'}, + M, Path); +'v_msg_authpb.Permission'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Permission'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Role'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Role'/3}). +'v_msg_authpb.Role'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{keyPermission := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, + [keyPermission | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [keyPermission | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (keyPermission) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Role'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Role'}, + M, Path); +'v_msg_authpb.Role'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Role'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_authpb.Permission.Type'/3}). +-dialyzer({nowarn_function,'v_enum_authpb.Permission.Type'/3}). +'v_enum_authpb.Permission.Type'('READ', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('WRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('READWRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_authpb.Permission.Type'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'authpb.Permission.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'authpb.Permission.Type'}, + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'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}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'authpb.UserAddOptions'}, + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'authpb.User'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.Permission'}, + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'authpb.Role'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['authpb.Permission.Type', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('authpb.UserAddOptions') -> + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('authpb.User') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.Permission') -> + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('authpb.Role') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('authpb.Permission.Type') -> + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'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}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('authpb.Permission.Type', Value) -> + 'enum_symbol_by_value_authpb.Permission.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('authpb.Permission.Type', Sym) -> + 'enum_value_by_symbol_authpb.Permission.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_authpb.Permission.Type'(0) -> + 'READ'; +'enum_symbol_by_value_authpb.Permission.Type'(1) -> + 'WRITE'; +'enum_symbol_by_value_authpb.Permission.Type'(2) -> + 'READWRITE'. + + +'enum_value_by_symbol_authpb.Permission.Type'('READ') -> + 0; +'enum_value_by_symbol_authpb.Permission.Type'('WRITE') -> + 1; +'enum_value_by_symbol_authpb.Permission.Type'('READWRITE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"authpb.UserAddOptions">>) -> 'authpb.UserAddOptions'; +fqbin_to_msg_name(<<"authpb.User">>) -> 'authpb.User'; +fqbin_to_msg_name(<<"authpb.Permission">>) -> 'authpb.Permission'; +fqbin_to_msg_name(<<"authpb.Role">>) -> 'authpb.Role'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('authpb.UserAddOptions') -> <<"authpb.UserAddOptions">>; +msg_name_to_fqbin('authpb.User') -> <<"authpb.User">>; +msg_name_to_fqbin('authpb.Permission') -> <<"authpb.Permission">>; +msg_name_to_fqbin('authpb.Role') -> <<"authpb.Role">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"authpb.Permission.Type">>) -> 'authpb.Permission.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('authpb.Permission.Type') -> <<"authpb.Permission.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> authpb. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "auth.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["auth.proto", "gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["auth", "gogo", "descriptor"]. + + +get_msg_containment("auth") -> + ['authpb.Permission', 'authpb.Role', 'authpb.User', + 'authpb.UserAddOptions']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("auth") -> authpb; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("auth") -> []; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("auth") -> []; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("auth") -> + ['authpb.Permission.Type']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"authpb.User">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.UserAddOptions">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Role">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Permission">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"authpb.Permission.Type">>) -> "auth"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"authpb">>) -> ["auth"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/gogo_pb.erl b/deps/eetcd/src/protos/gogo_pb.erl new file mode 100644 index 0000000..a849b7c --- /dev/null +++ b/deps/eetcd/src/protos/gogo_pb.erl @@ -0,0 +1,28734 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(gogo_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'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}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'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}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> gogoproto. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "gogo.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["gogo", "descriptor"]. + + +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/health_pb.erl b/deps/eetcd/src/protos/health_pb.erl new file mode 100644 index 0000000..b1fc2ba --- /dev/null +++ b/deps/eetcd/src/protos/health_pb.erl @@ -0,0 +1,1143 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.10.5 +-module(health_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'/1, 'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'grpcHealthV1.HealthCheckResponse.ServingStatus'() :: 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN'. +-export_type(['grpcHealthV1.HealthCheckResponse.ServingStatus'/0]). + +%% message types +-type 'grpcHealthV1.HealthCheckRequest'() :: + #{service => iodata() % = 1 + }. + +-type 'grpcHealthV1.HealthCheckResponse'() :: + #{status => 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN' | integer() % = 1, enum grpcHealthV1.HealthCheckResponse.ServingStatus + }. + +-export_type(['grpcHealthV1.HealthCheckRequest'/0, 'grpcHealthV1.HealthCheckResponse'/0]). + +-spec encode_msg('grpcHealthV1.HealthCheckRequest'() | 'grpcHealthV1.HealthCheckResponse'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('grpcHealthV1.HealthCheckRequest'() | 'grpcHealthV1.HealthCheckResponse'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'encode_msg_grpcHealthV1.HealthCheckRequest'(id(Msg, + TrUserData), + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'encode_msg_grpcHealthV1.HealthCheckResponse'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_grpcHealthV1.HealthCheckRequest'(Msg, + TrUserData) -> + 'encode_msg_grpcHealthV1.HealthCheckRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_grpcHealthV1.HealthCheckRequest'(#{} = M, + Bin, TrUserData) -> + case M of + #{service := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_grpcHealthV1.HealthCheckResponse'(Msg, + TrUserData) -> + 'encode_msg_grpcHealthV1.HealthCheckResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_grpcHealthV1.HealthCheckResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{status := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'UNKNOWN'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> + not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) + when is_binary(B), byte_size(B) =/= 0 -> + true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('grpcHealthV1.HealthCheckRequest', + Bin, TrUserData) -> + id('decode_msg_grpcHealthV1.HealthCheckRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('grpcHealthV1.HealthCheckResponse', + Bin, TrUserData) -> + id('decode_msg_grpcHealthV1.HealthCheckResponse'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_grpcHealthV1.HealthCheckRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(<<>>, + 0, 0, F@_1, _) -> + #{service => F@_1}; +'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_grpcHealthV1.HealthCheckRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_grpcHealthV1.HealthCheckRequest'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_grpcHealthV1.HealthCheckRequest'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_grpcHealthV1.HealthCheckRequest'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_grpcHealthV1.HealthCheckRequest'(<<>>, + 0, 0, F@_1, _) -> + #{service => F@_1}. + +'d_field_grpcHealthV1.HealthCheckRequest_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_grpcHealthV1.HealthCheckRequest_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_grpcHealthV1.HealthCheckRequest_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_grpcHealthV1.HealthCheckRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_grpcHealthV1.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_grpcHealthV1.HealthCheckRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_grpcHealthV1.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_grpcHealthV1.HealthCheckRequest'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_grpcHealthV1.HealthCheckRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_grpcHealthV1.HealthCheckRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckRequest'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_grpcHealthV1.HealthCheckResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Bin, + 0, 0, + id('UNKNOWN', + TrUserData), + TrUserData). + +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(<<>>, + 0, 0, F@_1, _) -> + #{status => F@_1}; +'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_grpcHealthV1.HealthCheckResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_grpcHealthV1.HealthCheckResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_grpcHealthV1.HealthCheckResponse'(Rest, + Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_grpcHealthV1.HealthCheckResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_grpcHealthV1.HealthCheckResponse'(<<>>, + 0, 0, F@_1, _) -> + #{status => F@_1}. + +'d_field_grpcHealthV1.HealthCheckResponse_status'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_grpcHealthV1.HealthCheckResponse_status'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_grpcHealthV1.HealthCheckResponse_status'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(begin + <> = + <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_grpcHealthV1.HealthCheckResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_grpcHealthV1.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_grpcHealthV1.HealthCheckResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_grpcHealthV1.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_grpcHealthV1.HealthCheckResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_grpcHealthV1.HealthCheckResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_grpcHealthV1.HealthCheckResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_grpcHealthV1.HealthCheckResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'; +'d_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V) -> + V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'merge_msg_grpcHealthV1.HealthCheckRequest'(Prev, New, + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'merge_msg_grpcHealthV1.HealthCheckResponse'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_grpcHealthV1.HealthCheckRequest'/3}). +'merge_msg_grpcHealthV1.HealthCheckRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{service := NFservice}} -> + S1#{service => NFservice}; + {#{service := PFservice}, _} -> + S1#{service => PFservice}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_grpcHealthV1.HealthCheckResponse'/3}). +'merge_msg_grpcHealthV1.HealthCheckResponse'(PMsg, NMsg, + _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{status := NFstatus}} -> S1#{status => NFstatus}; + {#{status := PFstatus}, _} -> S1#{status => PFstatus}; + _ -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'grpcHealthV1.HealthCheckRequest' -> + 'v_msg_grpcHealthV1.HealthCheckRequest'(Msg, [MsgName], + TrUserData); + 'grpcHealthV1.HealthCheckResponse' -> + 'v_msg_grpcHealthV1.HealthCheckResponse'(Msg, [MsgName], + TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_grpcHealthV1.HealthCheckRequest'/3}). +-dialyzer({nowarn_function,'v_msg_grpcHealthV1.HealthCheckRequest'/3}). +'v_msg_grpcHealthV1.HealthCheckRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{service := F1} -> + v_type_string(F1, [service | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (service) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_grpcHealthV1.HealthCheckRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'grpcHealthV1.HealthCheckRequest'}, + M, Path); +'v_msg_grpcHealthV1.HealthCheckRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'grpcHealthV1.HealthCheckRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_grpcHealthV1.HealthCheckResponse'/3}). +-dialyzer({nowarn_function,'v_msg_grpcHealthV1.HealthCheckResponse'/3}). +'v_msg_grpcHealthV1.HealthCheckResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{status := F1} -> + 'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(F1, + [status + | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (status) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_grpcHealthV1.HealthCheckResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'grpcHealthV1.HealthCheckResponse'}, + M, Path); +'v_msg_grpcHealthV1.HealthCheckResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'grpcHealthV1.HealthCheckResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'/3}). +-dialyzer({nowarn_function,'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'/3}). +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_grpcHealthV1.HealthCheckResponse.ServingStatus'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]}, + {{msg, 'grpcHealthV1.HealthCheckRequest'}, + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'grpcHealthV1.HealthCheckResponse'}, + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]}]. + + +get_msg_names() -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']. + + +get_enum_names() -> + ['grpcHealthV1.HealthCheckResponse.ServingStatus']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('grpcHealthV1.HealthCheckRequest') -> + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]; +find_msg_def('grpcHealthV1.HealthCheckResponse') -> + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, + 'grpcHealthV1.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('grpcHealthV1.HealthCheckResponse.ServingStatus') -> + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('grpcHealthV1.HealthCheckResponse.ServingStatus', + Value) -> + 'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(Value). + + +enum_value_by_symbol('grpcHealthV1.HealthCheckResponse.ServingStatus', + Sym) -> + 'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'(Sym). + + +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'enum_symbol_by_value_grpcHealthV1.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'. + + +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('UNKNOWN') -> + 0; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVING') -> + 1; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('NOT_SERVING') -> + 2; +'enum_value_by_symbol_grpcHealthV1.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN') -> + 3. + + +get_service_names() -> ['grpcHealthV1.Health']. + + +get_service_def('grpcHealthV1.Health') -> + {{service, 'grpcHealthV1.Health'}, + [#{name => 'Check', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Watch', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}]}; +get_service_def(_) -> error. + + +get_rpc_names('grpcHealthV1.Health') -> + ['Check', 'Watch']; +get_rpc_names(_) -> error. + + +find_rpc_def('grpcHealthV1.Health', RpcName) -> + 'find_rpc_def_grpcHealthV1.Health'(RpcName); +find_rpc_def(_, _) -> error. + + +'find_rpc_def_grpcHealthV1.Health'('Check') -> + #{name => 'Check', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_grpcHealthV1.Health'('Watch') -> + #{name => 'Watch', + input => 'grpcHealthV1.HealthCheckRequest', + output => 'grpcHealthV1.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_grpcHealthV1.Health'(_) -> error. + + +fetch_rpc_def(ServiceName, RpcName) -> + case find_rpc_def(ServiceName, RpcName) of + Def when is_map(Def) -> Def; + error -> + erlang:error({no_such_rpc, ServiceName, RpcName}) + end. + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +fqbin_to_service_name(<<"grpcHealthV1.Health">>) -> 'grpcHealthV1.Health'; +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +service_name_to_fqbin('grpcHealthV1.Health') -> <<"grpcHealthV1.Health">>; +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +fqbins_to_service_and_rpc_name(<<"grpcHealthV1.Health">>, <<"Check">>) -> + {'grpcHealthV1.Health', 'Check'}; +fqbins_to_service_and_rpc_name(<<"grpcHealthV1.Health">>, <<"Watch">>) -> + {'grpcHealthV1.Health', 'Watch'}; +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +service_and_rpc_name_to_fqbins('grpcHealthV1.Health', + 'Check') -> + {<<"grpcHealthV1.Health">>, <<"Check">>}; +service_and_rpc_name_to_fqbins('grpcHealthV1.Health', + 'Watch') -> + {<<"grpcHealthV1.Health">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"grpcHealthV1.HealthCheckRequest">>) -> + 'grpcHealthV1.HealthCheckRequest'; +fqbin_to_msg_name(<<"grpcHealthV1.HealthCheckResponse">>) -> + 'grpcHealthV1.HealthCheckResponse'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('grpcHealthV1.HealthCheckRequest') -> + <<"grpcHealthV1.HealthCheckRequest">>; +msg_name_to_fqbin('grpcHealthV1.HealthCheckResponse') -> + <<"grpcHealthV1.HealthCheckResponse">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"grpcHealthV1.HealthCheckResponse.ServingStatus">>) -> + 'grpcHealthV1.HealthCheckResponse.ServingStatus'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('grpcHealthV1.HealthCheckResponse.ServingStatus') -> + <<"grpcHealthV1.HealthCheckResponse.ServingStatus">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> grpcHealthV1. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "health.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> ["health.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["health"]. + + +get_msg_containment("health") -> + ['grpcHealthV1.HealthCheckRequest', + 'grpcHealthV1.HealthCheckResponse']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("health") -> grpcHealthV1; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("health") -> + ['grpcHealthV1.Health']; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("health") -> + [{'grpcHealthV1.Health', 'Check'}, + {'grpcHealthV1.Health', 'Watch'}]; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("health") -> + ['grpcHealthV1.HealthCheckResponse.ServingStatus']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"grpcHealthV1.HealthCheckRequest">>) -> "health"; +get_proto_by_msg_name_as_fqbin(<<"grpcHealthV1.HealthCheckResponse">>) -> "health"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +get_proto_by_service_name_as_fqbin(<<"grpcHealthV1.Health">>) -> "health"; +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"grpcHealthV1.HealthCheckResponse.ServingStatus">>) -> "health"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"grpcHealthV1">>) -> ["health"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.10.5". + +gpb_version_as_list() -> + [4,10,5]. diff --git a/deps/eetcd/src/protos/kv_pb.erl b/deps/eetcd/src/protos/kv_pb.erl new file mode 100644 index 0000000..77f5689 --- /dev/null +++ b/deps/eetcd/src/protos/kv_pb.erl @@ -0,0 +1,29658 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.0 +-module(kv_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_mvccpb.Event.EventType'/1, 'enum_value_by_symbol_mvccpb.Event.EventType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'mvccpb.Event.EventType'() :: 'PUT' | 'DELETE'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-export_type(['mvccpb.Event.EventType'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0]). + +%% message types +-type 'mvccpb.KeyValue'() :: + #{key => iodata(), % = 1 + create_revision => integer(), % = 2, 32 bits + mod_revision => integer(), % = 3, 32 bits + version => integer(), % = 4, 32 bits + value => iodata(), % = 5 + lease => integer() % = 6, 32 bits + }. + +-type 'mvccpb.Event'() :: + #{type => 'PUT' | 'DELETE' | integer(), % = 1, enum mvccpb.Event.EventType + kv => 'mvccpb.KeyValue'(), % = 2 + prev_kv => 'mvccpb.KeyValue'() % = 3 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 32 bits + negative_int_value => integer(), % = 5, 32 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-export_type(['mvccpb.KeyValue'/0, 'mvccpb.Event'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0]). + +-spec encode_msg('mvccpb.KeyValue'() | 'mvccpb.Event'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('mvccpb.KeyValue'() | 'mvccpb.Event'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'encode_msg_mvccpb.KeyValue'(id(Msg, TrUserData), + TrUserData); + 'mvccpb.Event' -> + 'encode_msg_mvccpb.Event'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData) + end. + + +'encode_msg_mvccpb.KeyValue'(Msg, TrUserData) -> + 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.KeyValue'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{create_revision := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{mod_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{version := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{value := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> + e_type_int64(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_mvccpb.Event'(Msg, TrUserData) -> + 'encode_msg_mvccpb.Event'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.Event'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{type := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'PUT'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_mvccpb.Event.EventType'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_mvccpb.Event_kv'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_mvccpb.Event_prev_kv'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'e_mfield_mvccpb.Event_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_mvccpb.Event_prev_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_enum_mvccpb.Event.EventType'('PUT', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'('DELETE', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('mvccpb.KeyValue', Bin, TrUserData) -> + id('decode_msg_mvccpb.KeyValue'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.Event', Bin, TrUserData) -> + id('decode_msg_mvccpb.Event'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData). + + + +'decode_msg_mvccpb.KeyValue'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.KeyValue'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_version'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}; +'dfp_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_mvccpb.KeyValue_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 16 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 24 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 32 -> + 'd_field_mvccpb.KeyValue_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 42 -> + 'd_field_mvccpb.KeyValue_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_mvccpb.KeyValue'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}. + +'d_field_mvccpb.KeyValue_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_mvccpb.KeyValue_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_mvccpb.KeyValue'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_mvccpb.KeyValue'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.KeyValue'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_mvccpb.KeyValue'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_mvccpb.KeyValue'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_mvccpb.KeyValue'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_mvccpb.Event'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Bin, 0, 0, + id('PUT', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.Event'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_type'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_prev_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end; +'dfp_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_mvccpb.Event_type'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_mvccpb.Event_kv'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.Event'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 3 -> + 'skip_group_mvccpb.Event'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end. + +'d_field_mvccpb.Event_type'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_type'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_type'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_mvccpb.Event.EventType'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_mvccpb.Event_kv'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_kv'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_kv'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_mvccpb.Event_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + F@_2, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_mvccpb.Event'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_mvccpb.Event'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_mvccpb.Event'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.Event'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_mvccpb.Event'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.Event'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_mvccpb.Event'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_mvccpb.Event'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'d_enum_mvccpb.Event.EventType'(0) -> 'PUT'; +'d_enum_mvccpb.Event.EventType'(1) -> 'DELETE'; +'d_enum_mvccpb.Event.EventType'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'merge_msg_mvccpb.KeyValue'(Prev, New, TrUserData); + 'mvccpb.Event' -> + 'merge_msg_mvccpb.Event'(Prev, New, TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.KeyValue'/3}). +'merge_msg_mvccpb.KeyValue'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{create_revision := NFcreate_revision}} -> + S2#{create_revision => NFcreate_revision}; + {#{create_revision := PFcreate_revision}, _} -> + S2#{create_revision => PFcreate_revision}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{mod_revision := NFmod_revision}} -> + S3#{mod_revision => NFmod_revision}; + {#{mod_revision := PFmod_revision}, _} -> + S3#{mod_revision => PFmod_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S4#{version => NFversion}; + {#{version := PFversion}, _} -> + S4#{version => PFversion}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S5#{value => NFvalue}; + {#{value := PFvalue}, _} -> S5#{value => PFvalue}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S6#{lease => NFlease}; + {#{lease := PFlease}, _} -> S6#{lease => PFlease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.Event'/3}). +'merge_msg_mvccpb.Event'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S1#{type => NFtype}; + {#{type := PFtype}, _} -> S1#{type => PFtype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'mvccpb.KeyValue' -> + 'v_msg_mvccpb.KeyValue'(Msg, [MsgName], TrUserData); + 'mvccpb.Event' -> + 'v_msg_mvccpb.Event'(Msg, [MsgName], TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_mvccpb.KeyValue'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.KeyValue'/3}). +'v_msg_mvccpb.KeyValue'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{create_revision := F2} -> + v_type_int64(F2, [create_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{mod_revision := F3} -> + v_type_int64(F3, [mod_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{version := F4} -> + v_type_int64(F4, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F5} -> + v_type_bytes(F5, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F6} -> + v_type_int64(F6, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (create_revision) -> ok; + (mod_revision) -> ok; + (version) -> ok; + (value) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.KeyValue'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.KeyValue'}, + M, Path); +'v_msg_mvccpb.KeyValue'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.KeyValue'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.Event'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.Event'/3}). +'v_msg_mvccpb.Event'(#{} = M, Path, TrUserData) -> + case M of + #{type := F1} -> + 'v_enum_mvccpb.Event.EventType'(F1, [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + 'v_msg_mvccpb.KeyValue'(F3, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (type) -> ok; + (kv) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.Event'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.Event'}, + M, Path); +'v_msg_mvccpb.Event'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.Event'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_mvccpb.Event.EventType'/3}). +-dialyzer({nowarn_function,'v_enum_mvccpb.Event.EventType'/3}). +'v_enum_mvccpb.Event.EventType'('PUT', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'('DELETE', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_mvccpb.Event.EventType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'mvccpb.Event.EventType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'mvccpb.Event.EventType'}, + [{'PUT', 0}, {'DELETE', 1}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'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}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{msg, 'mvccpb.KeyValue'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'mvccpb.Event'}, + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['mvccpb.KeyValue', 'mvccpb.Event', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['mvccpb.KeyValue', 'mvccpb.Event', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo']. + + +get_enum_names() -> + ['mvccpb.Event.EventType', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('mvccpb.KeyValue') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('mvccpb.Event') -> + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('mvccpb.Event.EventType') -> + [{'PUT', 0}, {'DELETE', 1}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'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}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('mvccpb.Event.EventType', Value) -> + 'enum_symbol_by_value_mvccpb.Event.EventType'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value). + + +enum_value_by_symbol('mvccpb.Event.EventType', Sym) -> + 'enum_value_by_symbol_mvccpb.Event.EventType'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym). + + +'enum_symbol_by_value_mvccpb.Event.EventType'(0) -> + 'PUT'; +'enum_symbol_by_value_mvccpb.Event.EventType'(1) -> + 'DELETE'. + + +'enum_value_by_symbol_mvccpb.Event.EventType'('PUT') -> + 0; +'enum_value_by_symbol_mvccpb.Event.EventType'('DELETE') -> + 1. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> + erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"mvccpb.KeyValue">>) -> 'mvccpb.KeyValue'; +fqbin_to_msg_name(<<"mvccpb.Event">>) -> 'mvccpb.Event'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('mvccpb.KeyValue') -> <<"mvccpb.KeyValue">>; +msg_name_to_fqbin('mvccpb.Event') -> <<"mvccpb.Event">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"mvccpb.Event.EventType">>) -> 'mvccpb.Event.EventType'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('mvccpb.Event.EventType') -> <<"mvccpb.Event.EventType">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> mvccpb. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "kv.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["kv.proto", "gogo.proto", "descriptor.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["kv", "gogo", "descriptor"]. + + +get_msg_containment("kv") -> + ['mvccpb.Event', 'mvccpb.KeyValue']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("kv") -> mvccpb; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("kv") -> []; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("kv") -> []; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("kv") -> + ['mvccpb.Event.EventType']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.Event">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.KeyValue">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"mvccpb.Event.EventType">>) -> "kv"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"mvccpb">>) -> ["kv"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.0". + +gpb_version_as_list() -> + [4,11,0]. diff --git a/deps/eetcd/src/protos/router_pb.erl b/deps/eetcd/src/protos/router_pb.erl new file mode 100644 index 0000000..6b84730 --- /dev/null +++ b/deps/eetcd/src/protos/router_pb.erl @@ -0,0 +1,64412 @@ +%% -*- coding: utf-8 -*- +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.11.1 +-module(router_pb). + +-export([encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/3, merge_msgs/4]). +-export([verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export(['enum_symbol_by_value_Etcd.RangeRequest.SortOrder'/1, 'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'/1]). +-export(['enum_symbol_by_value_Etcd.RangeRequest.SortTarget'/1, 'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'/1]). +-export(['enum_symbol_by_value_Etcd.Compare.CompareResult'/1, 'enum_value_by_symbol_Etcd.Compare.CompareResult'/1]). +-export(['enum_symbol_by_value_Etcd.Compare.CompareTarget'/1, 'enum_value_by_symbol_Etcd.Compare.CompareTarget'/1]). +-export(['enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'/1, 'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'/1]). +-export(['enum_symbol_by_value_Etcd.AlarmType'/1, 'enum_value_by_symbol_Etcd.AlarmType'/1]). +-export(['enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'/1, 'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'/1]). +-export(['enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'/1, 'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'/1, 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'/1]). +-export(['enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'/1, 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.CType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'/1]). +-export(['enum_symbol_by_value_google.protobuf.FieldOptions.JSType'/1, 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'/1]). +-export(['enum_symbol_by_value_mvccpb.Event.EventType'/1, 'enum_value_by_symbol_mvccpb.Event.EventType'/1]). +-export(['enum_symbol_by_value_authpb.Permission.Type'/1, 'enum_value_by_symbol_authpb.Permission.Type'/1]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). + + +%% enumerated types +-type 'Etcd.RangeRequest.SortOrder'() :: 'NONE' | 'ASCEND' | 'DESCEND'. +-type 'Etcd.RangeRequest.SortTarget'() :: 'KEY' | 'VERSION' | 'CREATE' | 'MOD' | 'VALUE'. +-type 'Etcd.Compare.CompareResult'() :: 'EQUAL' | 'GREATER' | 'LESS' | 'NOT_EQUAL'. +-type 'Etcd.Compare.CompareTarget'() :: 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | 'LEASE'. +-type 'Etcd.WatchCreateRequest.FilterType'() :: 'NOPUT' | 'NODELETE'. +-type 'Etcd.AlarmType'() :: 'NONE' | 'NOSPACE' | 'CORRUPT'. +-type 'Etcd.AlarmRequest.AlarmAction'() :: 'GET' | 'ACTIVATE' | 'DEACTIVATE'. +-type 'Etcd.HealthCheckResponse.ServingStatus'() :: 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN'. +-type 'google.protobuf.FieldDescriptorProto.Type'() :: 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64'. +-type 'google.protobuf.FieldDescriptorProto.Label'() :: 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED'. +-type 'google.protobuf.FileOptions.OptimizeMode'() :: 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME'. +-type 'google.protobuf.FieldOptions.CType'() :: 'STRING' | 'CORD' | 'STRING_PIECE'. +-type 'google.protobuf.FieldOptions.JSType'() :: 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER'. +-type 'mvccpb.Event.EventType'() :: 'PUT' | 'DELETE'. +-type 'authpb.Permission.Type'() :: 'READ' | 'WRITE' | 'READWRITE'. +-export_type(['Etcd.RangeRequest.SortOrder'/0, 'Etcd.RangeRequest.SortTarget'/0, 'Etcd.Compare.CompareResult'/0, 'Etcd.Compare.CompareTarget'/0, 'Etcd.WatchCreateRequest.FilterType'/0, 'Etcd.AlarmType'/0, 'Etcd.AlarmRequest.AlarmAction'/0, 'Etcd.HealthCheckResponse.ServingStatus'/0, 'google.protobuf.FieldDescriptorProto.Type'/0, 'google.protobuf.FieldDescriptorProto.Label'/0, 'google.protobuf.FileOptions.OptimizeMode'/0, 'google.protobuf.FieldOptions.CType'/0, 'google.protobuf.FieldOptions.JSType'/0, 'mvccpb.Event.EventType'/0, 'authpb.Permission.Type'/0]). + +%% message types +-type 'Etcd.ResponseHeader'() :: + #{cluster_id => non_neg_integer(), % = 1, 64 bits + member_id => non_neg_integer(), % = 2, 64 bits + revision => integer(), % = 3, 64 bits + raft_term => non_neg_integer() % = 4, 64 bits + }. + +-type 'Etcd.RangeRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + limit => integer(), % = 3, 64 bits + revision => integer(), % = 4, 64 bits + sort_order => 'NONE' | 'ASCEND' | 'DESCEND' | integer(), % = 5, enum Etcd.RangeRequest.SortOrder + sort_target => 'KEY' | 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | integer(), % = 6, enum Etcd.RangeRequest.SortTarget + serializable => boolean() | 0 | 1, % = 7 + keys_only => boolean() | 0 | 1, % = 8 + count_only => boolean() | 0 | 1, % = 9 + min_mod_revision => integer(), % = 10, 64 bits + max_mod_revision => integer(), % = 11, 64 bits + min_create_revision => integer(), % = 12, 64 bits + max_create_revision => integer() % = 13, 64 bits + }. + +-type 'Etcd.RangeResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + kvs => ['mvccpb.KeyValue'()], % = 2 + more => boolean() | 0 | 1, % = 3 + count => integer() % = 4, 64 bits + }. + +-type 'Etcd.PutRequest'() :: + #{key => iodata(), % = 1 + value => iodata(), % = 2 + lease => integer(), % = 3, 64 bits + prev_kv => boolean() | 0 | 1, % = 4 + ignore_value => boolean() | 0 | 1, % = 5 + ignore_lease => boolean() | 0 | 1 % = 6 + }. + +-type 'Etcd.PutResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + prev_kv => 'mvccpb.KeyValue'() % = 2 + }. + +-type 'Etcd.DeleteRangeRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + prev_kv => boolean() | 0 | 1 % = 3 + }. + +-type 'Etcd.DeleteRangeResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + deleted => integer(), % = 2, 64 bits + prev_kvs => ['mvccpb.KeyValue'()] % = 3 + }. + +-type 'Etcd.RequestOp'() :: + #{request => {request_range, 'Etcd.RangeRequest'()} | {request_put, 'Etcd.PutRequest'()} | {request_delete_range, 'Etcd.DeleteRangeRequest'()} | {request_txn, 'Etcd.TxnRequest'()} % oneof + }. + +-type 'Etcd.ResponseOp'() :: + #{response => {response_range, 'Etcd.RangeResponse'()} | {response_put, 'Etcd.PutResponse'()} | {response_delete_range, 'Etcd.DeleteRangeResponse'()} | {response_txn, 'Etcd.TxnResponse'()} % oneof + }. + +-type 'Etcd.Compare'() :: + #{result => 'EQUAL' | 'GREATER' | 'LESS' | 'NOT_EQUAL' | integer(), % = 1, enum Etcd.Compare.CompareResult + target => 'VERSION' | 'CREATE' | 'MOD' | 'VALUE' | 'LEASE' | integer(), % = 2, enum Etcd.Compare.CompareTarget + key => iodata(), % = 3 + target_union => {version, integer()} | {create_revision, integer()} | {mod_revision, integer()} | {value, iodata()} | {lease, integer()}, % oneof + range_end => iodata() % = 64 + }. + +-type 'Etcd.TxnRequest'() :: + #{compare => ['Etcd.Compare'()], % = 1 + success => ['Etcd.RequestOp'()], % = 2 + failure => ['Etcd.RequestOp'()] % = 3 + }. + +-type 'Etcd.TxnResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + succeeded => boolean() | 0 | 1, % = 2 + responses => ['Etcd.ResponseOp'()] % = 3 + }. + +-type 'Etcd.CompactionRequest'() :: + #{revision => integer(), % = 1, 64 bits + physical => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.CompactionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.HashRequest'() :: + #{ + }. + +-type 'Etcd.HashKVRequest'() :: + #{revision => integer() % = 1, 64 bits + }. + +-type 'Etcd.HashKVResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + hash => non_neg_integer(), % = 2, 32 bits + compact_revision => integer() % = 3, 64 bits + }. + +-type 'Etcd.HashResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + hash => non_neg_integer() % = 2, 32 bits + }. + +-type 'Etcd.SnapshotRequest'() :: + #{ + }. + +-type 'Etcd.SnapshotResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + remaining_bytes => non_neg_integer(), % = 2, 64 bits + blob => iodata() % = 3 + }. + +-type 'Etcd.WatchRequest'() :: + #{request_union => {create_request, 'Etcd.WatchCreateRequest'()} | {cancel_request, 'Etcd.WatchCancelRequest'()} | {progress_request, 'Etcd.WatchProgressRequest'()} % oneof + }. + +-type 'Etcd.WatchCreateRequest'() :: + #{key => iodata(), % = 1 + range_end => iodata(), % = 2 + start_revision => integer(), % = 3, 64 bits + progress_notify => boolean() | 0 | 1, % = 4 + filters => ['NOPUT' | 'NODELETE' | integer()], % = 5, enum Etcd.WatchCreateRequest.FilterType + prev_kv => boolean() | 0 | 1, % = 6 + watch_id => integer(), % = 7, 64 bits + fragment => boolean() | 0 | 1 % = 8 + }. + +-type 'Etcd.WatchCancelRequest'() :: + #{watch_id => integer() % = 1, 64 bits + }. + +-type 'Etcd.WatchProgressRequest'() :: + #{ + }. + +-type 'Etcd.WatchResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + watch_id => integer(), % = 2, 64 bits + created => boolean() | 0 | 1, % = 3 + canceled => boolean() | 0 | 1, % = 4 + compact_revision => integer(), % = 5, 64 bits + cancel_reason => iodata(), % = 6 + fragment => boolean() | 0 | 1, % = 7 + events => ['mvccpb.Event'()] % = 11 + }. + +-type 'Etcd.LeaseGrantRequest'() :: + #{'TTL' => integer(), % = 1, 64 bits + 'ID' => integer() % = 2, 64 bits + }. + +-type 'Etcd.LeaseGrantResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer(), % = 3, 64 bits + error => iodata() % = 4 + }. + +-type 'Etcd.LeaseRevokeRequest'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseRevokeResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.LeaseCheckpoint'() :: + #{'ID' => integer(), % = 1, 64 bits + remaining_TTL => integer() % = 2, 64 bits + }. + +-type 'Etcd.LeaseCheckpointRequest'() :: + #{checkpoints => ['Etcd.LeaseCheckpoint'()] % = 1 + }. + +-type 'Etcd.LeaseCheckpointResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.LeaseKeepAliveRequest'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseKeepAliveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer() % = 3, 64 bits + }. + +-type 'Etcd.LeaseTimeToLiveRequest'() :: + #{'ID' => integer(), % = 1, 64 bits + keys => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.LeaseTimeToLiveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + 'ID' => integer(), % = 2, 64 bits + 'TTL' => integer(), % = 3, 64 bits + grantedTTL => integer(), % = 4, 64 bits + keys => [iodata()] % = 5 + }. + +-type 'Etcd.LeaseLeasesRequest'() :: + #{ + }. + +-type 'Etcd.LeaseStatus'() :: + #{'ID' => integer() % = 1, 64 bits + }. + +-type 'Etcd.LeaseLeasesResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + leases => ['Etcd.LeaseStatus'()] % = 2 + }. + +-type 'Etcd.Member'() :: + #{'ID' => non_neg_integer(), % = 1, 64 bits + name => iodata(), % = 2 + peerURLs => [iodata()], % = 3 + clientURLs => [iodata()], % = 4 + isLearner => boolean() | 0 | 1 % = 5 + }. + +-type 'Etcd.MemberAddRequest'() :: + #{peerURLs => [iodata()], % = 1 + isLearner => boolean() | 0 | 1 % = 2 + }. + +-type 'Etcd.MemberAddResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + member => 'Etcd.Member'(), % = 2 + members => ['Etcd.Member'()] % = 3 + }. + +-type 'Etcd.MemberRemoveRequest'() :: + #{'ID' => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MemberRemoveResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberUpdateRequest'() :: + #{'ID' => non_neg_integer(), % = 1, 64 bits + peerURLs => [iodata()] % = 2 + }. + +-type 'Etcd.MemberUpdateResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberListRequest'() :: + #{ + }. + +-type 'Etcd.MemberListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.MemberPromoteRequest'() :: + #{'ID' => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MemberPromoteResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + members => ['Etcd.Member'()] % = 2 + }. + +-type 'Etcd.DefragmentRequest'() :: + #{ + }. + +-type 'Etcd.DefragmentResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.MoveLeaderRequest'() :: + #{targetID => non_neg_integer() % = 1, 64 bits + }. + +-type 'Etcd.MoveLeaderResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AlarmRequest'() :: + #{action => 'GET' | 'ACTIVATE' | 'DEACTIVATE' | integer(), % = 1, enum Etcd.AlarmRequest.AlarmAction + memberID => non_neg_integer(), % = 2, 64 bits + alarm => 'NONE' | 'NOSPACE' | 'CORRUPT' | integer() % = 3, enum Etcd.AlarmType + }. + +-type 'Etcd.AlarmMember'() :: + #{memberID => non_neg_integer(), % = 1, 64 bits + alarm => 'NONE' | 'NOSPACE' | 'CORRUPT' | integer() % = 2, enum Etcd.AlarmType + }. + +-type 'Etcd.AlarmResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + alarms => ['Etcd.AlarmMember'()] % = 2 + }. + +-type 'Etcd.StatusRequest'() :: + #{ + }. + +-type 'Etcd.StatusResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + version => iodata(), % = 2 + dbSize => integer(), % = 3, 64 bits + leader => non_neg_integer(), % = 4, 64 bits + raftIndex => non_neg_integer(), % = 5, 64 bits + raftTerm => non_neg_integer(), % = 6, 64 bits + raftAppliedIndex => non_neg_integer(), % = 7, 64 bits + errors => [iodata()], % = 8 + dbSizeInUse => integer(), % = 9, 64 bits + isLearner => boolean() | 0 | 1 % = 10 + }. + +-type 'Etcd.AuthEnableRequest'() :: + #{ + }. + +-type 'Etcd.AuthDisableRequest'() :: + #{ + }. + +-type 'Etcd.AuthenticateRequest'() :: + #{name => iodata(), % = 1 + password => iodata() % = 2 + }. + +-type 'Etcd.AuthUserAddRequest'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + options => 'authpb.UserAddOptions'() % = 3 + }. + +-type 'Etcd.AuthUserGetRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthUserDeleteRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthUserChangePasswordRequest'() :: + #{name => iodata(), % = 1 + password => iodata() % = 2 + }. + +-type 'Etcd.AuthUserGrantRoleRequest'() :: + #{user => iodata(), % = 1 + role => iodata() % = 2 + }. + +-type 'Etcd.AuthUserRevokeRoleRequest'() :: + #{name => iodata(), % = 1 + role => iodata() % = 2 + }. + +-type 'Etcd.AuthRoleAddRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.AuthRoleGetRequest'() :: + #{role => iodata() % = 1 + }. + +-type 'Etcd.AuthUserListRequest'() :: + #{ + }. + +-type 'Etcd.AuthRoleListRequest'() :: + #{ + }. + +-type 'Etcd.AuthRoleDeleteRequest'() :: + #{role => iodata() % = 1 + }. + +-type 'Etcd.AuthRoleGrantPermissionRequest'() :: + #{name => iodata(), % = 1 + perm => 'authpb.Permission'() % = 2 + }. + +-type 'Etcd.AuthRoleRevokePermissionRequest'() :: + #{role => iodata(), % = 1 + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'Etcd.AuthEnableResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthDisableResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthenticateResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + token => iodata() % = 2 + }. + +-type 'Etcd.AuthUserAddResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserGetResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + roles => [iodata()] % = 2 + }. + +-type 'Etcd.AuthUserDeleteResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserChangePasswordResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserGrantRoleResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthUserRevokeRoleResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleAddResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleGetResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + perm => ['authpb.Permission'()] % = 2 + }. + +-type 'Etcd.AuthRoleListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + roles => [iodata()] % = 2 + }. + +-type 'Etcd.AuthUserListResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + users => [iodata()] % = 2 + }. + +-type 'Etcd.AuthRoleDeleteResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleGrantPermissionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.AuthRoleRevokePermissionResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.HealthCheckRequest'() :: + #{service => iodata() % = 1 + }. + +-type 'Etcd.HealthCheckResponse'() :: + #{status => 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN' | integer() % = 1, enum Etcd.HealthCheckResponse.ServingStatus + }. + +-type 'Etcd.LockRequest'() :: + #{name => iodata(), % = 1 + lease => integer() % = 2, 64 bits + }. + +-type 'Etcd.LockResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + key => iodata() % = 2 + }. + +-type 'Etcd.UnlockRequest'() :: + #{key => iodata() % = 1 + }. + +-type 'Etcd.UnlockResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.CampaignRequest'() :: + #{name => iodata(), % = 1 + lease => integer(), % = 2, 64 bits + value => iodata() % = 3 + }. + +-type 'Etcd.CampaignResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + leader => 'Etcd.LeaderKey'() % = 2 + }. + +-type 'Etcd.LeaderKey'() :: + #{name => iodata(), % = 1 + key => iodata(), % = 2 + rev => integer(), % = 3, 64 bits + lease => integer() % = 4, 64 bits + }. + +-type 'Etcd.LeaderRequest'() :: + #{name => iodata() % = 1 + }. + +-type 'Etcd.LeaderResponse'() :: + #{header => 'Etcd.ResponseHeader'(), % = 1 + kv => 'mvccpb.KeyValue'() % = 2 + }. + +-type 'Etcd.ResignRequest'() :: + #{leader => 'Etcd.LeaderKey'() % = 1 + }. + +-type 'Etcd.ResignResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'Etcd.ProclaimRequest'() :: + #{leader => 'Etcd.LeaderKey'(), % = 1 + value => iodata() % = 2 + }. + +-type 'Etcd.ProclaimResponse'() :: + #{header => 'Etcd.ResponseHeader'() % = 1 + }. + +-type 'google.protobuf.FileDescriptorSet'() :: + #{file => ['google.protobuf.FileDescriptorProto'()] % = 1 + }. + +-type 'google.protobuf.FileDescriptorProto'() :: + #{name => iodata(), % = 1 + package => iodata(), % = 2 + dependency => [iodata()], % = 3 + public_dependency => [integer()], % = 10, 32 bits + weak_dependency => [integer()], % = 11, 32 bits + message_type => ['google.protobuf.DescriptorProto'()], % = 4 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 5 + service => ['google.protobuf.ServiceDescriptorProto'()], % = 6 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 7 + options => 'google.protobuf.FileOptions'(), % = 8 + source_code_info => 'google.protobuf.SourceCodeInfo'(), % = 9 + syntax => iodata() % = 12 + }. + +-type 'google.protobuf.DescriptorProto.ExtensionRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto.ReservedRange'() :: + #{start => integer(), % = 1, 32 bits + 'end' => integer() % = 2, 32 bits + }. + +-type 'google.protobuf.DescriptorProto'() :: + #{name => iodata(), % = 1 + field => ['google.protobuf.FieldDescriptorProto'()], % = 2 + extension => ['google.protobuf.FieldDescriptorProto'()], % = 6 + nested_type => ['google.protobuf.DescriptorProto'()], % = 3 + enum_type => ['google.protobuf.EnumDescriptorProto'()], % = 4 + extension_range => ['google.protobuf.DescriptorProto.ExtensionRange'()], % = 5 + oneof_decl => ['google.protobuf.OneofDescriptorProto'()], % = 8 + options => 'google.protobuf.MessageOptions'(), % = 7 + reserved_range => ['google.protobuf.DescriptorProto.ReservedRange'()], % = 9 + reserved_name => [iodata()] % = 10 + }. + +-type 'google.protobuf.FieldDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 3, 32 bits + label => 'LABEL_OPTIONAL' | 'LABEL_REQUIRED' | 'LABEL_REPEATED' | integer(), % = 4, enum google.protobuf.FieldDescriptorProto.Label + type => 'TYPE_DOUBLE' | 'TYPE_FLOAT' | 'TYPE_INT64' | 'TYPE_UINT64' | 'TYPE_INT32' | 'TYPE_FIXED64' | 'TYPE_FIXED32' | 'TYPE_BOOL' | 'TYPE_STRING' | 'TYPE_GROUP' | 'TYPE_MESSAGE' | 'TYPE_BYTES' | 'TYPE_UINT32' | 'TYPE_ENUM' | 'TYPE_SFIXED32' | 'TYPE_SFIXED64' | 'TYPE_SINT32' | 'TYPE_SINT64' | integer(), % = 5, enum google.protobuf.FieldDescriptorProto.Type + type_name => iodata(), % = 6 + extendee => iodata(), % = 2 + default_value => iodata(), % = 7 + oneof_index => integer(), % = 9, 32 bits + json_name => iodata(), % = 10 + options => 'google.protobuf.FieldOptions'() % = 8 + }. + +-type 'google.protobuf.OneofDescriptorProto'() :: + #{name => iodata() % = 1 + }. + +-type 'google.protobuf.EnumDescriptorProto'() :: + #{name => iodata(), % = 1 + value => ['google.protobuf.EnumValueDescriptorProto'()], % = 2 + options => 'google.protobuf.EnumOptions'() % = 3 + }. + +-type 'google.protobuf.EnumValueDescriptorProto'() :: + #{name => iodata(), % = 1 + number => integer(), % = 2, 32 bits + options => 'google.protobuf.EnumValueOptions'() % = 3 + }. + +-type 'google.protobuf.ServiceDescriptorProto'() :: + #{name => iodata(), % = 1 + method => ['google.protobuf.MethodDescriptorProto'()], % = 2 + options => 'google.protobuf.ServiceOptions'() % = 3 + }. + +-type 'google.protobuf.MethodDescriptorProto'() :: + #{name => iodata(), % = 1 + input_type => iodata(), % = 2 + output_type => iodata(), % = 3 + options => 'google.protobuf.MethodOptions'(), % = 4 + client_streaming => boolean() | 0 | 1, % = 5 + server_streaming => boolean() | 0 | 1 % = 6 + }. + +-type 'google.protobuf.FileOptions'() :: + #{java_package => iodata(), % = 1 + java_outer_classname => iodata(), % = 8 + java_multiple_files => boolean() | 0 | 1, % = 10 + java_generate_equals_and_hash => boolean() | 0 | 1, % = 20 + java_string_check_utf8 => boolean() | 0 | 1, % = 27 + optimize_for => 'SPEED' | 'CODE_SIZE' | 'LITE_RUNTIME' | integer(), % = 9, enum google.protobuf.FileOptions.OptimizeMode + go_package => iodata(), % = 11 + cc_generic_services => boolean() | 0 | 1, % = 16 + java_generic_services => boolean() | 0 | 1, % = 17 + py_generic_services => boolean() | 0 | 1, % = 18 + deprecated => boolean() | 0 | 1, % = 23 + cc_enable_arenas => boolean() | 0 | 1, % = 31 + objc_class_prefix => iodata(), % = 36 + csharp_namespace => iodata(), % = 37 + javanano_use_deprecated_package => boolean() | 0 | 1, % = 38 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters_all => boolean() | 0 | 1, % = 63001 + goproto_enum_prefix_all => boolean() | 0 | 1, % = 63002 + goproto_stringer_all => boolean() | 0 | 1, % = 63003 + verbose_equal_all => boolean() | 0 | 1, % = 63004 + face_all => boolean() | 0 | 1, % = 63005 + gostring_all => boolean() | 0 | 1, % = 63006 + populate_all => boolean() | 0 | 1, % = 63007 + stringer_all => boolean() | 0 | 1, % = 63008 + onlyone_all => boolean() | 0 | 1, % = 63009 + equal_all => boolean() | 0 | 1, % = 63013 + description_all => boolean() | 0 | 1, % = 63014 + testgen_all => boolean() | 0 | 1, % = 63015 + benchgen_all => boolean() | 0 | 1, % = 63016 + marshaler_all => boolean() | 0 | 1, % = 63017 + unmarshaler_all => boolean() | 0 | 1, % = 63018 + stable_marshaler_all => boolean() | 0 | 1, % = 63019 + sizer_all => boolean() | 0 | 1, % = 63020 + goproto_enum_stringer_all => boolean() | 0 | 1, % = 63021 + enum_stringer_all => boolean() | 0 | 1, % = 63022 + unsafe_marshaler_all => boolean() | 0 | 1, % = 63023 + unsafe_unmarshaler_all => boolean() | 0 | 1, % = 63024 + goproto_extensions_map_all => boolean() | 0 | 1, % = 63025 + goproto_unrecognized_all => boolean() | 0 | 1, % = 63026 + gogoproto_import => boolean() | 0 | 1, % = 63027 + protosizer_all => boolean() | 0 | 1, % = 63028 + compare_all => boolean() | 0 | 1 % = 63029 + }. + +-type 'google.protobuf.MessageOptions'() :: + #{message_set_wire_format => boolean() | 0 | 1, % = 1 + no_standard_descriptor_accessor => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + map_entry => boolean() | 0 | 1, % = 7 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_getters => boolean() | 0 | 1, % = 64001 + goproto_stringer => boolean() | 0 | 1, % = 64003 + verbose_equal => boolean() | 0 | 1, % = 64004 + face => boolean() | 0 | 1, % = 64005 + gostring => boolean() | 0 | 1, % = 64006 + populate => boolean() | 0 | 1, % = 64007 + stringer => boolean() | 0 | 1, % = 67008 + onlyone => boolean() | 0 | 1, % = 64009 + equal => boolean() | 0 | 1, % = 64013 + description => boolean() | 0 | 1, % = 64014 + testgen => boolean() | 0 | 1, % = 64015 + benchgen => boolean() | 0 | 1, % = 64016 + marshaler => boolean() | 0 | 1, % = 64017 + unmarshaler => boolean() | 0 | 1, % = 64018 + stable_marshaler => boolean() | 0 | 1, % = 64019 + sizer => boolean() | 0 | 1, % = 64020 + unsafe_marshaler => boolean() | 0 | 1, % = 64023 + unsafe_unmarshaler => boolean() | 0 | 1, % = 64024 + goproto_extensions_map => boolean() | 0 | 1, % = 64025 + goproto_unrecognized => boolean() | 0 | 1, % = 64026 + protosizer => boolean() | 0 | 1, % = 64028 + compare => boolean() | 0 | 1 % = 64029 + }. + +-type 'google.protobuf.FieldOptions'() :: + #{ctype => 'STRING' | 'CORD' | 'STRING_PIECE' | integer(), % = 1, enum google.protobuf.FieldOptions.CType + packed => boolean() | 0 | 1, % = 2 + jstype => 'JS_NORMAL' | 'JS_STRING' | 'JS_NUMBER' | integer(), % = 6, enum google.protobuf.FieldOptions.JSType + lazy => boolean() | 0 | 1, % = 5 + deprecated => boolean() | 0 | 1, % = 3 + weak => boolean() | 0 | 1, % = 10 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + nullable => boolean() | 0 | 1, % = 65001 + embed => boolean() | 0 | 1, % = 65002 + customtype => iodata(), % = 65003 + customname => iodata(), % = 65004 + jsontag => iodata(), % = 65005 + moretags => iodata(), % = 65006 + casttype => iodata(), % = 65007 + castkey => iodata(), % = 65008 + castvalue => iodata(), % = 65009 + stdtime => boolean() | 0 | 1, % = 65010 + stdduration => boolean() | 0 | 1 % = 65011 + }. + +-type 'google.protobuf.EnumOptions'() :: + #{allow_alias => boolean() | 0 | 1, % = 2 + deprecated => boolean() | 0 | 1, % = 3 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + goproto_enum_prefix => boolean() | 0 | 1, % = 62001 + goproto_enum_stringer => boolean() | 0 | 1, % = 62021 + enum_stringer => boolean() | 0 | 1, % = 62022 + enum_customname => iodata() % = 62023 + }. + +-type 'google.protobuf.EnumValueOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 1 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()], % = 999 + enumvalue_customname => iodata() % = 66001 + }. + +-type 'google.protobuf.ServiceOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.MethodOptions'() :: + #{deprecated => boolean() | 0 | 1, % = 33 + uninterpreted_option => ['google.protobuf.UninterpretedOption'()] % = 999 + }. + +-type 'google.protobuf.UninterpretedOption.NamePart'() :: + #{name_part := iodata(), % = 1 + is_extension := boolean() | 0 | 1 % = 2 + }. + +-type 'google.protobuf.UninterpretedOption'() :: + #{name => ['google.protobuf.UninterpretedOption.NamePart'()], % = 2 + identifier_value => iodata(), % = 3 + positive_int_value => non_neg_integer(), % = 4, 64 bits + negative_int_value => integer(), % = 5, 64 bits + double_value => float() | integer() | infinity | '-infinity' | nan, % = 6 + string_value => iodata(), % = 7 + aggregate_value => iodata() % = 8 + }. + +-type 'google.protobuf.SourceCodeInfo.Location'() :: + #{path => [integer()], % = 1, 32 bits + span => [integer()], % = 2, 32 bits + leading_comments => iodata(), % = 3 + trailing_comments => iodata(), % = 4 + leading_detached_comments => [iodata()] % = 6 + }. + +-type 'google.protobuf.SourceCodeInfo'() :: + #{location => ['google.protobuf.SourceCodeInfo.Location'()] % = 1 + }. + +-type 'google.protobuf.GeneratedCodeInfo.Annotation'() :: + #{path => [integer()], % = 1, 32 bits + source_file => iodata(), % = 2 + 'begin' => integer(), % = 3, 32 bits + 'end' => integer() % = 4, 32 bits + }. + +-type 'google.protobuf.GeneratedCodeInfo'() :: + #{annotation => ['google.protobuf.GeneratedCodeInfo.Annotation'()] % = 1 + }. + +-type 'mvccpb.KeyValue'() :: + #{key => iodata(), % = 1 + create_revision => integer(), % = 2, 64 bits + mod_revision => integer(), % = 3, 64 bits + version => integer(), % = 4, 64 bits + value => iodata(), % = 5 + lease => integer() % = 6, 64 bits + }. + +-type 'mvccpb.Event'() :: + #{type => 'PUT' | 'DELETE' | integer(), % = 1, enum mvccpb.Event.EventType + kv => 'mvccpb.KeyValue'(), % = 2 + prev_kv => 'mvccpb.KeyValue'() % = 3 + }. + +-type 'authpb.UserAddOptions'() :: + #{no_password => boolean() | 0 | 1 % = 1 + }. + +-type 'authpb.User'() :: + #{name => iodata(), % = 1 + password => iodata(), % = 2 + roles => [iodata()], % = 3 + options => 'authpb.UserAddOptions'() % = 4 + }. + +-type 'authpb.Permission'() :: + #{permType => 'READ' | 'WRITE' | 'READWRITE' | integer(), % = 1, enum authpb.Permission.Type + key => iodata(), % = 2 + range_end => iodata() % = 3 + }. + +-type 'authpb.Role'() :: + #{name => iodata(), % = 1 + keyPermission => ['authpb.Permission'()] % = 2 + }. + +-export_type(['Etcd.ResponseHeader'/0, 'Etcd.RangeRequest'/0, 'Etcd.RangeResponse'/0, 'Etcd.PutRequest'/0, 'Etcd.PutResponse'/0, 'Etcd.DeleteRangeRequest'/0, 'Etcd.DeleteRangeResponse'/0, 'Etcd.RequestOp'/0, 'Etcd.ResponseOp'/0, 'Etcd.Compare'/0, 'Etcd.TxnRequest'/0, 'Etcd.TxnResponse'/0, 'Etcd.CompactionRequest'/0, 'Etcd.CompactionResponse'/0, 'Etcd.HashRequest'/0, 'Etcd.HashKVRequest'/0, 'Etcd.HashKVResponse'/0, 'Etcd.HashResponse'/0, 'Etcd.SnapshotRequest'/0, 'Etcd.SnapshotResponse'/0, 'Etcd.WatchRequest'/0, 'Etcd.WatchCreateRequest'/0, 'Etcd.WatchCancelRequest'/0, 'Etcd.WatchProgressRequest'/0, 'Etcd.WatchResponse'/0, 'Etcd.LeaseGrantRequest'/0, 'Etcd.LeaseGrantResponse'/0, 'Etcd.LeaseRevokeRequest'/0, 'Etcd.LeaseRevokeResponse'/0, 'Etcd.LeaseCheckpoint'/0, 'Etcd.LeaseCheckpointRequest'/0, 'Etcd.LeaseCheckpointResponse'/0, 'Etcd.LeaseKeepAliveRequest'/0, 'Etcd.LeaseKeepAliveResponse'/0, 'Etcd.LeaseTimeToLiveRequest'/0, 'Etcd.LeaseTimeToLiveResponse'/0, 'Etcd.LeaseLeasesRequest'/0, 'Etcd.LeaseStatus'/0, 'Etcd.LeaseLeasesResponse'/0, 'Etcd.Member'/0, 'Etcd.MemberAddRequest'/0, 'Etcd.MemberAddResponse'/0, 'Etcd.MemberRemoveRequest'/0, 'Etcd.MemberRemoveResponse'/0, 'Etcd.MemberUpdateRequest'/0, 'Etcd.MemberUpdateResponse'/0, 'Etcd.MemberListRequest'/0, 'Etcd.MemberListResponse'/0, 'Etcd.MemberPromoteRequest'/0, 'Etcd.MemberPromoteResponse'/0, 'Etcd.DefragmentRequest'/0, 'Etcd.DefragmentResponse'/0, 'Etcd.MoveLeaderRequest'/0, 'Etcd.MoveLeaderResponse'/0, 'Etcd.AlarmRequest'/0, 'Etcd.AlarmMember'/0, 'Etcd.AlarmResponse'/0, 'Etcd.StatusRequest'/0, 'Etcd.StatusResponse'/0, 'Etcd.AuthEnableRequest'/0, 'Etcd.AuthDisableRequest'/0, 'Etcd.AuthenticateRequest'/0, 'Etcd.AuthUserAddRequest'/0, 'Etcd.AuthUserGetRequest'/0, 'Etcd.AuthUserDeleteRequest'/0, 'Etcd.AuthUserChangePasswordRequest'/0, 'Etcd.AuthUserGrantRoleRequest'/0, 'Etcd.AuthUserRevokeRoleRequest'/0, 'Etcd.AuthRoleAddRequest'/0, 'Etcd.AuthRoleGetRequest'/0, 'Etcd.AuthUserListRequest'/0, 'Etcd.AuthRoleListRequest'/0, 'Etcd.AuthRoleDeleteRequest'/0, 'Etcd.AuthRoleGrantPermissionRequest'/0, 'Etcd.AuthRoleRevokePermissionRequest'/0, 'Etcd.AuthEnableResponse'/0, 'Etcd.AuthDisableResponse'/0, 'Etcd.AuthenticateResponse'/0, 'Etcd.AuthUserAddResponse'/0, 'Etcd.AuthUserGetResponse'/0, 'Etcd.AuthUserDeleteResponse'/0, 'Etcd.AuthUserChangePasswordResponse'/0, 'Etcd.AuthUserGrantRoleResponse'/0, 'Etcd.AuthUserRevokeRoleResponse'/0, 'Etcd.AuthRoleAddResponse'/0, 'Etcd.AuthRoleGetResponse'/0, 'Etcd.AuthRoleListResponse'/0, 'Etcd.AuthUserListResponse'/0, 'Etcd.AuthRoleDeleteResponse'/0, 'Etcd.AuthRoleGrantPermissionResponse'/0, 'Etcd.AuthRoleRevokePermissionResponse'/0, 'Etcd.HealthCheckRequest'/0, 'Etcd.HealthCheckResponse'/0, 'Etcd.LockRequest'/0, 'Etcd.LockResponse'/0, 'Etcd.UnlockRequest'/0, 'Etcd.UnlockResponse'/0, 'Etcd.CampaignRequest'/0, 'Etcd.CampaignResponse'/0, 'Etcd.LeaderKey'/0, 'Etcd.LeaderRequest'/0, 'Etcd.LeaderResponse'/0, 'Etcd.ResignRequest'/0, 'Etcd.ResignResponse'/0, 'Etcd.ProclaimRequest'/0, 'Etcd.ProclaimResponse'/0, 'google.protobuf.FileDescriptorSet'/0, 'google.protobuf.FileDescriptorProto'/0, 'google.protobuf.DescriptorProto.ExtensionRange'/0, 'google.protobuf.DescriptorProto.ReservedRange'/0, 'google.protobuf.DescriptorProto'/0, 'google.protobuf.FieldDescriptorProto'/0, 'google.protobuf.OneofDescriptorProto'/0, 'google.protobuf.EnumDescriptorProto'/0, 'google.protobuf.EnumValueDescriptorProto'/0, 'google.protobuf.ServiceDescriptorProto'/0, 'google.protobuf.MethodDescriptorProto'/0, 'google.protobuf.FileOptions'/0, 'google.protobuf.MessageOptions'/0, 'google.protobuf.FieldOptions'/0, 'google.protobuf.EnumOptions'/0, 'google.protobuf.EnumValueOptions'/0, 'google.protobuf.ServiceOptions'/0, 'google.protobuf.MethodOptions'/0, 'google.protobuf.UninterpretedOption.NamePart'/0, 'google.protobuf.UninterpretedOption'/0, 'google.protobuf.SourceCodeInfo.Location'/0, 'google.protobuf.SourceCodeInfo'/0, 'google.protobuf.GeneratedCodeInfo.Annotation'/0, 'google.protobuf.GeneratedCodeInfo'/0, 'mvccpb.KeyValue'/0, 'mvccpb.Event'/0, 'authpb.UserAddOptions'/0, 'authpb.User'/0, 'authpb.Permission'/0, 'authpb.Role'/0]). + +-spec encode_msg('Etcd.ResponseHeader'() | 'Etcd.RangeRequest'() | 'Etcd.RangeResponse'() | 'Etcd.PutRequest'() | 'Etcd.PutResponse'() | 'Etcd.DeleteRangeRequest'() | 'Etcd.DeleteRangeResponse'() | 'Etcd.RequestOp'() | 'Etcd.ResponseOp'() | 'Etcd.Compare'() | 'Etcd.TxnRequest'() | 'Etcd.TxnResponse'() | 'Etcd.CompactionRequest'() | 'Etcd.CompactionResponse'() | 'Etcd.HashRequest'() | 'Etcd.HashKVRequest'() | 'Etcd.HashKVResponse'() | 'Etcd.HashResponse'() | 'Etcd.SnapshotRequest'() | 'Etcd.SnapshotResponse'() | 'Etcd.WatchRequest'() | 'Etcd.WatchCreateRequest'() | 'Etcd.WatchCancelRequest'() | 'Etcd.WatchProgressRequest'() | 'Etcd.WatchResponse'() | 'Etcd.LeaseGrantRequest'() | 'Etcd.LeaseGrantResponse'() | 'Etcd.LeaseRevokeRequest'() | 'Etcd.LeaseRevokeResponse'() | 'Etcd.LeaseCheckpoint'() | 'Etcd.LeaseCheckpointRequest'() | 'Etcd.LeaseCheckpointResponse'() | 'Etcd.LeaseKeepAliveRequest'() | 'Etcd.LeaseKeepAliveResponse'() | 'Etcd.LeaseTimeToLiveRequest'() | 'Etcd.LeaseTimeToLiveResponse'() | 'Etcd.LeaseLeasesRequest'() | 'Etcd.LeaseStatus'() | 'Etcd.LeaseLeasesResponse'() | 'Etcd.Member'() | 'Etcd.MemberAddRequest'() | 'Etcd.MemberAddResponse'() | 'Etcd.MemberRemoveRequest'() | 'Etcd.MemberRemoveResponse'() | 'Etcd.MemberUpdateRequest'() | 'Etcd.MemberUpdateResponse'() | 'Etcd.MemberListRequest'() | 'Etcd.MemberListResponse'() | 'Etcd.MemberPromoteRequest'() | 'Etcd.MemberPromoteResponse'() | 'Etcd.DefragmentRequest'() | 'Etcd.DefragmentResponse'() | 'Etcd.MoveLeaderRequest'() | 'Etcd.MoveLeaderResponse'() | 'Etcd.AlarmRequest'() | 'Etcd.AlarmMember'() | 'Etcd.AlarmResponse'() | 'Etcd.StatusRequest'() | 'Etcd.StatusResponse'() | 'Etcd.AuthEnableRequest'() | 'Etcd.AuthDisableRequest'() | 'Etcd.AuthenticateRequest'() | 'Etcd.AuthUserAddRequest'() | 'Etcd.AuthUserGetRequest'() | 'Etcd.AuthUserDeleteRequest'() | 'Etcd.AuthUserChangePasswordRequest'() | 'Etcd.AuthUserGrantRoleRequest'() | 'Etcd.AuthUserRevokeRoleRequest'() | 'Etcd.AuthRoleAddRequest'() | 'Etcd.AuthRoleGetRequest'() | 'Etcd.AuthUserListRequest'() | 'Etcd.AuthRoleListRequest'() | 'Etcd.AuthRoleDeleteRequest'() | 'Etcd.AuthRoleGrantPermissionRequest'() | 'Etcd.AuthRoleRevokePermissionRequest'() | 'Etcd.AuthEnableResponse'() | 'Etcd.AuthDisableResponse'() | 'Etcd.AuthenticateResponse'() | 'Etcd.AuthUserAddResponse'() | 'Etcd.AuthUserGetResponse'() | 'Etcd.AuthUserDeleteResponse'() | 'Etcd.AuthUserChangePasswordResponse'() | 'Etcd.AuthUserGrantRoleResponse'() | 'Etcd.AuthUserRevokeRoleResponse'() | 'Etcd.AuthRoleAddResponse'() | 'Etcd.AuthRoleGetResponse'() | 'Etcd.AuthRoleListResponse'() | 'Etcd.AuthUserListResponse'() | 'Etcd.AuthRoleDeleteResponse'() | 'Etcd.AuthRoleGrantPermissionResponse'() | 'Etcd.AuthRoleRevokePermissionResponse'() | 'Etcd.HealthCheckRequest'() | 'Etcd.HealthCheckResponse'() | 'Etcd.LockRequest'() | 'Etcd.LockResponse'() | 'Etcd.UnlockRequest'() | 'Etcd.UnlockResponse'() | 'Etcd.CampaignRequest'() | 'Etcd.CampaignResponse'() | 'Etcd.LeaderKey'() | 'Etcd.LeaderRequest'() | 'Etcd.LeaderResponse'() | 'Etcd.ResignRequest'() | 'Etcd.ResignResponse'() | 'Etcd.ProclaimRequest'() | 'Etcd.ProclaimResponse'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'() | 'mvccpb.KeyValue'() | 'mvccpb.Event'() | 'authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'(), atom()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> + encode_msg(Msg, MsgName, []). + +-spec encode_msg('Etcd.ResponseHeader'() | 'Etcd.RangeRequest'() | 'Etcd.RangeResponse'() | 'Etcd.PutRequest'() | 'Etcd.PutResponse'() | 'Etcd.DeleteRangeRequest'() | 'Etcd.DeleteRangeResponse'() | 'Etcd.RequestOp'() | 'Etcd.ResponseOp'() | 'Etcd.Compare'() | 'Etcd.TxnRequest'() | 'Etcd.TxnResponse'() | 'Etcd.CompactionRequest'() | 'Etcd.CompactionResponse'() | 'Etcd.HashRequest'() | 'Etcd.HashKVRequest'() | 'Etcd.HashKVResponse'() | 'Etcd.HashResponse'() | 'Etcd.SnapshotRequest'() | 'Etcd.SnapshotResponse'() | 'Etcd.WatchRequest'() | 'Etcd.WatchCreateRequest'() | 'Etcd.WatchCancelRequest'() | 'Etcd.WatchProgressRequest'() | 'Etcd.WatchResponse'() | 'Etcd.LeaseGrantRequest'() | 'Etcd.LeaseGrantResponse'() | 'Etcd.LeaseRevokeRequest'() | 'Etcd.LeaseRevokeResponse'() | 'Etcd.LeaseCheckpoint'() | 'Etcd.LeaseCheckpointRequest'() | 'Etcd.LeaseCheckpointResponse'() | 'Etcd.LeaseKeepAliveRequest'() | 'Etcd.LeaseKeepAliveResponse'() | 'Etcd.LeaseTimeToLiveRequest'() | 'Etcd.LeaseTimeToLiveResponse'() | 'Etcd.LeaseLeasesRequest'() | 'Etcd.LeaseStatus'() | 'Etcd.LeaseLeasesResponse'() | 'Etcd.Member'() | 'Etcd.MemberAddRequest'() | 'Etcd.MemberAddResponse'() | 'Etcd.MemberRemoveRequest'() | 'Etcd.MemberRemoveResponse'() | 'Etcd.MemberUpdateRequest'() | 'Etcd.MemberUpdateResponse'() | 'Etcd.MemberListRequest'() | 'Etcd.MemberListResponse'() | 'Etcd.MemberPromoteRequest'() | 'Etcd.MemberPromoteResponse'() | 'Etcd.DefragmentRequest'() | 'Etcd.DefragmentResponse'() | 'Etcd.MoveLeaderRequest'() | 'Etcd.MoveLeaderResponse'() | 'Etcd.AlarmRequest'() | 'Etcd.AlarmMember'() | 'Etcd.AlarmResponse'() | 'Etcd.StatusRequest'() | 'Etcd.StatusResponse'() | 'Etcd.AuthEnableRequest'() | 'Etcd.AuthDisableRequest'() | 'Etcd.AuthenticateRequest'() | 'Etcd.AuthUserAddRequest'() | 'Etcd.AuthUserGetRequest'() | 'Etcd.AuthUserDeleteRequest'() | 'Etcd.AuthUserChangePasswordRequest'() | 'Etcd.AuthUserGrantRoleRequest'() | 'Etcd.AuthUserRevokeRoleRequest'() | 'Etcd.AuthRoleAddRequest'() | 'Etcd.AuthRoleGetRequest'() | 'Etcd.AuthUserListRequest'() | 'Etcd.AuthRoleListRequest'() | 'Etcd.AuthRoleDeleteRequest'() | 'Etcd.AuthRoleGrantPermissionRequest'() | 'Etcd.AuthRoleRevokePermissionRequest'() | 'Etcd.AuthEnableResponse'() | 'Etcd.AuthDisableResponse'() | 'Etcd.AuthenticateResponse'() | 'Etcd.AuthUserAddResponse'() | 'Etcd.AuthUserGetResponse'() | 'Etcd.AuthUserDeleteResponse'() | 'Etcd.AuthUserChangePasswordResponse'() | 'Etcd.AuthUserGrantRoleResponse'() | 'Etcd.AuthUserRevokeRoleResponse'() | 'Etcd.AuthRoleAddResponse'() | 'Etcd.AuthRoleGetResponse'() | 'Etcd.AuthRoleListResponse'() | 'Etcd.AuthUserListResponse'() | 'Etcd.AuthRoleDeleteResponse'() | 'Etcd.AuthRoleGrantPermissionResponse'() | 'Etcd.AuthRoleRevokePermissionResponse'() | 'Etcd.HealthCheckRequest'() | 'Etcd.HealthCheckResponse'() | 'Etcd.LockRequest'() | 'Etcd.LockResponse'() | 'Etcd.UnlockRequest'() | 'Etcd.UnlockResponse'() | 'Etcd.CampaignRequest'() | 'Etcd.CampaignResponse'() | 'Etcd.LeaderKey'() | 'Etcd.LeaderRequest'() | 'Etcd.LeaderResponse'() | 'Etcd.ResignRequest'() | 'Etcd.ResignResponse'() | 'Etcd.ProclaimRequest'() | 'Etcd.ProclaimResponse'() | 'google.protobuf.FileDescriptorSet'() | 'google.protobuf.FileDescriptorProto'() | 'google.protobuf.DescriptorProto.ExtensionRange'() | 'google.protobuf.DescriptorProto.ReservedRange'() | 'google.protobuf.DescriptorProto'() | 'google.protobuf.FieldDescriptorProto'() | 'google.protobuf.OneofDescriptorProto'() | 'google.protobuf.EnumDescriptorProto'() | 'google.protobuf.EnumValueDescriptorProto'() | 'google.protobuf.ServiceDescriptorProto'() | 'google.protobuf.MethodDescriptorProto'() | 'google.protobuf.FileOptions'() | 'google.protobuf.MessageOptions'() | 'google.protobuf.FieldOptions'() | 'google.protobuf.EnumOptions'() | 'google.protobuf.EnumValueOptions'() | 'google.protobuf.ServiceOptions'() | 'google.protobuf.MethodOptions'() | 'google.protobuf.UninterpretedOption.NamePart'() | 'google.protobuf.UninterpretedOption'() | 'google.protobuf.SourceCodeInfo.Location'() | 'google.protobuf.SourceCodeInfo'() | 'google.protobuf.GeneratedCodeInfo.Annotation'() | 'google.protobuf.GeneratedCodeInfo'() | 'mvccpb.KeyValue'() | 'mvccpb.Event'() | 'authpb.UserAddOptions'() | 'authpb.User'() | 'authpb.Permission'() | 'authpb.Role'(), atom(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'encode_msg_Etcd.ResponseHeader'(id(Msg, TrUserData), + TrUserData); + 'Etcd.RangeRequest' -> + 'encode_msg_Etcd.RangeRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.RangeResponse' -> + 'encode_msg_Etcd.RangeResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.PutRequest' -> + 'encode_msg_Etcd.PutRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.PutResponse' -> + 'encode_msg_Etcd.PutResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'encode_msg_Etcd.DeleteRangeRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'encode_msg_Etcd.DeleteRangeResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.RequestOp' -> + 'encode_msg_Etcd.RequestOp'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResponseOp' -> + 'encode_msg_Etcd.ResponseOp'(id(Msg, TrUserData), + TrUserData); + 'Etcd.Compare' -> + 'encode_msg_Etcd.Compare'(id(Msg, TrUserData), + TrUserData); + 'Etcd.TxnRequest' -> + 'encode_msg_Etcd.TxnRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.TxnResponse' -> + 'encode_msg_Etcd.TxnResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CompactionRequest' -> + 'encode_msg_Etcd.CompactionRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CompactionResponse' -> + 'encode_msg_Etcd.CompactionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HashRequest' -> + 'encode_msg_Etcd.HashRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashKVRequest' -> + 'encode_msg_Etcd.HashKVRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashKVResponse' -> + 'encode_msg_Etcd.HashKVResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.HashResponse' -> + 'encode_msg_Etcd.HashResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.SnapshotRequest' -> + 'encode_msg_Etcd.SnapshotRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.SnapshotResponse' -> + 'encode_msg_Etcd.SnapshotResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.WatchRequest' -> + 'encode_msg_Etcd.WatchRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.WatchCreateRequest' -> + 'encode_msg_Etcd.WatchCreateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'encode_msg_Etcd.WatchCancelRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'encode_msg_Etcd.WatchProgressRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.WatchResponse' -> + 'encode_msg_Etcd.WatchResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'encode_msg_Etcd.LeaseGrantRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'encode_msg_Etcd.LeaseGrantResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'encode_msg_Etcd.LeaseRevokeRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'encode_msg_Etcd.LeaseRevokeResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'encode_msg_Etcd.LeaseCheckpoint'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'encode_msg_Etcd.LeaseCheckpointRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'encode_msg_Etcd.LeaseCheckpointResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'encode_msg_Etcd.LeaseKeepAliveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'encode_msg_Etcd.LeaseKeepAliveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'encode_msg_Etcd.LeaseTimeToLiveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'encode_msg_Etcd.LeaseTimeToLiveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'encode_msg_Etcd.LeaseLeasesRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LeaseStatus' -> + 'encode_msg_Etcd.LeaseStatus'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'encode_msg_Etcd.LeaseLeasesResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.Member' -> + 'encode_msg_Etcd.Member'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberAddRequest' -> + 'encode_msg_Etcd.MemberAddRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberAddResponse' -> + 'encode_msg_Etcd.MemberAddResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'encode_msg_Etcd.MemberRemoveRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'encode_msg_Etcd.MemberRemoveResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'encode_msg_Etcd.MemberUpdateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'encode_msg_Etcd.MemberUpdateResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberListRequest' -> + 'encode_msg_Etcd.MemberListRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MemberListResponse' -> + 'encode_msg_Etcd.MemberListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'encode_msg_Etcd.MemberPromoteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'encode_msg_Etcd.MemberPromoteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.DefragmentRequest' -> + 'encode_msg_Etcd.DefragmentRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.DefragmentResponse' -> + 'encode_msg_Etcd.DefragmentResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'encode_msg_Etcd.MoveLeaderRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'encode_msg_Etcd.MoveLeaderResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AlarmRequest' -> + 'encode_msg_Etcd.AlarmRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AlarmMember' -> + 'encode_msg_Etcd.AlarmMember'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AlarmResponse' -> + 'encode_msg_Etcd.AlarmResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.StatusRequest' -> + 'encode_msg_Etcd.StatusRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.StatusResponse' -> + 'encode_msg_Etcd.StatusResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AuthEnableRequest' -> + 'encode_msg_Etcd.AuthEnableRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'encode_msg_Etcd.AuthDisableRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'encode_msg_Etcd.AuthenticateRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'encode_msg_Etcd.AuthUserAddRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'encode_msg_Etcd.AuthUserGetRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'encode_msg_Etcd.AuthUserDeleteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'encode_msg_Etcd.AuthUserChangePasswordRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'encode_msg_Etcd.AuthUserGrantRoleRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'encode_msg_Etcd.AuthUserRevokeRoleRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'encode_msg_Etcd.AuthRoleAddRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'encode_msg_Etcd.AuthRoleGetRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'encode_msg_Etcd.AuthUserListRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'encode_msg_Etcd.AuthRoleListRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'encode_msg_Etcd.AuthRoleDeleteRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthEnableResponse' -> + 'encode_msg_Etcd.AuthEnableResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'encode_msg_Etcd.AuthDisableResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'encode_msg_Etcd.AuthenticateResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'encode_msg_Etcd.AuthUserAddResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'encode_msg_Etcd.AuthUserGetResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'encode_msg_Etcd.AuthUserDeleteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'encode_msg_Etcd.AuthUserChangePasswordResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'encode_msg_Etcd.AuthUserGrantRoleResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'encode_msg_Etcd.AuthUserRevokeRoleResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'encode_msg_Etcd.AuthRoleAddResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'encode_msg_Etcd.AuthRoleGetResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'encode_msg_Etcd.AuthRoleListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'encode_msg_Etcd.AuthUserListResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'encode_msg_Etcd.AuthRoleDeleteResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HealthCheckRequest' -> + 'encode_msg_Etcd.HealthCheckRequest'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'encode_msg_Etcd.HealthCheckResponse'(id(Msg, + TrUserData), + TrUserData); + 'Etcd.LockRequest' -> + 'encode_msg_Etcd.LockRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LockResponse' -> + 'encode_msg_Etcd.LockResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.UnlockRequest' -> + 'encode_msg_Etcd.UnlockRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.UnlockResponse' -> + 'encode_msg_Etcd.UnlockResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CampaignRequest' -> + 'encode_msg_Etcd.CampaignRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.CampaignResponse' -> + 'encode_msg_Etcd.CampaignResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderKey' -> + 'encode_msg_Etcd.LeaderKey'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderRequest' -> + 'encode_msg_Etcd.LeaderRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.LeaderResponse' -> + 'encode_msg_Etcd.LeaderResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResignRequest' -> + 'encode_msg_Etcd.ResignRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ResignResponse' -> + 'encode_msg_Etcd.ResignResponse'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ProclaimRequest' -> + 'encode_msg_Etcd.ProclaimRequest'(id(Msg, TrUserData), + TrUserData); + 'Etcd.ProclaimResponse' -> + 'encode_msg_Etcd.ProclaimResponse'(id(Msg, TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'encode_msg_google.protobuf.FileDescriptorSet'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'encode_msg_google.protobuf.FileDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'encode_msg_google.protobuf.DescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FileOptions' -> + 'encode_msg_google.protobuf.FileOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MessageOptions' -> + 'encode_msg_google.protobuf.MessageOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.FieldOptions' -> + 'encode_msg_google.protobuf.FieldOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumOptions' -> + 'encode_msg_google.protobuf.EnumOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'encode_msg_google.protobuf.EnumValueOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'encode_msg_google.protobuf.ServiceOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.MethodOptions' -> + 'encode_msg_google.protobuf.MethodOptions'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'encode_msg_google.protobuf.UninterpretedOption'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'encode_msg_google.protobuf.SourceCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(id(Msg, + TrUserData), + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(id(Msg, + TrUserData), + TrUserData); + 'mvccpb.KeyValue' -> + 'encode_msg_mvccpb.KeyValue'(id(Msg, TrUserData), + TrUserData); + 'mvccpb.Event' -> + 'encode_msg_mvccpb.Event'(id(Msg, TrUserData), + TrUserData); + 'authpb.UserAddOptions' -> + 'encode_msg_authpb.UserAddOptions'(id(Msg, TrUserData), + TrUserData); + 'authpb.User' -> + 'encode_msg_authpb.User'(id(Msg, TrUserData), + TrUserData); + 'authpb.Permission' -> + 'encode_msg_authpb.Permission'(id(Msg, TrUserData), + TrUserData); + 'authpb.Role' -> + 'encode_msg_authpb.Role'(id(Msg, TrUserData), + TrUserData) + end. + + +'encode_msg_Etcd.ResponseHeader'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResponseHeader'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{cluster_id := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{member_id := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{raft_term := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.RangeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.RangeRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RangeRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{limit := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{revision := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{sort_order := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 'NONE'; TrF5 =:= 0 -> B4; + true -> + 'e_enum_Etcd.RangeRequest.SortOrder'(TrF5, + <>, + TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{sort_target := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 'KEY'; TrF6 =:= 0 -> B5; + true -> + 'e_enum_Etcd.RangeRequest.SortTarget'(TrF6, + <>, + TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{serializable := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= false -> B6; + true -> e_type_bool(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + B8 = case M of + #{keys_only := F8} -> + begin + TrF8 = id(F8, TrUserData), + if TrF8 =:= false -> B7; + true -> e_type_bool(TrF8, <>, TrUserData) + end + end; + _ -> B7 + end, + B9 = case M of + #{count_only := F9} -> + begin + TrF9 = id(F9, TrUserData), + if TrF9 =:= false -> B8; + true -> e_type_bool(TrF9, <>, TrUserData) + end + end; + _ -> B8 + end, + B10 = case M of + #{min_mod_revision := F10} -> + begin + TrF10 = id(F10, TrUserData), + if TrF10 =:= 0 -> B9; + true -> + e_type_int64(TrF10, <>, TrUserData) + end + end; + _ -> B9 + end, + B11 = case M of + #{max_mod_revision := F11} -> + begin + TrF11 = id(F11, TrUserData), + if TrF11 =:= 0 -> B10; + true -> + e_type_int64(TrF11, <>, TrUserData) + end + end; + _ -> B10 + end, + B12 = case M of + #{min_create_revision := F12} -> + begin + TrF12 = id(F12, TrUserData), + if TrF12 =:= 0 -> B11; + true -> + e_type_int64(TrF12, <>, TrUserData) + end + end; + _ -> B11 + end, + case M of + #{max_create_revision := F13} -> + begin + TrF13 = id(F13, TrUserData), + if TrF13 =:= 0 -> B12; + true -> + e_type_int64(TrF13, <>, TrUserData) + end + end; + _ -> B12 + end. + +'encode_msg_Etcd.RangeResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.RangeResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RangeResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.RangeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kvs := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.RangeResponse_kvs'(TrF2, B1, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{more := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{count := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.PutRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.PutRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.PutRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{lease := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{prev_kv := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{ignore_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= false -> B4; + true -> e_type_bool(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{ignore_lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= false -> B5; + true -> e_type_bool(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_Etcd.PutResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.PutResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.PutResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.PutResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{prev_kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.PutResponse_prev_kv'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.DeleteRangeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.DeleteRangeRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DeleteRangeRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.DeleteRangeResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.DeleteRangeResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DeleteRangeResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.DeleteRangeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{deleted := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kvs := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.DeleteRangeResponse_prev_kvs'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.RequestOp'(Msg, TrUserData) -> + 'encode_msg_Etcd.RequestOp'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.RequestOp'(#{} = M, Bin, TrUserData) -> + case M of + #{request := F1} -> + case id(F1, TrUserData) of + {request_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_range'(TrTF1, + <>, + TrUserData) + end; + {request_put, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_put'(TrTF1, + <>, + TrUserData) + end; + {request_delete_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_delete_range'(TrTF1, + <>, + TrUserData) + end; + {request_txn, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.RequestOp_request_txn'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ResponseOp'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResponseOp'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResponseOp'(#{} = M, Bin, + TrUserData) -> + case M of + #{response := F1} -> + case id(F1, TrUserData) of + {response_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_range'(TrTF1, + <>, + TrUserData) + end; + {response_put, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_put'(TrTF1, + <>, + TrUserData) + end; + {response_delete_range, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_delete_range'(TrTF1, + <>, + TrUserData) + end; + {response_txn, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.ResponseOp_response_txn'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.Compare'(Msg, TrUserData) -> + 'encode_msg_Etcd.Compare'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.Compare'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{result := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'EQUAL'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.Compare.CompareResult'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{target := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 'VERSION'; TrF2 =:= 0 -> B1; + true -> + 'e_enum_Etcd.Compare.CompareTarget'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{key := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{target_union := F4} -> + case id(F4, TrUserData) of + {version, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {create_revision, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {mod_revision, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end; + {value, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_bytes(TrTF4, <>, TrUserData) + end; + {lease, TF4} -> + begin + TrTF4 = id(TF4, TrUserData), + e_type_int64(TrTF4, <>, TrUserData) + end + end; + _ -> B3 + end, + case M of + #{range_end := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> + e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end. + +'encode_msg_Etcd.TxnRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.TxnRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.TxnRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{compare := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.TxnRequest_compare'(TrF1, Bin, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{success := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.TxnRequest_success'(TrF2, B1, TrUserData) + end; + _ -> B1 + end, + case M of + #{failure := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.TxnRequest_failure'(TrF3, B2, TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.TxnResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.TxnResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.TxnResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.TxnResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{succeeded := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{responses := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.TxnResponse_responses'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.CompactionRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.CompactionRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CompactionRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{revision := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{physical := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.CompactionResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.CompactionResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CompactionResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.CompactionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HashRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.HashKVRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashKVRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashKVRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{revision := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HashKVResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashKVResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashKVResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.HashKVResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{hash := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{compact_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.HashResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.HashResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.HashResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.HashResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{hash := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.SnapshotRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.SnapshotResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.SnapshotResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.SnapshotResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.SnapshotResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{remaining_bytes := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{blob := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.WatchRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.WatchRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{request_union := F1} -> + case id(F1, TrUserData) of + {create_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_create_request'(TrTF1, + <>, + TrUserData) + end; + {cancel_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_cancel_request'(TrTF1, + <>, + TrUserData) + end; + {progress_request, TF1} -> + begin + TrTF1 = id(TF1, TrUserData), + 'e_mfield_Etcd.WatchRequest_progress_request'(TrTF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.WatchCreateRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchCreateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.WatchCreateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{range_end := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{start_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{progress_notify := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{filters := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_Etcd.WatchCreateRequest_filters'(TrF5, B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{prev_kv := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= false -> B5; + true -> e_type_bool(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{watch_id := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= 0 -> B6; + true -> + e_type_int64(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + case M of + #{fragment := F8} -> + begin + TrF8 = id(F8, TrUserData), + if TrF8 =:= false -> B7; + true -> e_type_bool(TrF8, <>, TrUserData) + end + end; + _ -> B7 + end. + +'encode_msg_Etcd.WatchCancelRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchCancelRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.WatchCancelRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{watch_id := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.WatchProgressRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.WatchResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.WatchResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.WatchResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.WatchResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{watch_id := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{created := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= false -> B2; + true -> e_type_bool(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{canceled := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= false -> B3; + true -> e_type_bool(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{compact_revision := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 0 -> B4; + true -> + e_type_int64(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{cancel_reason := F6} -> + begin + TrF6 = id(F6, TrUserData), + case is_empty_string(TrF6) of + true -> B5; + false -> + e_type_string(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{fragment := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= false -> B6; + true -> e_type_bool(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + case M of + #{events := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_Etcd.WatchResponse_events'(TrF8, B7, + TrUserData) + end; + _ -> B7 + end. + +'encode_msg_Etcd.LeaseGrantRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseGrantRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseGrantRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'TTL' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseGrantResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseGrantResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseGrantResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseGrantResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{error := F4} -> + begin + TrF4 = id(F4, TrUserData), + case is_empty_string(TrF4) of + true -> B3; + false -> + e_type_string(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.LeaseRevokeRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseRevokeRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseRevokeRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseRevokeResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseRevokeResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseRevokeResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseRevokeResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseCheckpoint'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpoint'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpoint'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{remaining_TTL := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseCheckpointRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpointRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpointRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{checkpoints := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.LeaseCheckpointRequest_checkpoints'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseCheckpointResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseCheckpointResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseCheckpointResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseCheckpointResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseKeepAliveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseKeepAliveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseKeepAliveRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseKeepAliveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseKeepAliveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseKeepAliveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseKeepAliveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.LeaseTimeToLiveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseTimeToLiveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseTimeToLiveRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keys := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaseTimeToLiveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseTimeToLiveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseTimeToLiveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseTimeToLiveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{'ID' := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{'TTL' := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{grantedTTL := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + case M of + #{keys := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_Etcd.LeaseTimeToLiveResponse_keys'(TrF5, B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_Etcd.LeaseLeasesRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.LeaseStatus'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaseStatus'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaseStatus'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> + e_type_int64(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaseLeasesResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.LeaseLeasesResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.LeaseLeasesResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaseLeasesResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{leases := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.LeaseLeasesResponse_leases'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.Member'(Msg, TrUserData) -> + 'encode_msg_Etcd.Member'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.Member'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{name := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{peerURLs := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.Member_peerURLs'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{clientURLs := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_Etcd.Member_clientURLs'(TrF4, B3, TrUserData) + end; + _ -> B3 + end, + case M of + #{isLearner := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= false -> B4; + true -> e_type_bool(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end. + +'encode_msg_Etcd.MemberAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberAddRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{peerURLs := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_Etcd.MemberAddRequest_peerURLs'(TrF1, Bin, + TrUserData) + end; + _ -> Bin + end, + case M of + #{isLearner := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= false -> B1; + true -> e_type_bool(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberAddResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberAddResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{member := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.MemberAddResponse_member'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{members := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_Etcd.MemberAddResponse_members'(TrF3, B2, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_Etcd.MemberRemoveRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberRemoveRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberRemoveRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MemberRemoveResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberRemoveResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberRemoveResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberRemoveResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberRemoveResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberUpdateRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberUpdateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberUpdateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{peerURLs := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberUpdateRequest_peerURLs'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberUpdateResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberUpdateResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberUpdateResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberUpdateResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberUpdateResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.MemberListResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MemberListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberListResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.MemberPromoteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberPromoteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberPromoteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{'ID' := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MemberPromoteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.MemberPromoteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MemberPromoteResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MemberPromoteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{members := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.MemberPromoteResponse_members'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.DefragmentRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.DefragmentResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.DefragmentResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.DefragmentResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.DefragmentResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MoveLeaderRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.MoveLeaderRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MoveLeaderRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{targetID := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.MoveLeaderResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.MoveLeaderResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.MoveLeaderResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.MoveLeaderResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AlarmRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{action := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'GET'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.AlarmRequest.AlarmAction'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{memberID := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{alarm := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 'NONE'; TrF3 =:= 0 -> B2; + true -> + 'e_enum_Etcd.AlarmType'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AlarmMember'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmMember'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmMember'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{memberID := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{alarm := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 'NONE'; TrF2 =:= 0 -> B1; + true -> + 'e_enum_Etcd.AlarmType'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AlarmResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.AlarmResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.AlarmResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AlarmResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{alarms := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AlarmResponse_alarms'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.StatusRequest'(_Msg, _TrUserData) -> + <<>>. + +'encode_msg_Etcd.StatusResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.StatusResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.StatusResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.StatusResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{version := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{dbSize := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{leader := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{raftIndex := F5} -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 0 -> B4; + true -> e_varint(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + B6 = case M of + #{raftTerm := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> e_varint(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end, + B7 = case M of + #{raftAppliedIndex := F7} -> + begin + TrF7 = id(F7, TrUserData), + if TrF7 =:= 0 -> B6; + true -> e_varint(TrF7, <>, TrUserData) + end + end; + _ -> B6 + end, + B8 = case M of + #{errors := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_Etcd.StatusResponse_errors'(TrF8, B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{dbSizeInUse := F9} -> + begin + TrF9 = id(F9, TrUserData), + if TrF9 =:= 0 -> B8; + true -> + e_type_int64(TrF9, <>, TrUserData) + end + end; + _ -> B8 + end, + case M of + #{isLearner := F10} -> + begin + TrF10 = id(F10, TrUserData), + if TrF10 =:= false -> B9; + true -> + e_type_bool(TrF10, <>, TrUserData) + end + end; + _ -> B9 + end. + +'encode_msg_Etcd.AuthEnableRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthDisableRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthenticateRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthenticateRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthenticateRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthUserAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserAddRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_Etcd.AuthUserAddRequest_options'(TrF3, + <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AuthUserGetRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthUserGetRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGetRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserDeleteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserDeleteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserDeleteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthUserChangePasswordRequest'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserGrantRoleRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGrantRoleRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGrantRoleRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{user := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{role := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserRevokeRoleRequest'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{role := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleAddRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthRoleAddRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleAddRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGetRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthRoleGetRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleGetRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthRoleListRequest'(_Msg, + _TrUserData) -> + <<>>. + +'encode_msg_Etcd.AuthRoleDeleteRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleDeleteRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleDeleteRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleGrantPermissionRequest'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{perm := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.AuthRoleGrantPermissionRequest_perm'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleRevokePermissionRequest'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{role := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.AuthEnableResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.AuthEnableResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthEnableResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthEnableResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthDisableResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthDisableResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthDisableResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthDisableResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthenticateResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthenticateResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthenticateResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthenticateResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{token := F2} -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> + e_type_string(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserAddResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserAddResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserGetResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGetResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGetResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserGetResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{roles := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthUserGetResponse_roles'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserDeleteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserDeleteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserDeleteResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserDeleteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthUserChangePasswordResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserChangePasswordResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserGrantRoleResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserGrantRoleResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserGrantRoleResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserGrantRoleResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserRevokeRoleResponse'(#{} = M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserRevokeRoleResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleAddResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleAddResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleAddResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleAddResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGetResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGetResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleGetResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleGetResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{perm := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthRoleGetResponse_perm'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleListResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{roles := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthRoleListResponse_roles'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthUserListResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthUserListResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthUserListResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthUserListResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{users := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_Etcd.AuthUserListResponse_users'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_Etcd.AuthRoleDeleteResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleDeleteResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.AuthRoleDeleteResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleDeleteResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleGrantPermissionResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleGrantPermissionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + <<>>, TrUserData). + + +'encode_msg_Etcd.AuthRoleRevokePermissionResponse'(#{} = + M, + Bin, TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.AuthRoleRevokePermissionResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HealthCheckRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.HealthCheckRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.HealthCheckRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{service := F1} -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> + e_type_string(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.HealthCheckResponse'(Msg, + TrUserData) -> + 'encode_msg_Etcd.HealthCheckResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.HealthCheckResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{status := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'UNKNOWN'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_Etcd.HealthCheckResponse.ServingStatus'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LockRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LockRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LockRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{lease := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LockResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LockResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LockResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LockResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.UnlockRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.UnlockRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.UnlockRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.UnlockResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.UnlockResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.UnlockResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.UnlockResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.CampaignRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.CampaignRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CampaignRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{lease := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{value := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_Etcd.CampaignResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.CampaignResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.CampaignResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.CampaignResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{leader := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.CampaignResponse_leader'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.LeaderKey'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderKey'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{rev := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + case M of + #{lease := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_Etcd.LeaderRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.LeaderResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.LeaderResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.LeaderResponse'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.LeaderResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_Etcd.LeaderResponse_kv'(TrF2, + <>, + TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.ResignRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResignRequest'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResignRequest'(#{} = M, Bin, + TrUserData) -> + case M of + #{leader := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ResignRequest_leader'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ResignResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.ResignResponse'(Msg, <<>>, TrUserData). + + +'encode_msg_Etcd.ResignResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ResignResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_Etcd.ProclaimRequest'(Msg, TrUserData) -> + 'encode_msg_Etcd.ProclaimRequest'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.ProclaimRequest'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{leader := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ProclaimRequest_leader'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end, + case M of + #{value := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end. + +'encode_msg_Etcd.ProclaimResponse'(Msg, TrUserData) -> + 'encode_msg_Etcd.ProclaimResponse'(Msg, <<>>, + TrUserData). + + +'encode_msg_Etcd.ProclaimResponse'(#{} = M, Bin, + TrUserData) -> + case M of + #{header := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= undefined -> Bin; + true -> + 'e_mfield_Etcd.ProclaimResponse_header'(TrF1, + <>, + TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorSet'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorSet'(#{} = M, + Bin, TrUserData) -> + case M of + #{file := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.FileDescriptorSet_file'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FileDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{package := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{dependency := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.FileDescriptorProto_dependency'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{public_dependency := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{weak_dependency := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{message_type := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.FileDescriptorProto_message_type'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{enum_type := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{service := F8} -> + TrF8 = id(F8, TrUserData), + if TrF8 == [] -> B7; + true -> + 'e_field_google.protobuf.FileDescriptorProto_service'(TrF8, + B7, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{extension := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.FileDescriptorProto_extension'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{source_code_info := F11} -> + begin + TrF11 = id(F11, TrUserData), + 'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(TrF11, + <>, + TrUserData) + end; + _ -> B10 + end, + case M of + #{syntax := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, TrUserData) + end; + _ -> B11 + end. + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{start := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_int32(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{'end' := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.DescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.DescriptorProto'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{field := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.DescriptorProto_field'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{extension := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.DescriptorProto_extension'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{nested_type := F4} -> + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> + 'e_field_google.protobuf.DescriptorProto_nested_type'(TrF4, + B3, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{enum_type := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.DescriptorProto_enum_type'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extension_range := F6} -> + TrF6 = id(F6, TrUserData), + if TrF6 == [] -> B5; + true -> + 'e_field_google.protobuf.DescriptorProto_extension_range'(TrF6, + B5, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{oneof_decl := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{options := F8} -> + begin + TrF8 = id(F8, TrUserData), + 'e_mfield_google.protobuf.DescriptorProto_options'(TrF8, + <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{reserved_range := F9} -> + TrF9 = id(F9, TrUserData), + if TrF9 == [] -> B8; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_range'(TrF9, + B8, + TrUserData) + end; + _ -> B8 + end, + case M of + #{reserved_name := F10} -> + TrF10 = id(F10, TrUserData), + if TrF10 == [] -> B9; + true -> + 'e_field_google.protobuf.DescriptorProto_reserved_name'(TrF10, + B9, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.FieldDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{label := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Label'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{type := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_enum_google.protobuf.FieldDescriptorProto.Type'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{type_name := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_string(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{extendee := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_string(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{default_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{oneof_index := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_int32(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{json_name := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_string(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + case M of + #{options := F10} -> + begin + TrF10 = id(F10, TrUserData), + 'e_mfield_google.protobuf.FieldDescriptorProto_options'(TrF10, + <>, + TrUserData) + end; + _ -> B9 + end. + +'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.OneofDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{value := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumDescriptorProto_value'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{number := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_int32(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.ServiceDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{method := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceDescriptorProto_method'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{options := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_mfield_google.protobuf.ServiceDescriptorProto_options'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.MethodDescriptorProto'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{input_type := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{output_type := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + 'e_mfield_google.protobuf.MethodDescriptorProto_options'(TrF4, + <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{client_streaming := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + case M of + #{server_streaming := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end. + +'encode_msg_google.protobuf.FileOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FileOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FileOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{java_package := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{java_outer_classname := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{java_multiple_files := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{java_generate_equals_and_hash := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{java_string_check_utf8 := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{optimize_for := F6} -> + begin + TrF6 = id(F6, TrUserData), + 'e_enum_google.protobuf.FileOptions.OptimizeMode'(TrF6, + <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{go_package := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{cc_generic_services := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{java_generic_services := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{py_generic_services := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{deprecated := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{cc_enable_arenas := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{objc_class_prefix := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{csharp_namespace := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{javanano_use_deprecated_package := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{uninterpreted_option := F16} -> + TrF16 = id(F16, TrUserData), + if TrF16 == [] -> B15; + true -> + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(TrF16, + B15, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{goproto_getters_all := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{goproto_enum_prefix_all := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{goproto_stringer_all := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{verbose_equal_all := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{face_all := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{gostring_all := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{populate_all := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{stringer_all := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{onlyone_all := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{equal_all := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + B27 = case M of + #{description_all := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end, + B28 = case M of + #{testgen_all := F28} -> + begin + TrF28 = id(F28, TrUserData), + e_type_bool(TrF28, <>, + TrUserData) + end; + _ -> B27 + end, + B29 = case M of + #{benchgen_all := F29} -> + begin + TrF29 = id(F29, TrUserData), + e_type_bool(TrF29, <>, + TrUserData) + end; + _ -> B28 + end, + B30 = case M of + #{marshaler_all := F30} -> + begin + TrF30 = id(F30, TrUserData), + e_type_bool(TrF30, <>, + TrUserData) + end; + _ -> B29 + end, + B31 = case M of + #{unmarshaler_all := F31} -> + begin + TrF31 = id(F31, TrUserData), + e_type_bool(TrF31, <>, + TrUserData) + end; + _ -> B30 + end, + B32 = case M of + #{stable_marshaler_all := F32} -> + begin + TrF32 = id(F32, TrUserData), + e_type_bool(TrF32, <>, + TrUserData) + end; + _ -> B31 + end, + B33 = case M of + #{sizer_all := F33} -> + begin + TrF33 = id(F33, TrUserData), + e_type_bool(TrF33, <>, + TrUserData) + end; + _ -> B32 + end, + B34 = case M of + #{goproto_enum_stringer_all := F34} -> + begin + TrF34 = id(F34, TrUserData), + e_type_bool(TrF34, <>, + TrUserData) + end; + _ -> B33 + end, + B35 = case M of + #{enum_stringer_all := F35} -> + begin + TrF35 = id(F35, TrUserData), + e_type_bool(TrF35, <>, + TrUserData) + end; + _ -> B34 + end, + B36 = case M of + #{unsafe_marshaler_all := F36} -> + begin + TrF36 = id(F36, TrUserData), + e_type_bool(TrF36, <>, + TrUserData) + end; + _ -> B35 + end, + B37 = case M of + #{unsafe_unmarshaler_all := F37} -> + begin + TrF37 = id(F37, TrUserData), + e_type_bool(TrF37, <>, + TrUserData) + end; + _ -> B36 + end, + B38 = case M of + #{goproto_extensions_map_all := F38} -> + begin + TrF38 = id(F38, TrUserData), + e_type_bool(TrF38, <>, + TrUserData) + end; + _ -> B37 + end, + B39 = case M of + #{goproto_unrecognized_all := F39} -> + begin + TrF39 = id(F39, TrUserData), + e_type_bool(TrF39, <>, + TrUserData) + end; + _ -> B38 + end, + B40 = case M of + #{gogoproto_import := F40} -> + begin + TrF40 = id(F40, TrUserData), + e_type_bool(TrF40, <>, + TrUserData) + end; + _ -> B39 + end, + B41 = case M of + #{protosizer_all := F41} -> + begin + TrF41 = id(F41, TrUserData), + e_type_bool(TrF41, <>, + TrUserData) + end; + _ -> B40 + end, + case M of + #{compare_all := F42} -> + begin + TrF42 = id(F42, TrUserData), + e_type_bool(TrF42, <>, + TrUserData) + end; + _ -> B41 + end. + +'encode_msg_google.protobuf.MessageOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MessageOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{message_set_wire_format := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{no_standard_descriptor_accessor := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{deprecated := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_bool(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{map_entry := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{uninterpreted_option := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{goproto_getters := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{goproto_stringer := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_bool(TrF7, <>, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{verbose_equal := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{face := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{gostring := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_bool(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{populate := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_bool(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{stringer := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_bool(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{onlyone := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_bool(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{equal := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_bool(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{description := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_bool(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{testgen := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_bool(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{benchgen := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + B18 = case M of + #{marshaler := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end, + B19 = case M of + #{unmarshaler := F19} -> + begin + TrF19 = id(F19, TrUserData), + e_type_bool(TrF19, <>, + TrUserData) + end; + _ -> B18 + end, + B20 = case M of + #{stable_marshaler := F20} -> + begin + TrF20 = id(F20, TrUserData), + e_type_bool(TrF20, <>, + TrUserData) + end; + _ -> B19 + end, + B21 = case M of + #{sizer := F21} -> + begin + TrF21 = id(F21, TrUserData), + e_type_bool(TrF21, <>, + TrUserData) + end; + _ -> B20 + end, + B22 = case M of + #{unsafe_marshaler := F22} -> + begin + TrF22 = id(F22, TrUserData), + e_type_bool(TrF22, <>, + TrUserData) + end; + _ -> B21 + end, + B23 = case M of + #{unsafe_unmarshaler := F23} -> + begin + TrF23 = id(F23, TrUserData), + e_type_bool(TrF23, <>, + TrUserData) + end; + _ -> B22 + end, + B24 = case M of + #{goproto_extensions_map := F24} -> + begin + TrF24 = id(F24, TrUserData), + e_type_bool(TrF24, <>, + TrUserData) + end; + _ -> B23 + end, + B25 = case M of + #{goproto_unrecognized := F25} -> + begin + TrF25 = id(F25, TrUserData), + e_type_bool(TrF25, <>, + TrUserData) + end; + _ -> B24 + end, + B26 = case M of + #{protosizer := F26} -> + begin + TrF26 = id(F26, TrUserData), + e_type_bool(TrF26, <>, + TrUserData) + end; + _ -> B25 + end, + case M of + #{compare := F27} -> + begin + TrF27 = id(F27, TrUserData), + e_type_bool(TrF27, <>, + TrUserData) + end; + _ -> B26 + end. + +'encode_msg_google.protobuf.FieldOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.FieldOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.FieldOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{ctype := F1} -> + begin + TrF1 = id(F1, TrUserData), + 'e_enum_google.protobuf.FieldOptions.CType'(TrF1, + <>, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{packed := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{jstype := F3} -> + begin + TrF3 = id(F3, TrUserData), + 'e_enum_google.protobuf.FieldOptions.JSType'(TrF3, + <>, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{lazy := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{deprecated := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{weak := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + B7 = case M of + #{uninterpreted_option := F7} -> + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(TrF7, + B6, + TrUserData) + end; + _ -> B6 + end, + B8 = case M of + #{nullable := F8} -> + begin + TrF8 = id(F8, TrUserData), + e_type_bool(TrF8, <>, + TrUserData) + end; + _ -> B7 + end, + B9 = case M of + #{embed := F9} -> + begin + TrF9 = id(F9, TrUserData), + e_type_bool(TrF9, <>, + TrUserData) + end; + _ -> B8 + end, + B10 = case M of + #{customtype := F10} -> + begin + TrF10 = id(F10, TrUserData), + e_type_string(TrF10, <>, + TrUserData) + end; + _ -> B9 + end, + B11 = case M of + #{customname := F11} -> + begin + TrF11 = id(F11, TrUserData), + e_type_string(TrF11, <>, + TrUserData) + end; + _ -> B10 + end, + B12 = case M of + #{jsontag := F12} -> + begin + TrF12 = id(F12, TrUserData), + e_type_string(TrF12, <>, + TrUserData) + end; + _ -> B11 + end, + B13 = case M of + #{moretags := F13} -> + begin + TrF13 = id(F13, TrUserData), + e_type_string(TrF13, <>, + TrUserData) + end; + _ -> B12 + end, + B14 = case M of + #{casttype := F14} -> + begin + TrF14 = id(F14, TrUserData), + e_type_string(TrF14, <>, + TrUserData) + end; + _ -> B13 + end, + B15 = case M of + #{castkey := F15} -> + begin + TrF15 = id(F15, TrUserData), + e_type_string(TrF15, <>, + TrUserData) + end; + _ -> B14 + end, + B16 = case M of + #{castvalue := F16} -> + begin + TrF16 = id(F16, TrUserData), + e_type_string(TrF16, <>, + TrUserData) + end; + _ -> B15 + end, + B17 = case M of + #{stdtime := F17} -> + begin + TrF17 = id(F17, TrUserData), + e_type_bool(TrF17, <>, + TrUserData) + end; + _ -> B16 + end, + case M of + #{stdduration := F18} -> + begin + TrF18 = id(F18, TrUserData), + e_type_bool(TrF18, <>, + TrUserData) + end; + _ -> B17 + end. + +'encode_msg_google.protobuf.EnumOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{allow_alias := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{deprecated := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{uninterpreted_option := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(TrF3, + B2, + TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{goproto_enum_prefix := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_bool(TrF4, <>, + TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{goproto_enum_stringer := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_bool(TrF5, <>, + TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{enum_stringer := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bool(TrF6, <>, + TrUserData) + end; + _ -> B5 + end, + case M of + #{enum_customname := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, + TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.EnumValueOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.EnumValueOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + case M of + #{enumvalue_customname := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, + TrUserData) + end; + _ -> B2 + end. + +'encode_msg_google.protobuf.ServiceOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.ServiceOptions'(#{} = M, + Bin, TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.MethodOptions'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.MethodOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.MethodOptions'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{deprecated := F1} -> + begin + TrF1 = id(F1, TrUserData), + e_type_bool(TrF1, <>, TrUserData) + end; + _ -> Bin + end, + case M of + #{uninterpreted_option := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end. + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2}, + Bin, TrUserData) -> + B1 = begin + TrF1 = id(F1, TrUserData), + e_type_string(TrF1, <>, TrUserData) + end, + begin + TrF2 = id(F2, TrUserData), + e_type_bool(TrF2, <>, TrUserData) + end. + +'encode_msg_google.protobuf.UninterpretedOption'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.UninterpretedOption'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.UninterpretedOption_name'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{identifier_value := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{positive_int_value := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_varint(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{negative_int_value := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int64(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + B5 = case M of + #{double_value := F5} -> + begin + TrF5 = id(F5, TrUserData), + e_type_double(TrF5, <>, TrUserData) + end; + _ -> B4 + end, + B6 = case M of + #{string_value := F6} -> + begin + TrF6 = id(F6, TrUserData), + e_type_bytes(TrF6, <>, TrUserData) + end; + _ -> B5 + end, + case M of + #{aggregate_value := F7} -> + begin + TrF7 = id(F7, TrUserData), + e_type_string(TrF7, <>, TrUserData) + end; + _ -> B6 + end. + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo.Location'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{span := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_span'(TrF2, + B1, + TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{leading_comments := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_string(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + B4 = case M of + #{trailing_comments := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_string(TrF4, <>, TrUserData) + end; + _ -> B3 + end, + case M of + #{leading_detached_comments := F5} -> + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(TrF5, + B4, + TrUserData) + end; + _ -> B4 + end. + +'encode_msg_google.protobuf.SourceCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData). + + +'encode_msg_google.protobuf.SourceCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{location := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.SourceCodeInfo_location'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Bin, TrUserData) -> + B1 = case M of + #{path := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end, + B2 = case M of + #{source_file := F2} -> + begin + TrF2 = id(F2, TrUserData), + e_type_string(TrF2, <>, TrUserData) + end; + _ -> B1 + end, + B3 = case M of + #{'begin' := F3} -> + begin + TrF3 = id(F3, TrUserData), + e_type_int32(TrF3, <>, TrUserData) + end; + _ -> B2 + end, + case M of + #{'end' := F4} -> + begin + TrF4 = id(F4, TrUserData), + e_type_int32(TrF4, <>, TrUserData) + end; + _ -> B3 + end. + +'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + TrUserData) -> + 'encode_msg_google.protobuf.GeneratedCodeInfo'(Msg, + <<>>, TrUserData). + + +'encode_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, + Bin, TrUserData) -> + case M of + #{annotation := F1} -> + TrF1 = id(F1, TrUserData), + if TrF1 == [] -> Bin; + true -> + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(TrF1, + Bin, + TrUserData) + end; + _ -> Bin + end. + +'encode_msg_mvccpb.KeyValue'(Msg, TrUserData) -> + 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.KeyValue'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{key := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{create_revision := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> + e_type_int64(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{mod_revision := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> + e_type_int64(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end, + B4 = case M of + #{version := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> + e_type_int64(TrF4, <>, TrUserData) + end + end; + _ -> B3 + end, + B5 = case M of + #{value := F5} -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> e_type_bytes(TrF5, <>, TrUserData) + end + end; + _ -> B4 + end, + case M of + #{lease := F6} -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> + e_type_int64(TrF6, <>, TrUserData) + end + end; + _ -> B5 + end. + +'encode_msg_mvccpb.Event'(Msg, TrUserData) -> + 'encode_msg_mvccpb.Event'(Msg, <<>>, TrUserData). + + +'encode_msg_mvccpb.Event'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{type := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'PUT'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_mvccpb.Event.EventType'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{kv := F2} -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= undefined -> B1; + true -> + 'e_mfield_mvccpb.Event_kv'(TrF2, <>, + TrUserData) + end + end; + _ -> B1 + end, + case M of + #{prev_kv := F3} -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= undefined -> B2; + true -> + 'e_mfield_mvccpb.Event_prev_kv'(TrF3, <>, + TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.UserAddOptions'(Msg, TrUserData) -> + 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData). + + +'encode_msg_authpb.UserAddOptions'(#{} = M, Bin, + TrUserData) -> + case M of + #{no_password := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end. + +'encode_msg_authpb.User'(Msg, TrUserData) -> + 'encode_msg_authpb.User'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.User'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{password := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + B3 = case M of + #{roles := F3} -> + TrF3 = id(F3, TrUserData), + if TrF3 == [] -> B2; + true -> + 'e_field_authpb.User_roles'(TrF3, B2, TrUserData) + end; + _ -> B2 + end, + case M of + #{options := F4} -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= undefined -> B3; + true -> + 'e_mfield_authpb.User_options'(TrF4, <>, + TrUserData) + end + end; + _ -> B3 + end. + +'encode_msg_authpb.Permission'(Msg, TrUserData) -> + 'encode_msg_authpb.Permission'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Permission'(#{} = M, Bin, + TrUserData) -> + B1 = case M of + #{permType := F1} -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 'READ'; TrF1 =:= 0 -> Bin; + true -> + 'e_enum_authpb.Permission.Type'(TrF1, <>, + TrUserData) + end + end; + _ -> Bin + end, + B2 = case M of + #{key := F2} -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end; + _ -> B1 + end, + case M of + #{range_end := F3} -> + begin + TrF3 = id(F3, TrUserData), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end; + _ -> B2 + end. + +'encode_msg_authpb.Role'(Msg, TrUserData) -> + 'encode_msg_authpb.Role'(Msg, <<>>, TrUserData). + + +'encode_msg_authpb.Role'(#{} = M, Bin, TrUserData) -> + B1 = case M of + #{name := F1} -> + begin + TrF1 = id(F1, TrUserData), + case iolist_size(TrF1) of + 0 -> Bin; + _ -> e_type_bytes(TrF1, <>, TrUserData) + end + end; + _ -> Bin + end, + case M of + #{keyPermission := F2} -> + TrF2 = id(F2, TrUserData), + if TrF2 == [] -> B1; + true -> + 'e_field_authpb.Role_keyPermission'(TrF2, B1, + TrUserData) + end; + _ -> B1 + end. + +'e_mfield_Etcd.RangeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RangeResponse_kvs'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.RangeResponse_kvs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.RangeResponse_kvs'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.RangeResponse_kvs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.RangeResponse_kvs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.PutResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.PutResponse_prev_kv'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.DeleteRangeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.DeleteRangeResponse_prev_kvs'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.DeleteRangeResponse_prev_kvs'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.DeleteRangeResponse_prev_kvs'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.DeleteRangeResponse_prev_kvs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.RequestOp_request_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RangeRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_put'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.PutRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_delete_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.DeleteRangeRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.RequestOp_request_txn'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.TxnRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_range'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RangeResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_put'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.PutResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_delete_range'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.DeleteRangeResponse'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResponseOp_response_txn'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.TxnResponse'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.TxnRequest_compare'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Compare'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_compare'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_compare'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_compare'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_compare'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnRequest_success'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RequestOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_success'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_success'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_success'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_success'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnRequest_failure'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.RequestOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnRequest_failure'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnRequest_failure'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnRequest_failure'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnRequest_failure'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.TxnResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.TxnResponse_responses'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseOp'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.TxnResponse_responses'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.TxnResponse_responses'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.TxnResponse_responses'(Rest, Bin3, + TrUserData); +'e_field_Etcd.TxnResponse_responses'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.CompactionResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.HashKVResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.HashResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.SnapshotResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_create_request'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.WatchCreateRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_cancel_request'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.WatchCancelRequest'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchRequest_progress_request'(_Msg, Bin, + _TrUserData) -> + <>. + +'e_field_Etcd.WatchCreateRequest_filters'(Elems, Bin, + TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_Etcd.WatchCreateRequest_filters'(Elems, <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_Etcd.WatchCreateRequest_filters'([], Bin, + _TrUserData) -> + Bin. + +'e_pfield_Etcd.WatchCreateRequest_filters'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = + 'e_enum_Etcd.WatchCreateRequest.FilterType'(id(Value, + TrUserData), + Bin, TrUserData), + 'e_pfield_Etcd.WatchCreateRequest_filters'(Rest, Bin2, + TrUserData); +'e_pfield_Etcd.WatchCreateRequest_filters'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.WatchResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.WatchResponse_events'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.Event'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.WatchResponse_events'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.WatchResponse_events'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.WatchResponse_events'(Rest, Bin3, + TrUserData); +'e_field_Etcd.WatchResponse_events'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseGrantResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseRevokeResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseCheckpointRequest_checkpoints'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaseCheckpoint'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseCheckpointRequest_checkpoints'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.LeaseCheckpointRequest_checkpoints'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + Bin3, TrUserData); +'e_field_Etcd.LeaseCheckpointRequest_checkpoints'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseCheckpointResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseKeepAliveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseTimeToLiveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseTimeToLiveResponse_keys'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, Bin3, + TrUserData); +'e_field_Etcd.LeaseTimeToLiveResponse_keys'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.LeaseLeasesResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaseLeasesResponse_leases'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaseStatus'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.LeaseLeasesResponse_leases'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.LeaseLeasesResponse_leases'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.LeaseLeasesResponse_leases'(Rest, Bin3, + TrUserData); +'e_field_Etcd.LeaseLeasesResponse_leases'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.Member_peerURLs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.Member_peerURLs'(Rest, Bin3, TrUserData); +'e_field_Etcd.Member_peerURLs'([], Bin, _TrUserData) -> + Bin. + +'e_field_Etcd.Member_clientURLs'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.Member_clientURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.Member_clientURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.MemberAddRequest_peerURLs'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.MemberAddRequest_peerURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberAddRequest_peerURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberAddResponse_member'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberAddResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberAddResponse_members'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberAddResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberAddResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberAddResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberRemoveResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberRemoveResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberRemoveResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberRemoveResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberRemoveResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberRemoveResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_field_Etcd.MemberUpdateRequest_peerURLs'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberUpdateRequest_peerURLs'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberUpdateResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberUpdateResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberUpdateResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberUpdateResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberUpdateResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberUpdateResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberListResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberListResponse_members'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberListResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberListResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberListResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.MemberPromoteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MemberPromoteResponse_members'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.Member'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.MemberPromoteResponse_members'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_Etcd.MemberPromoteResponse_members'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.MemberPromoteResponse_members'(Rest, Bin3, + TrUserData); +'e_field_Etcd.MemberPromoteResponse_members'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.DefragmentResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.MoveLeaderResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AlarmResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AlarmResponse_alarms'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.AlarmMember'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AlarmResponse_alarms'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.AlarmResponse_alarms'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.AlarmResponse_alarms'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AlarmResponse_alarms'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.StatusResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.StatusResponse_errors'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.StatusResponse_errors'(Rest, Bin3, + TrUserData); +'e_field_Etcd.StatusResponse_errors'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserAddRequest_options'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGrantPermissionRequest_perm'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthEnableResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthDisableResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthenticateResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserGetResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthUserGetResponse_roles'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthUserGetResponse_roles'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthUserGetResponse_roles'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserDeleteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserChangePasswordResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserGrantRoleResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthUserRevokeRoleResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleAddResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGetResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGetResponse_perm'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthRoleGetResponse_perm'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_Etcd.AuthRoleGetResponse_perm'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_Etcd.AuthRoleGetResponse_perm'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthRoleGetResponse_perm'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthRoleListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthRoleListResponse_roles'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthRoleListResponse_roles'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthRoleListResponse_roles'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthUserListResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_Etcd.AuthUserListResponse_users'([Elem | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_Etcd.AuthUserListResponse_users'(Rest, Bin3, + TrUserData); +'e_field_Etcd.AuthUserListResponse_users'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_Etcd.AuthRoleDeleteResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleGrantPermissionResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.AuthRoleRevokePermissionResponse_header'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LockResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.UnlockResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.CampaignResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.CampaignResponse_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaderResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.LeaderResponse_kv'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResignRequest_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ResignResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ProclaimRequest_leader'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.LeaderKey'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_Etcd.ProclaimResponse_header'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_Etcd.ResponseHeader'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorSet_file'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FileDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorSet_file'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorSet_file'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.FileDescriptorSet_file'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorSet_file'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_dependency'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_dependency'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_public_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_int32(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_weak_dependency'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_message_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_message_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_message_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileDescriptorProto_message_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_service'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_service'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_service'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_service'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_service'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileDescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileDescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.FileDescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FileDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FileOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileDescriptorProto_source_code_info'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_field'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_field'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_field'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_field'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_field'([], Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.FieldDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_nested_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_nested_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_nested_type'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_nested_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_enum_type'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_enum_type'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_enum_type'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_enum_type'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_extension_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_extension_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_extension_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_extension_range'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.OneofDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_oneof_decl'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_oneof_decl'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_oneof_decl'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.DescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MessageOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.DescriptorProto_reserved_range'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.DescriptorProto_reserved_range'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.DescriptorProto_reserved_range'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_range'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.DescriptorProto_reserved_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.DescriptorProto_reserved_name'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.FieldOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumDescriptorProto_value'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumDescriptorProto_value'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumDescriptorProto_value'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.EnumDescriptorProto_value'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.EnumOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.EnumValueDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.EnumValueOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.ServiceDescriptorProto_method'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.MethodDescriptorProto'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceDescriptorProto_method'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceDescriptorProto_method'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.ServiceDescriptorProto_method'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.ServiceOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.MethodDescriptorProto_options'(Msg, + Bin, TrUserData) -> + SubBin = 'encode_msg_google.protobuf.MethodOptions'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FileOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FileOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FileOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MessageOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MessageOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.FieldOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.FieldOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumOptions_uninterpreted_option'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.EnumValueOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.EnumValueOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.ServiceOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.ServiceOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(Msg, + Bin, + TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.MethodOptions_uninterpreted_option'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.MethodOptions_uninterpreted_option'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.UninterpretedOption_name'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.UninterpretedOption_name'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.UninterpretedOption_name'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.UninterpretedOption_name'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.UninterpretedOption_name'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_path'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_span'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Bin2, TrUserData); +'e_pfield_google.protobuf.SourceCodeInfo.Location_span'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([Elem + | Rest], + Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Bin3, + TrUserData); +'e_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.SourceCodeInfo_location'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.SourceCodeInfo_location'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.SourceCodeInfo_location'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_google.protobuf.SourceCodeInfo_location'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.SourceCodeInfo_location'([], + Bin, _TrUserData) -> + Bin. + +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + Bin, TrUserData) + when Elems =/= [] -> + SubBin = + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Elems, + <<>>, + TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +'e_field_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, _TrUserData) -> + Bin. + +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([Value + | Rest], + Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, + TrUserData), + 'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Bin2, + TrUserData); +'e_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'([], + Bin, + _TrUserData) -> + Bin. + +'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(Msg, + Bin, TrUserData) -> + SubBin = + 'encode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([Elem + | Rest], + Bin, TrUserData) -> + Bin2 = <>, + Bin3 = + 'e_mfield_google.protobuf.GeneratedCodeInfo_annotation'(id(Elem, + TrUserData), + Bin2, + TrUserData), + 'e_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Bin3, TrUserData); +'e_field_google.protobuf.GeneratedCodeInfo_annotation'([], + Bin, _TrUserData) -> + Bin. + +'e_mfield_mvccpb.Event_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_mvccpb.Event_prev_kv'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_mvccpb.KeyValue'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.User_roles'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, + TrUserData), + 'e_field_authpb.User_roles'(Rest, Bin3, TrUserData); +'e_field_authpb.User_roles'([], Bin, _TrUserData) -> + Bin. + +'e_mfield_authpb.User_options'(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_authpb.UserAddOptions'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_mfield_authpb.Role_keyPermission'(Msg, Bin, + TrUserData) -> + SubBin = 'encode_msg_authpb.Permission'(Msg, <<>>, + TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +'e_field_authpb.Role_keyPermission'([Elem | Rest], Bin, + TrUserData) -> + Bin2 = <>, + Bin3 = 'e_mfield_authpb.Role_keyPermission'(id(Elem, + TrUserData), + Bin2, TrUserData), + 'e_field_authpb.Role_keyPermission'(Rest, Bin3, + TrUserData); +'e_field_authpb.Role_keyPermission'([], Bin, + _TrUserData) -> + Bin. + +'e_enum_Etcd.RangeRequest.SortOrder'('NONE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'('ASCEND', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'('DESCEND', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortOrder'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.RangeRequest.SortTarget'('KEY', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('VERSION', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('CREATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('MOD', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'('VALUE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.RangeRequest.SortTarget'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.Compare.CompareResult'('EQUAL', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('GREATER', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('LESS', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'('NOT_EQUAL', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareResult'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.Compare.CompareTarget'('VERSION', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('CREATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('MOD', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('VALUE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'('LEASE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.Compare.CompareTarget'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.WatchCreateRequest.FilterType'('NOPUT', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.WatchCreateRequest.FilterType'('NODELETE', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.WatchCreateRequest.FilterType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.AlarmType'('NONE', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'('NOSPACE', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'('CORRUPT', Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.AlarmRequest.AlarmAction'('GET', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'('ACTIVATE', Bin, + _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.AlarmRequest.AlarmAction'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + Bin, _TrUserData) -> + <>; +'e_enum_Etcd.HealthCheckResponse.ServingStatus'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.CType'('STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('CORD', Bin, + _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.CType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + Bin, _TrUserData) -> + <>; +'e_enum_google.protobuf.FieldOptions.JSType'(V, Bin, + _TrUserData) -> + e_varint(V, Bin). + +'e_enum_mvccpb.Event.EventType'('PUT', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'('DELETE', Bin, + _TrUserData) -> + <>; +'e_enum_mvccpb.Event.EventType'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +'e_enum_authpb.Permission.Type'('READ', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('WRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'('READWRITE', Bin, + _TrUserData) -> + <>; +'e_enum_authpb.Permission.Type'(V, Bin, _TrUserData) -> + e_varint(V, Bin). + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> + e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> + e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) + when 0 =< Value, Value =< 127 -> + <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> + <>; +e_type_bool(false, Bin, _TrUserData) -> + <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) + when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) + when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> + <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> + <>; +e_type_float(infinity, Bin, _) -> + <>; +e_type_float('-infinity', Bin, _) -> + <>; +e_type_float(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> + <>; +e_type_double(infinity, Bin, _) -> + <>; +e_type_double('-infinity', Bin, _) -> + <>; +e_type_double(nan, Bin, _) -> + <>. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> + not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) + when is_binary(B), byte_size(B) =/= 0 -> + true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> + decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit('Etcd.ResponseHeader', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResponseHeader'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RangeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.RangeRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RangeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.RangeResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.PutRequest', Bin, TrUserData) -> + id('decode_msg_Etcd.PutRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.PutResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.PutResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DeleteRangeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.DeleteRangeRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DeleteRangeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.DeleteRangeResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.RequestOp', Bin, TrUserData) -> + id('decode_msg_Etcd.RequestOp'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResponseOp', Bin, TrUserData) -> + id('decode_msg_Etcd.ResponseOp'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.Compare', Bin, TrUserData) -> + id('decode_msg_Etcd.Compare'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.TxnRequest', Bin, TrUserData) -> + id('decode_msg_Etcd.TxnRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.TxnResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.TxnResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CompactionRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.CompactionRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CompactionResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.CompactionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashKVRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashKVRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashKVResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashKVResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HashResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HashResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.SnapshotRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.SnapshotRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.SnapshotResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.SnapshotResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchCreateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchCreateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchCancelRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchCancelRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchProgressRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchProgressRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.WatchResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.WatchResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseGrantRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseGrantRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseGrantResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseGrantResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseRevokeRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseRevokeRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseRevokeResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseRevokeResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpoint', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpoint'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpointRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpointRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseCheckpointResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseCheckpointResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseKeepAliveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseKeepAliveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseKeepAliveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseKeepAliveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseTimeToLiveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseTimeToLiveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseTimeToLiveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseTimeToLiveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseLeasesRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseLeasesRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseStatus', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseStatus'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaseLeasesResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaseLeasesResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.Member', Bin, TrUserData) -> + id('decode_msg_Etcd.Member'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberAddRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberAddResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberRemoveRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberRemoveRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberRemoveResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberRemoveResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberUpdateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberUpdateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberUpdateResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberUpdateResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberListRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberPromoteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberPromoteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MemberPromoteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MemberPromoteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DefragmentRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.DefragmentRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.DefragmentResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.DefragmentResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MoveLeaderRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.MoveLeaderRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.MoveLeaderResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.MoveLeaderResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmMember', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmMember'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AlarmResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AlarmResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.StatusRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.StatusRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.StatusResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.StatusResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthEnableRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthEnableRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthDisableRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthDisableRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthenticateRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthenticateRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserAddRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGetRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGetRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserDeleteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserDeleteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserChangePasswordRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserChangePasswordRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGrantRoleRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGrantRoleRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserRevokeRoleRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserRevokeRoleRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleAddRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleAddRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGetRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleGetRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserListRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleListRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleListRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleDeleteRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleDeleteRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGrantPermissionRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleGrantPermissionRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleRevokePermissionRequest', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleRevokePermissionRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthEnableResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthEnableResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthDisableResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthDisableResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthenticateResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthenticateResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserAddResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGetResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGetResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserDeleteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserDeleteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserChangePasswordResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserChangePasswordResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserGrantRoleResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserGrantRoleResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserRevokeRoleResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthUserRevokeRoleResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleAddResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleAddResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGetResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleGetResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthUserListResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthUserListResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleDeleteResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.AuthRoleDeleteResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleGrantPermissionResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleGrantPermissionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.AuthRoleRevokePermissionResponse', + Bin, TrUserData) -> + id('decode_msg_Etcd.AuthRoleRevokePermissionResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HealthCheckRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.HealthCheckRequest'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.HealthCheckResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.HealthCheckResponse'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LockRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LockRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LockResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LockResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.UnlockRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.UnlockRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.UnlockResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.UnlockResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CampaignRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.CampaignRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.CampaignResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.CampaignResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderKey', Bin, TrUserData) -> + id('decode_msg_Etcd.LeaderKey'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaderRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.LeaderResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.LeaderResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResignRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResignRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ResignResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.ResignResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ProclaimRequest', Bin, + TrUserData) -> + id('decode_msg_Etcd.ProclaimRequest'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('Etcd.ProclaimResponse', Bin, + TrUserData) -> + id('decode_msg_Etcd.ProclaimResponse'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorSet', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ExtensionRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto.ReservedRange', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.DescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.OneofDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodDescriptorProto', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FileOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MessageOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.FieldOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.EnumValueOptions', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.ServiceOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.MethodOptions', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption.NamePart', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.UninterpretedOption', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo.Location', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.SourceCodeInfo', Bin, + TrUserData) -> + id('decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo.Annotation', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('google.protobuf.GeneratedCodeInfo', + Bin, TrUserData) -> + id('decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.KeyValue', Bin, TrUserData) -> + id('decode_msg_mvccpb.KeyValue'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('mvccpb.Event', Bin, TrUserData) -> + id('decode_msg_mvccpb.Event'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.UserAddOptions', Bin, + TrUserData) -> + id('decode_msg_authpb.UserAddOptions'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.User', Bin, TrUserData) -> + id('decode_msg_authpb.User'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Permission', Bin, + TrUserData) -> + id('decode_msg_authpb.Permission'(Bin, TrUserData), + TrUserData); +decode_msg_2_doit('authpb.Role', Bin, TrUserData) -> + id('decode_msg_authpb.Role'(Bin, TrUserData), + TrUserData). + + + +'decode_msg_Etcd.ResponseHeader'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ResponseHeader'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.ResponseHeader'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + #{cluster_id => F@_1, member_id => F@_2, + revision => F@_3, raft_term => F@_4}; +'dfp_read_field_def_Etcd.ResponseHeader'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.ResponseHeader'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.ResponseHeader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResponseHeader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.ResponseHeader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 16 -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 24 -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResponseHeader'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, TrUserData); + 3 -> + 'skip_group_Etcd.ResponseHeader'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.ResponseHeader'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.ResponseHeader'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + #{cluster_id => F@_1, member_id => F@_2, + revision => F@_3, raft_term => F@_4}. + +'d_field_Etcd.ResponseHeader_cluster_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_cluster_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_cluster_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_member_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_member_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_member_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.ResponseHeader_raft_term'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseHeader_raft_term'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.ResponseHeader_raft_term'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.ResponseHeader'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.ResponseHeader'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.ResponseHeader'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.ResponseHeader'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_length_delimited_Etcd.ResponseHeader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResponseHeader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.ResponseHeader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_group_Etcd.ResponseHeader'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_32_Etcd.ResponseHeader'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_64_Etcd.ResponseHeader'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseHeader'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'decode_msg_Etcd.RangeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id('NONE', TrUserData), + id('KEY', TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.RangeRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_limit'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_revision'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<96, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<104, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'dfp_read_field_def_Etcd.RangeRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, _) -> + #{key => F@_1, range_end => F@_2, limit => F@_3, + revision => F@_4, sort_order => F@_5, + sort_target => F@_6, serializable => F@_7, + keys_only => F@_8, count_only => F@_9, + min_mod_revision => F@_10, max_mod_revision => F@_11, + min_create_revision => F@_12, + max_create_revision => F@_13}; +'dfp_read_field_def_Etcd.RangeRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'dg_read_field_def_Etcd.RangeRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData). + +'dg_read_field_def_Etcd.RangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'dg_read_field_def_Etcd.RangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RangeRequest_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); + 18 -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 24 -> + 'd_field_Etcd.RangeRequest_limit'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); + 32 -> + 'd_field_Etcd.RangeRequest_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 40 -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 48 -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + TrUserData); + 56 -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); + 64 -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 72 -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 80 -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + TrUserData); + 88 -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + TrUserData); + 96 -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + 104 -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); + 1 -> + 'skip_64_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RangeRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, TrUserData); + 3 -> + 'skip_group_Etcd.RangeRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); + 5 -> + 'skip_32_Etcd.RangeRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + end + end; +'dg_read_field_def_Etcd.RangeRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, _) -> + #{key => F@_1, range_end => F@_2, limit => F@_3, + revision => F@_4, sort_order => F@_5, + sort_target => F@_6, serializable => F@_7, + keys_only => F@_8, count_only => F@_9, + min_mod_revision => F@_10, max_mod_revision => F@_11, + min_create_revision => F@_12, + max_create_revision => F@_13}. + +'d_field_Etcd.RangeRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData); +'d_field_Etcd.RangeRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_limit'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_limit'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_limit'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_sort_order'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_sort_order'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_sort_order'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.RangeRequest.SortOrder'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_sort_target'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_sort_target'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_sort_target'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.RangeRequest.SortTarget'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_serializable'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_serializable'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_serializable'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_keys_only'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_keys_only'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_keys_only'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, NewFValue, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_count_only'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_count_only'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_count_only'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, F@_10, F@_11, F@_12, + F@_13, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, NewFValue, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_min_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_min_mod_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_min_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, _, + F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, NewFValue, F@_11, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_max_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_max_mod_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData); +'d_field_Etcd.RangeRequest_max_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, NewFValue, + F@_12, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_min_create_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_min_create_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_min_create_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, TrUserData). + +'d_field_Etcd.RangeRequest_max_create_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeRequest_max_create_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + TrUserData); +'d_field_Etcd.RangeRequest_max_create_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeRequest'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, TrUserData). + +'skip_varint_Etcd.RangeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'skip_varint_Etcd.RangeRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'skip_varint_Etcd.RangeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_length_delimited_Etcd.RangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, + TrUserData); +'skip_length_delimited_Etcd.RangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RangeRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_group_Etcd.RangeRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_32_Etcd.RangeRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'skip_64_Etcd.RangeRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, TrUserData). + +'decode_msg_Etcd.RangeResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + id(false, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.RangeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_more'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.RangeResponse_count'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.RangeResponse'(<<>>, 0, 0, + F@_1, R1, F@_3, F@_4, TrUserData) -> + S1 = #{more => F@_3, count => F@_4}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{kvs => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.RangeResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.RangeResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.RangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RangeResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.RangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RangeResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 18 -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.RangeResponse_more'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.RangeResponse_count'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RangeResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, TrUserData); + 3 -> + 'skip_group_Etcd.RangeResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.RangeResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.RangeResponse'(<<>>, 0, 0, F@_1, + R1, F@_3, F@_4, TrUserData) -> + S1 = #{more => F@_3, count => F@_4}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{kvs => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.RangeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_Etcd.RangeResponse_kvs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_kvs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_kvs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, + cons(NewFValue, Prev, TrUserData), + F@_3, F@_4, TrUserData). + +'d_field_Etcd.RangeResponse_more'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_more'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_more'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.RangeResponse_count'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.RangeResponse_count'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.RangeResponse_count'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.RangeResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.RangeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.RangeResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.RangeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_Etcd.RangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RangeResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.RangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RangeResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_group_Etcd.RangeResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_32_Etcd.RangeResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'skip_64_Etcd.RangeResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.RangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_Etcd.PutRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.PutRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_Etcd.PutRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, value => F@_2, lease => F@_3, + prev_kv => F@_4, ignore_value => F@_5, + ignore_lease => F@_6}; +'dfp_read_field_def_Etcd.PutRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_Etcd.PutRequest'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_Etcd.PutRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.PutRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_Etcd.PutRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.PutRequest_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 18 -> + 'd_field_Etcd.PutRequest_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 24 -> + 'd_field_Etcd.PutRequest_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 32 -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 40 -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 48 -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.PutRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_Etcd.PutRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_Etcd.PutRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_Etcd.PutRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, value => F@_2, lease => F@_3, + prev_kv => F@_4, ignore_value => F@_5, + ignore_lease => F@_6}. + +'d_field_Etcd.PutRequest_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_Etcd.PutRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_Etcd.PutRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_ignore_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_ignore_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_ignore_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_Etcd.PutRequest_ignore_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutRequest_ignore_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_Etcd.PutRequest_ignore_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.PutRequest'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_Etcd.PutRequest'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_Etcd.PutRequest'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_Etcd.PutRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.PutRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_Etcd.PutRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.PutRequest'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_Etcd.PutRequest'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.PutRequest'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_Etcd.PutRequest'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_Etcd.PutRequest'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_Etcd.PutRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_Etcd.PutResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.PutResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.PutResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.PutResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.PutResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{prev_kv => F@_2} + end; +'dfp_read_field_def_Etcd.PutResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.PutResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.PutResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.PutResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.PutResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.PutResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.PutResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.PutResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.PutResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.PutResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{prev_kv => F@_2} + end. + +'d_field_Etcd.PutResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.PutResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.PutResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.PutResponse_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.PutResponse_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.PutResponse_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.PutResponse'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.PutResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.PutResponse'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.PutResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.PutResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.PutResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.PutResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.PutResponse'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.PutResponse'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.PutResponse'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.PutResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.PutResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.PutResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.DeleteRangeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{key => F@_1, range_end => F@_2, prev_kv => F@_3}; +'dfp_read_field_def_Etcd.DeleteRangeRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.DeleteRangeRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DeleteRangeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 24 -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DeleteRangeRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.DeleteRangeRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.DeleteRangeRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.DeleteRangeRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{key => F@_1, range_end => F@_2, prev_kv => F@_3}. + +'d_field_Etcd.DeleteRangeRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(RestF, 0, + 0, F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.DeleteRangeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.DeleteRangeRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.DeleteRangeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.DeleteRangeRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DeleteRangeRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.DeleteRangeRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.DeleteRangeRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.DeleteRangeRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.DeleteRangeRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.DeleteRangeResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.DeleteRangeResponse'(<<>>, 0, + 0, F@_1, F@_2, R1, TrUserData) -> + S1 = #{deleted => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{prev_kvs => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.DeleteRangeResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.DeleteRangeResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DeleteRangeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DeleteRangeResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.DeleteRangeResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.DeleteRangeResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.DeleteRangeResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{deleted => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{prev_kvs => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.DeleteRangeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.DeleteRangeResponse_deleted'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_deleted'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_deleted'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.DeleteRangeResponse_prev_kvs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.DeleteRangeResponse_prev_kvs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.DeleteRangeResponse_prev_kvs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(RestF, 0, + 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.DeleteRangeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.DeleteRangeResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.DeleteRangeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.DeleteRangeResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DeleteRangeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.DeleteRangeResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.DeleteRangeResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.DeleteRangeResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.DeleteRangeResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.DeleteRangeResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.RequestOp'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Bin, 0, 0, + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.RequestOp'(<<10, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_range'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<18, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_put'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<26, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<34, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.RequestOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request => F@_1} + end; +'dfp_read_field_def_Etcd.RequestOp'(Other, Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.RequestOp'(Other, Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.RequestOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.RequestOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.RequestOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.RequestOp_request_range'(Rest, 0, 0, F@_1, + TrUserData); + 18 -> + 'd_field_Etcd.RequestOp_request_put'(Rest, 0, 0, F@_1, + TrUserData); + 26 -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, 0, + 0, F@_1, TrUserData); + 34 -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.RequestOp'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.RequestOp'(Rest, 0, 0, F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.RequestOp'(Rest, 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.RequestOp'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.RequestOp'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.RequestOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request => F@_1} + end. + +'d_field_Etcd.RequestOp_request_range'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_range'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_range'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RangeRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_range, NewFValue}, + TrUserData); + {request_range, MVPrev} -> + id({request_range, + 'merge_msg_Etcd.RangeRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_range, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_put'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_put'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_put'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.PutRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_put, NewFValue}, + TrUserData); + {request_put, MVPrev} -> + id({request_put, + 'merge_msg_Etcd.PutRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_put, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_delete_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_delete_range'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.RequestOp_request_delete_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.DeleteRangeRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_delete_range, + NewFValue}, + TrUserData); + {request_delete_range, MVPrev} -> + id({request_delete_range, + 'merge_msg_Etcd.DeleteRangeRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_delete_range, + NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.RequestOp_request_txn'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.RequestOp_request_txn'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.RequestOp_request_txn'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.TxnRequest'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.RequestOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({request_txn, NewFValue}, + TrUserData); + {request_txn, MVPrev} -> + id({request_txn, + 'merge_msg_Etcd.TxnRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({request_txn, NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.RequestOp'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.RequestOp'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.RequestOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.RequestOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.RequestOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.RequestOp'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.RequestOp'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.RequestOp'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.RequestOp'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.RequestOp'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.RequestOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.ResponseOp'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Bin, 0, 0, + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ResponseOp'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ResponseOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{response => F@_1} + end; +'dfp_read_field_def_Etcd.ResponseOp'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResponseOp'(Other, Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.ResponseOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResponseOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResponseOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, 0, 0, + F@_1, TrUserData); + 18 -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, 0, 0, F@_1, + TrUserData); + 26 -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, 0, + 0, F@_1, TrUserData); + 34 -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResponseOp'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResponseOp'(Rest, 0, 0, F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResponseOp'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResponseOp'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.ResponseOp'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.ResponseOp'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{response => F@_1} + end. + +'d_field_Etcd.ResponseOp_response_range'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_range'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_range'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RangeResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_range, NewFValue}, + TrUserData); + {response_range, MVPrev} -> + id({response_range, + 'merge_msg_Etcd.RangeResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_range, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_put'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_put'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_put'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.PutResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_put, NewFValue}, + TrUserData); + {response_put, MVPrev} -> + id({response_put, + 'merge_msg_Etcd.PutResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_put, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_delete_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_delete_range'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.ResponseOp_response_delete_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.DeleteRangeResponse'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_delete_range, + NewFValue}, + TrUserData); + {response_delete_range, MVPrev} -> + id({response_delete_range, + 'merge_msg_Etcd.DeleteRangeResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_delete_range, + NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.ResponseOp_response_txn'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResponseOp_response_txn'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResponseOp_response_txn'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.TxnResponse'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResponseOp'(RestF, 0, 0, + case Prev of + '$undef' -> + id({response_txn, NewFValue}, + TrUserData); + {response_txn, MVPrev} -> + id({response_txn, + 'merge_msg_Etcd.TxnResponse'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({response_txn, NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResponseOp'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResponseOp'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.ResponseOp'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResponseOp'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.ResponseOp'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResponseOp'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.ResponseOp'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.ResponseOp'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.ResponseOp'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResponseOp'(Rest, Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.Compare'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Bin, 0, 0, + id('EQUAL', TrUserData), + id('VERSION', TrUserData), + id(<<>>, TrUserData), + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.Compare'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_result'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<16, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_target'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_version'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<40, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<48, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_mod_revision'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<58, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_value'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_lease'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<130, 4, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Compare_range_end'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Compare'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, _) -> + S1 = #{result => F@_1, target => F@_2, key => F@_3, + range_end => F@_5}, + if F@_4 == '$undef' -> S1; + true -> S1#{target_union => F@_4} + end; +'dfp_read_field_def_Etcd.Compare'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.Compare'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.Compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.Compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dg_read_field_def_Etcd.Compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.Compare_result'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 16 -> + 'd_field_Etcd.Compare_target'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 26 -> + 'd_field_Etcd.Compare_key'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 32 -> + 'd_field_Etcd.Compare_version'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 40 -> + 'd_field_Etcd.Compare_create_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 48 -> + 'd_field_Etcd.Compare_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 58 -> + 'd_field_Etcd.Compare_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 64 -> + 'd_field_Etcd.Compare_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 514 -> + 'd_field_Etcd.Compare_range_end'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 1 -> + 'skip_64_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.Compare'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.Compare'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.Compare'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + end + end; +'dg_read_field_def_Etcd.Compare'(<<>>, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, _) -> + S1 = #{result => F@_1, target => F@_2, key => F@_3, + range_end => F@_5}, + if F@_4 == '$undef' -> S1; + true -> S1#{target_union => F@_4} + end. + +'d_field_Etcd.Compare_result'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_result'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_result'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.Compare.CompareResult'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.Compare_target'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_target'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_target'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.Compare.CompareTarget'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Compare_key'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_key'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_key'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Compare_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Compare_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({version, NewFValue}, TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({create_revision, NewFValue}, + TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Compare_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({mod_revision, NewFValue}, TrUserData), + F@_5, TrUserData). + +'d_field_Etcd.Compare_value'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_value'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_value'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({value, NewFValue}, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Compare_lease'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_lease'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Compare_lease'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, + id({lease, NewFValue}, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Compare_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Compare_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Compare_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Compare'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, TrUserData). + +'skip_varint_Etcd.Compare'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'skip_varint_Etcd.Compare'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'skip_varint_Etcd.Compare'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.Compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.Compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.Compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.Compare'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_group_Etcd.Compare'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.Compare'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_32_Etcd.Compare'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_64_Etcd.Compare'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.TxnRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Bin, 0, 0, + id([], TrUserData), id([], TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.TxnRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_compare'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_success'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnRequest_failure'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnRequest'(<<>>, 0, 0, R1, R2, + R3, TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{compare => lists_reverse(R1, TrUserData)} + end, + S3 = if R2 == '$undef' -> S2; + true -> S2#{success => lists_reverse(R2, TrUserData)} + end, + if R3 == '$undef' -> S3; + true -> S3#{failure => lists_reverse(R3, TrUserData)} + end; +'dfp_read_field_def_Etcd.TxnRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.TxnRequest'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.TxnRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.TxnRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.TxnRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.TxnRequest_compare'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.TxnRequest_success'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.TxnRequest_failure'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.TxnRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.TxnRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.TxnRequest'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_Etcd.TxnRequest'(<<>>, 0, 0, R1, R2, + R3, TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{compare => lists_reverse(R1, TrUserData)} + end, + S3 = if R2 == '$undef' -> S2; + true -> S2#{success => lists_reverse(R2, TrUserData)} + end, + if R3 == '$undef' -> S3; + true -> S3#{failure => lists_reverse(R3, TrUserData)} + end. + +'d_field_Etcd.TxnRequest_compare'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_compare'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_compare'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Compare'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, + cons(NewFValue, Prev, TrUserData), + F@_2, F@_3, TrUserData). + +'d_field_Etcd.TxnRequest_success'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_success'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_success'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RequestOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + F@_3, TrUserData). + +'d_field_Etcd.TxnRequest_failure'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnRequest_failure'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnRequest_failure'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.RequestOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnRequest'(RestF, 0, 0, F@_1, + F@_2, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.TxnRequest'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_Etcd.TxnRequest'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.TxnRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.TxnRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.TxnRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.TxnRequest'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_Etcd.TxnRequest'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_Etcd.TxnRequest'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_Etcd.TxnRequest'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.TxnResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(false, TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.TxnResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.TxnResponse_responses'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.TxnResponse'(<<>>, 0, 0, F@_1, + F@_2, R1, TrUserData) -> + S1 = #{succeeded => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{responses => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.TxnResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.TxnResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.TxnResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.TxnResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.TxnResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.TxnResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.TxnResponse_responses'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.TxnResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.TxnResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.TxnResponse'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_Etcd.TxnResponse'(<<>>, 0, 0, F@_1, + F@_2, R1, TrUserData) -> + S1 = #{succeeded => F@_2}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{responses => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.TxnResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.TxnResponse_succeeded'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_succeeded'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_succeeded'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, F@_1, + NewFValue, F@_3, TrUserData). + +'d_field_Etcd.TxnResponse_responses'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.TxnResponse_responses'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.TxnResponse_responses'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseOp'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.TxnResponse'(RestF, 0, 0, F@_1, + F@_2, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.TxnResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.TxnResponse'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_Etcd.TxnResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.TxnResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.TxnResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.TxnResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.TxnResponse'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_Etcd.TxnResponse'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_Etcd.TxnResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.TxnResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.TxnResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.CompactionRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Bin, 0, 0, + id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CompactionRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CompactionRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CompactionRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{revision => F@_1, physical => F@_2}; +'dfp_read_field_def_Etcd.CompactionRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.CompactionRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.CompactionRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CompactionRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.CompactionRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CompactionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.CompactionRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.CompactionRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CompactionRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{revision => F@_1, physical => F@_2}. + +'d_field_Etcd.CompactionRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CompactionRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.CompactionRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.CompactionRequest_physical'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionRequest_physical'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CompactionRequest_physical'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.CompactionRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.CompactionRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.CompactionRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.CompactionRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.CompactionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CompactionRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.CompactionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.CompactionRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.CompactionRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.CompactionRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.CompactionResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CompactionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.CompactionResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.CompactionResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.CompactionResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.CompactionResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.CompactionResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CompactionResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.CompactionResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CompactionResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CompactionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.CompactionResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.CompactionResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CompactionResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.CompactionResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.CompactionResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.CompactionResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CompactionResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.CompactionResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.CompactionResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.CompactionResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.CompactionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CompactionResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.CompactionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.CompactionResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.CompactionResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.CompactionResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.CompactionResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.HashRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.HashRequest'(<<>>, 0, 0, _) -> + #{}; +'dfp_read_field_def_Etcd.HashRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.HashRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.HashRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.HashRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashRequest'(Rest, 0, 0, TrUserData); + 1 -> 'skip_64_Etcd.HashRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.HashRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> 'skip_32_Etcd.HashRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.HashRequest'(<<>>, 0, 0, _) -> + #{}. + +'skip_varint_Etcd.HashRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.HashRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.HashRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'skip_length_delimited_Etcd.HashRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.HashRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.HashRequest'(<<_:32, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.HashRequest'(<<_:64, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.HashKVRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashKVRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HashKVRequest'(<<>>, 0, 0, + F@_1, _) -> + #{revision => F@_1}; +'dfp_read_field_def_Etcd.HashKVRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HashKVRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.HashKVRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashKVRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.HashKVRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashKVRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.HashKVRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HashKVRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HashKVRequest'(<<>>, 0, 0, F@_1, + _) -> + #{revision => F@_1}. + +'d_field_Etcd.HashKVRequest_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVRequest_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HashKVRequest_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.HashKVRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.HashKVRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HashKVRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.HashKVRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.HashKVRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashKVRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.HashKVRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.HashKVRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.HashKVRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.HashKVRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.HashKVResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashKVResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.HashKVResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{hash => F@_2, compact_revision => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.HashKVResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.HashKVResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.HashKVResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashKVResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.HashKVResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HashKVResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 24 -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashKVResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.HashKVResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.HashKVResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.HashKVResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{hash => F@_2, compact_revision => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.HashKVResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.HashKVResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.HashKVResponse_hash'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_hash'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.HashKVResponse_hash'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Etcd.HashKVResponse_compact_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.HashKVResponse_compact_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.HashKVResponse_compact_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.HashKVResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Etcd.HashKVResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.HashKVResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.HashKVResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.HashKVResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashKVResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.HashKVResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.HashKVResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.HashKVResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.HashKVResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.HashKVResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.HashResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.HashResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.HashResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.HashResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.HashResponse_hash'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.HashResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{hash => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.HashResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.HashResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.HashResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HashResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.HashResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HashResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.HashResponse_hash'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HashResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.HashResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.HashResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HashResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{hash => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.HashResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.HashResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.HashResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.HashResponse_hash'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.HashResponse_hash'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.HashResponse_hash'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HashResponse'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.HashResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.HashResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.HashResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.HashResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HashResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.HashResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HashResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.HashResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HashResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.HashResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.HashResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.HashResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.SnapshotRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.SnapshotRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.SnapshotRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.SnapshotRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.SnapshotRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.SnapshotRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.SnapshotRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.SnapshotRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.SnapshotRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.SnapshotRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.SnapshotRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.SnapshotRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.SnapshotRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.SnapshotRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.SnapshotRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.SnapshotRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.SnapshotRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.SnapshotRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.SnapshotRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.SnapshotRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.SnapshotRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.SnapshotResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.SnapshotResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.SnapshotResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{remaining_bytes => F@_2, blob => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.SnapshotResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.SnapshotResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.SnapshotResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.SnapshotResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.SnapshotResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, 0, + 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.SnapshotResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 3 -> + 'skip_group_Etcd.SnapshotResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.SnapshotResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.SnapshotResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{remaining_bytes => F@_2, blob => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.SnapshotResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.SnapshotResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.SnapshotResponse_remaining_bytes'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_remaining_bytes'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.SnapshotResponse_remaining_bytes'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.SnapshotResponse_blob'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.SnapshotResponse_blob'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.SnapshotResponse_blob'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.SnapshotResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.SnapshotResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.SnapshotResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.SnapshotResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.SnapshotResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.SnapshotResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.SnapshotResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.SnapshotResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.SnapshotResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.SnapshotResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.SnapshotResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.WatchRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.WatchRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request_union => F@_1} + end; +'dfp_read_field_def_Etcd.WatchRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.WatchRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.WatchRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.WatchRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, 0, 0, + F@_1, TrUserData); + 18 -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, 0, 0, + F@_1, TrUserData); + 26 -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.WatchRequest'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.WatchRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{request_union => F@_1} + end. + +'d_field_Etcd.WatchRequest_create_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_create_request'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchRequest_create_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchCreateRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({create_request, NewFValue}, + TrUserData); + {create_request, MVPrev} -> + id({create_request, + 'merge_msg_Etcd.WatchCreateRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({create_request, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.WatchRequest_cancel_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_cancel_request'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchRequest_cancel_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchCancelRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({cancel_request, NewFValue}, + TrUserData); + {cancel_request, MVPrev} -> + id({cancel_request, + 'merge_msg_Etcd.WatchCancelRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({cancel_request, NewFValue}, + TrUserData) + end, + TrUserData). + +'d_field_Etcd.WatchRequest_progress_request'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchRequest_progress_request'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.WatchRequest_progress_request'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.WatchProgressRequest'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchRequest'(RestF, 0, 0, + case Prev of + '$undef' -> + id({progress_request, + NewFValue}, + TrUserData); + {progress_request, MVPrev} -> + id({progress_request, + 'merge_msg_Etcd.WatchProgressRequest'(MVPrev, + NewFValue, + TrUserData)}, + TrUserData); + _ -> + id({progress_request, + NewFValue}, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.WatchRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.WatchRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.WatchRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.WatchRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.WatchRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.WatchRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.WatchRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.WatchRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.WatchCreateRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id([], TrUserData), + id(false, TrUserData), + id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchCreateRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, R1, F@_6, + F@_7, F@_8, TrUserData) -> + #{key => F@_1, range_end => F@_2, + start_revision => F@_3, progress_notify => F@_4, + filters => lists_reverse(R1, TrUserData), + prev_kv => F@_6, watch_id => F@_7, fragment => F@_8}; +'dfp_read_field_def_Etcd.WatchCreateRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'dg_read_field_def_Etcd.WatchCreateRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'dg_read_field_def_Etcd.WatchCreateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchCreateRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dg_read_field_def_Etcd.WatchCreateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 18 -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 24 -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 32 -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 42 -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 40 -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 48 -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 56 -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 64 -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchCreateRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchCreateRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 5 -> + 'skip_32_Etcd.WatchCreateRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchCreateRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, R1, F@_6, + F@_7, F@_8, TrUserData) -> + #{key => F@_1, range_end => F@_2, + start_revision => F@_3, progress_notify => F@_4, + filters => lists_reverse(R1, TrUserData), + prev_kv => F@_6, watch_id => F@_7, fragment => F@_8}. + +'d_field_Etcd.WatchCreateRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchCreateRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_start_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_start_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_start_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, NewFValue, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_progress_notify'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_progress_notify'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_progress_notify'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, NewFValue, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_filters'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_filters'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_filters'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, Prev, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.WatchCreateRequest.FilterType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, TrUserData). + +'d_pfield_Etcd.WatchCreateRequest_filters'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_pfield_Etcd.WatchCreateRequest_filters'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_pfield_Etcd.WatchCreateRequest_filters'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, E, + F@_6, F@_7, F@_8, TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_Etcd.WatchCreateRequest_filters'(PackedBytes, + 0, 0, E, TrUserData), + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + NewSeq, F@_6, F@_7, F@_8, + TrUserData). + +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, AccSeq, TrUserData) + when N < 57 -> + 'd_packed_field_Etcd.WatchCreateRequest_filters'(Rest, + N + 7, X bsl N + Acc, + AccSeq, TrUserData); +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, AccSeq, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.WatchCreateRequest.FilterType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'd_packed_field_Etcd.WatchCreateRequest_filters'(RestF, + 0, 0, [NewFValue | AccSeq], + TrUserData); +'d_packed_field_Etcd.WatchCreateRequest_filters'(<<>>, + 0, 0, AccSeq, _) -> + AccSeq. + +'d_field_Etcd.WatchCreateRequest_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + _, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, NewFValue, F@_7, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, NewFValue, F@_8, + TrUserData). + +'d_field_Etcd.WatchCreateRequest_fragment'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCreateRequest_fragment'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchCreateRequest_fragment'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(RestF, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, NewFValue, + TrUserData). + +'skip_varint_Etcd.WatchCreateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'skip_varint_Etcd.WatchCreateRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'skip_varint_Etcd.WatchCreateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_length_delimited_Etcd.WatchCreateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchCreateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + TrUserData); +'skip_length_delimited_Etcd.WatchCreateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_group_Etcd.WatchCreateRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_32_Etcd.WatchCreateRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'skip_64_Etcd.WatchCreateRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCreateRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData). + +'decode_msg_Etcd.WatchCancelRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.WatchCancelRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.WatchCancelRequest'(<<>>, 0, 0, + F@_1, _) -> + #{watch_id => F@_1}; +'dfp_read_field_def_Etcd.WatchCancelRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.WatchCancelRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.WatchCancelRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchCancelRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.WatchCancelRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchCancelRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchCancelRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.WatchCancelRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchCancelRequest'(<<>>, 0, 0, + F@_1, _) -> + #{watch_id => F@_1}. + +'d_field_Etcd.WatchCancelRequest_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchCancelRequest_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.WatchCancelRequest_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchCancelRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.WatchCancelRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.WatchCancelRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.WatchCancelRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.WatchCancelRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchCancelRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.WatchCancelRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.WatchCancelRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.WatchCancelRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.WatchCancelRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchCancelRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.WatchProgressRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Bin, 0, + 0, TrUserData). + +'dfp_read_field_def_Etcd.WatchProgressRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.WatchProgressRequest'(Other, + Z1, Z2, TrUserData) -> + 'dg_read_field_def_Etcd.WatchProgressRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.WatchProgressRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchProgressRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.WatchProgressRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchProgressRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.WatchProgressRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.WatchProgressRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.WatchProgressRequest'(<<>>, 0, + 0, _) -> + #{}. + +'skip_varint_Etcd.WatchProgressRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.WatchProgressRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.WatchProgressRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.WatchProgressRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchProgressRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.WatchProgressRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.WatchProgressRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.WatchProgressRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.WatchProgressRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchProgressRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.WatchResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(false, TrUserData), + id(false, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(false, TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.WatchResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_created'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + 'd_field_Etcd.WatchResponse_events'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); +'dfp_read_field_def_Etcd.WatchResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, TrUserData) -> + S1 = #{watch_id => F@_2, created => F@_3, + canceled => F@_4, compact_revision => F@_5, + cancel_reason => F@_6, fragment => F@_7}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{events => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.WatchResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dg_read_field_def_Etcd.WatchResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'dg_read_field_def_Etcd.WatchResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.WatchResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'dg_read_field_def_Etcd.WatchResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.WatchResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 16 -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 24 -> + 'd_field_Etcd.WatchResponse_created'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 32 -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 40 -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); + 50 -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData); + 56 -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + 90 -> + 'd_field_Etcd.WatchResponse_events'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData); + 1 -> + 'skip_64_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.WatchResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, + TrUserData); + 3 -> + 'skip_group_Etcd.WatchResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData); + 5 -> + 'skip_32_Etcd.WatchResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) + end + end; +'dg_read_field_def_Etcd.WatchResponse'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, R1, + TrUserData) -> + S1 = #{watch_id => F@_2, created => F@_3, + canceled => F@_4, compact_revision => F@_5, + cancel_reason => F@_6, fragment => F@_7}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{events => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.WatchResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_watch_id'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_watch_id'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_watch_id'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_created'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_created'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_created'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_canceled'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_canceled'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_canceled'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_compact_revision'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_compact_revision'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_compact_revision'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + F@_6, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_cancel_reason'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_cancel_reason'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'d_field_Etcd.WatchResponse_cancel_reason'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + _, F@_7, F@_8, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_fragment'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_fragment'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_fragment'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, _, F@_8, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, TrUserData). + +'d_field_Etcd.WatchResponse_events'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) + when N < 57 -> + 'd_field_Etcd.WatchResponse_events'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, TrUserData); +'d_field_Etcd.WatchResponse_events'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.Event'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.WatchResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.WatchResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'skip_varint_Etcd.WatchResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'skip_varint_Etcd.WatchResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_length_delimited_Etcd.WatchResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.WatchResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData); +'skip_length_delimited_Etcd.WatchResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.WatchResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_group_Etcd.WatchResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_32_Etcd.WatchResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'skip_64_Etcd.WatchResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + TrUserData) -> + 'dfp_read_field_def_Etcd.WatchResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, TrUserData). + +'decode_msg_Etcd.LeaseGrantRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'TTL' => F@_1, 'ID' => F@_2}; +'dfp_read_field_def_Etcd.LeaseGrantRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseGrantRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseGrantRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseGrantRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseGrantRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseGrantRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseGrantRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'TTL' => F@_1, 'ID' => F@_2}. + +'d_field_Etcd.LeaseGrantRequest_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantRequest_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseGrantRequest_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LeaseGrantRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseGrantRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseGrantRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseGrantRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaseGrantRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseGrantRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseGrantRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseGrantRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseGrantRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseGrantRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseGrantRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaseGrantResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaseGrantResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, error => F@_4}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseGrantResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseGrantResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseGrantResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 16 -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 34 -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseGrantResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseGrantResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseGrantResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseGrantResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, error => F@_4}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseGrantResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.LeaseGrantResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_Etcd.LeaseGrantResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaseGrantResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, NewFValue, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.LeaseGrantResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaseGrantResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, F@_2, NewFValue, F@_4, + TrUserData). + +'d_field_Etcd.LeaseGrantResponse_error'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseGrantResponse_error'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'d_field_Etcd.LeaseGrantResponse_error'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(RestF, 0, + 0, F@_1, F@_2, F@_3, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseGrantResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'skip_varint_Etcd.LeaseGrantResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'skip_varint_Etcd.LeaseGrantResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_length_delimited_Etcd.LeaseGrantResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseGrantResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_Etcd.LeaseGrantResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest2, 0, + 0, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_group_Etcd.LeaseGrantResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, 0, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_32_Etcd.LeaseGrantResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'skip_64_Etcd.LeaseGrantResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseGrantResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData). + +'decode_msg_Etcd.LeaseRevokeRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseRevokeRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseRevokeRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseRevokeRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseRevokeRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseRevokeRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseRevokeRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseRevokeRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseRevokeRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseRevokeRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseRevokeRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseRevokeRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseRevokeRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseRevokeRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseRevokeRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.LeaseRevokeRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseRevokeRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseRevokeRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseRevokeRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseRevokeResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseRevokeResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseRevokeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseRevokeResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseRevokeResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseRevokeResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseRevokeResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseRevokeResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseRevokeResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseRevokeResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaseRevokeResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseRevokeResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseRevokeResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseRevokeResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseRevokeResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.LeaseRevokeResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseRevokeResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseRevokeResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseRevokeResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseRevokeResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseCheckpoint'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Bin, 0, 0, + id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpoint'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'ID' => F@_1, remaining_TTL => F@_2}; +'dfp_read_field_def_Etcd.LeaseCheckpoint'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpoint'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpoint'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpoint'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpoint'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpoint'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpoint'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{'ID' => F@_1, remaining_TTL => F@_2}. + +'d_field_Etcd.LeaseCheckpoint_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpoint_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaseCheckpoint_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LeaseCheckpoint_remaining_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpoint_remaining_TTL'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.LeaseCheckpoint_remaining_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseCheckpoint'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaseCheckpoint'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpoint'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpoint'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpoint'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseCheckpoint'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseCheckpoint'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseCheckpoint'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpoint'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaseCheckpointRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Bin, 0, + 0, id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> + S1#{checkpoints => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpointRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpointRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpointRequest'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpointRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpointRequest'(<<>>, 0, + 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> + S1#{checkpoints => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.LeaseCheckpointRequest_checkpoints'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpointRequest_checkpoints'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.LeaseCheckpointRequest_checkpoints'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaseCheckpoint'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseCheckpointRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpointRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseCheckpointRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpointRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpointRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpointRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseCheckpointRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseCheckpointRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseCheckpointRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseCheckpointResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Bin, + 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseCheckpointResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, 0, + 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseCheckpointResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseCheckpointResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseCheckpointResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseCheckpointResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseCheckpointResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseCheckpointResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.LeaseCheckpointResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaseCheckpointResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseCheckpointResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseCheckpointResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseCheckpointResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseCheckpointResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseCheckpointResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseCheckpointResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseCheckpointResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseCheckpointResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseCheckpointResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseKeepAliveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Bin, 0, + 0, id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseKeepAliveRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseKeepAliveRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseKeepAliveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseKeepAliveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseKeepAliveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseKeepAliveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseKeepAliveRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.LeaseKeepAliveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseKeepAliveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.LeaseKeepAliveRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.LeaseKeepAliveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.LeaseKeepAliveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LeaseKeepAliveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 24 -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseKeepAliveResponse'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseKeepAliveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseKeepAliveResponse'(<<>>, 0, + 0, F@_1, F@_2, F@_3, _) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseKeepAliveResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.LeaseKeepAliveResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, TrUserData). + +'d_field_Etcd.LeaseKeepAliveResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseKeepAliveResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.LeaseKeepAliveResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseKeepAliveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_Etcd.LeaseKeepAliveResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.LeaseKeepAliveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.LeaseKeepAliveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.LeaseKeepAliveResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.LeaseKeepAliveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.LeaseKeepAliveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseKeepAliveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.LeaseTimeToLiveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Bin, 0, + 0, id(0, TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{'ID' => F@_1, keys => F@_2}; +'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseTimeToLiveRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseTimeToLiveRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseTimeToLiveRequest'(<<>>, 0, + 0, F@_1, F@_2, _) -> + #{'ID' => F@_1, keys => F@_2}. + +'d_field_Etcd.LeaseTimeToLiveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveRequest_keys'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveRequest_keys'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveRequest_keys'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.LeaseTimeToLiveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseTimeToLiveRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.LeaseTimeToLiveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseTimeToLiveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.LeaseTimeToLiveRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.LeaseTimeToLiveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.LeaseTimeToLiveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.LeaseTimeToLiveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Bin, + 0, 0, + id('$undef', TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, TrUserData) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, grantedTTL => F@_4, + keys => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 16 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + 24 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + 32 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); + 42 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseTimeToLiveResponse'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.LeaseTimeToLiveResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseTimeToLiveResponse'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, TrUserData) -> + S1 = #{'ID' => F@_2, 'TTL' => F@_3, grantedTTL => F@_4, + keys => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LeaseTimeToLiveResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, + F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_TTL'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_TTL'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_TTL'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_grantedTTL'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, + TrUserData). + +'d_field_Etcd.LeaseTimeToLiveResponse_keys'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseTimeToLiveResponse_keys'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'d_field_Etcd.LeaseTimeToLiveResponse_keys'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseTimeToLiveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'skip_varint_Etcd.LeaseTimeToLiveResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_Etcd.LeaseTimeToLiveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.LeaseTimeToLiveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_group_Etcd.LeaseTimeToLiveResponse'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_32_Etcd.LeaseTimeToLiveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'skip_64_Etcd.LeaseTimeToLiveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseTimeToLiveResponse'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.LeaseLeasesRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.LeaseLeasesRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseLeasesRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseLeasesRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseLeasesRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.LeaseLeasesRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseLeasesRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.LeaseLeasesRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.LeaseLeasesRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.LeaseLeasesRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.LeaseLeasesRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.LeaseLeasesRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseLeasesRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.LeaseLeasesRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.LeaseLeasesRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.LeaseLeasesRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.LeaseLeasesRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.LeaseStatus'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaseStatus'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaseStatus'(<<>>, 0, 0, F@_1, + _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.LeaseStatus'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseStatus'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaseStatus'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseStatus'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.LeaseStatus'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseStatus'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.LeaseStatus'(Rest, Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseStatus'(Rest, 0, 0, F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseStatus'(<<>>, 0, 0, F@_1, + _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.LeaseStatus_ID'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseStatus_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaseStatus_ID'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaseStatus'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaseStatus'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaseStatus'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.LeaseStatus'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaseStatus'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseStatus'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaseStatus'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest2, 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.LeaseStatus'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.LeaseStatus'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.LeaseStatus'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseStatus'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.LeaseLeasesResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{leases => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaseLeasesResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaseLeasesResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaseLeasesResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaseLeasesResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.LeaseLeasesResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaseLeasesResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{leases => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.LeaseLeasesResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseLeasesResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseLeasesResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LeaseLeasesResponse_leases'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaseLeasesResponse_leases'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.LeaseLeasesResponse_leases'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaseStatus'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.LeaseLeasesResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaseLeasesResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.LeaseLeasesResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaseLeasesResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaseLeasesResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.LeaseLeasesResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaseLeasesResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaseLeasesResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaseLeasesResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaseLeasesResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.Member'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Bin, 0, 0, + id(0, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), id([], TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.Member'(<<8, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_ID'(Rest, Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_peerURLs'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_clientURLs'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<40, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_Etcd.Member_isLearner'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData); +'dfp_read_field_def_Etcd.Member'(<<>>, 0, 0, F@_1, F@_2, + R1, R2, F@_5, TrUserData) -> + #{'ID' => F@_1, name => F@_2, + peerURLs => lists_reverse(R1, TrUserData), + clientURLs => lists_reverse(R2, TrUserData), + isLearner => F@_5}; +'dfp_read_field_def_Etcd.Member'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dg_read_field_def_Etcd.Member'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'dg_read_field_def_Etcd.Member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.Member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'dg_read_field_def_Etcd.Member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.Member_ID'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 18 -> + 'd_field_Etcd.Member_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 26 -> + 'd_field_Etcd.Member_peerURLs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 34 -> + 'd_field_Etcd.Member_clientURLs'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 40 -> + 'd_field_Etcd.Member_isLearner'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 1 -> + 'skip_64_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.Member'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + TrUserData); + 3 -> + 'skip_group_Etcd.Member'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); + 5 -> + 'skip_32_Etcd.Member'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + end + end; +'dg_read_field_def_Etcd.Member'(<<>>, 0, 0, F@_1, F@_2, + R1, R2, F@_5, TrUserData) -> + #{'ID' => F@_1, name => F@_2, + peerURLs => lists_reverse(R1, TrUserData), + clientURLs => lists_reverse(R2, TrUserData), + isLearner => F@_5}. + +'d_field_Etcd.Member_ID'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_ID'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Member_ID'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +'d_field_Etcd.Member_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Member_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, F@_5, TrUserData). + +'d_field_Etcd.Member_clientURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_clientURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_field_Etcd.Member_clientURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, F@_3, + cons(NewFValue, Prev, TrUserData), F@_5, + TrUserData). + +'d_field_Etcd.Member_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_Etcd.Member_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData); +'d_field_Etcd.Member_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.Member'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, TrUserData). + +'skip_varint_Etcd.Member'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'skip_varint_Etcd.Member'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData); +'skip_varint_Etcd.Member'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_length_delimited_Etcd.Member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.Member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, TrUserData); +'skip_length_delimited_Etcd.Member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.Member'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_group_Etcd.Member'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.Member'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_32_Etcd.Member'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'skip_64_Etcd.Member'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_Etcd.Member'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, TrUserData). + +'decode_msg_Etcd.MemberAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Bin, 0, 0, + id([], TrUserData), + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberAddRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberAddRequest'(<<>>, 0, 0, + R1, F@_2, TrUserData) -> + #{peerURLs => lists_reverse(R1, TrUserData), + isLearner => F@_2}; +'dfp_read_field_def_Etcd.MemberAddRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberAddRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.MemberAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 16 -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberAddRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberAddRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.MemberAddRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberAddRequest'(<<>>, 0, 0, + R1, F@_2, TrUserData) -> + #{peerURLs => lists_reverse(R1, TrUserData), + isLearner => F@_2}. + +'d_field_Etcd.MemberAddRequest_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddRequest_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberAddRequest_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddRequest'(RestF, 0, 0, + cons(NewFValue, Prev, + TrUserData), + F@_2, TrUserData). + +'d_field_Etcd.MemberAddRequest_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddRequest_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberAddRequest_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberAddRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberAddRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.MemberAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberAddRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberAddResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.MemberAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.MemberAddResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{member => F@_2} + end, + if R1 == '$undef' -> S3; + true -> S3#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberAddResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.MemberAddResponse'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.MemberAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberAddResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.MemberAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, 0, 0, + F@_1, F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, 0, 0, + F@_1, F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberAddResponse'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberAddResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberAddResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberAddResponse'(<<>>, 0, 0, + F@_1, F@_2, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{member => F@_2} + end, + if R1 == '$undef' -> S3; + true -> S3#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, TrUserData). + +'d_field_Etcd.MemberAddResponse_member'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_member'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_member'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.Member'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_Etcd.MemberAddResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberAddResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.MemberAddResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberAddResponse'(RestF, 0, 0, + F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.MemberAddResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.MemberAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.MemberAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.MemberAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.MemberAddResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.MemberAddResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.MemberAddResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberAddResponse'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.MemberRemoveRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Bin, 0, 0, + id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberRemoveRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.MemberRemoveRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MemberRemoveRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberRemoveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberRemoveRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberRemoveRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MemberRemoveRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberRemoveRequest'(<<>>, 0, 0, + F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.MemberRemoveRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MemberRemoveRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberRemoveRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MemberRemoveRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MemberRemoveRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MemberRemoveRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberRemoveRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MemberRemoveRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MemberRemoveRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MemberRemoveRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MemberRemoveRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MemberRemoveResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberRemoveResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberRemoveResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberRemoveResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberRemoveResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberRemoveResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberRemoveResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberRemoveResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberRemoveResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberRemoveResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberRemoveResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberRemoveResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberRemoveResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberRemoveResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberRemoveResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberRemoveResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberRemoveResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberRemoveResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberRemoveResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberRemoveResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberRemoveResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberRemoveResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberRemoveResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberRemoveResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberRemoveResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberRemoveResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberUpdateRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Bin, 0, 0, + id(0, TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateRequest'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + #{'ID' => F@_1, + peerURLs => lists_reverse(R1, TrUserData)}; +'dfp_read_field_def_Etcd.MemberUpdateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberUpdateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberUpdateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberUpdateRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberUpdateRequest'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberUpdateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberUpdateRequest'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + #{'ID' => F@_1, + peerURLs => lists_reverse(R1, TrUserData)}. + +'d_field_Etcd.MemberUpdateRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(RestF, 0, + 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.MemberUpdateRequest_peerURLs'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateRequest_peerURLs'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateRequest_peerURLs'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberUpdateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberUpdateRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberUpdateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberUpdateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberUpdateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberUpdateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberUpdateRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberUpdateRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberUpdateRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberUpdateResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberUpdateResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberUpdateResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberUpdateResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberUpdateResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberUpdateResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberUpdateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberUpdateResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberUpdateResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberUpdateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberUpdateResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberUpdateResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberUpdateResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberUpdateResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberUpdateResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberUpdateResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberUpdateResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberUpdateResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberUpdateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberUpdateResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberUpdateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberUpdateResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberUpdateResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberUpdateResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberUpdateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberListRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.MemberListRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.MemberListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.MemberListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberListRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.MemberListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberListRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.MemberListRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberListRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.MemberListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.MemberListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.MemberListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.MemberListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.MemberListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.MemberListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.MemberListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.MemberListRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.MemberListRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.MemberListResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.MemberListResponse_members'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberListResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.MemberListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.MemberListResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberListResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.MemberListResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberListResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberListResponse'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberListResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.MemberListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberListResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberListResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberListResponse_members'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberListResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.MemberListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.MemberListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberListResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.MemberListResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.MemberPromoteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Bin, 0, + 0, id(0, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberPromoteRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}; +'dfp_read_field_def_Etcd.MemberPromoteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MemberPromoteRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberPromoteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberPromoteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.MemberPromoteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberPromoteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberPromoteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MemberPromoteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberPromoteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{'ID' => F@_1}. + +'d_field_Etcd.MemberPromoteRequest_ID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteRequest_ID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MemberPromoteRequest_ID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.MemberPromoteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MemberPromoteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MemberPromoteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MemberPromoteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberPromoteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.MemberPromoteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MemberPromoteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MemberPromoteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MemberPromoteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MemberPromoteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.MemberPromoteResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.MemberPromoteResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.MemberPromoteResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MemberPromoteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MemberPromoteResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.MemberPromoteResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MemberPromoteResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.MemberPromoteResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.MemberPromoteResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.MemberPromoteResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{members => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.MemberPromoteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.MemberPromoteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.MemberPromoteResponse_members'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.MemberPromoteResponse_members'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.MemberPromoteResponse_members'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.Member'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.MemberPromoteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.MemberPromoteResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.MemberPromoteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.MemberPromoteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MemberPromoteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.MemberPromoteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.MemberPromoteResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.MemberPromoteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.MemberPromoteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.MemberPromoteResponse'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.DefragmentRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.DefragmentRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.DefragmentRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.DefragmentRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.DefragmentRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DefragmentRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.DefragmentRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DefragmentRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.DefragmentRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DefragmentRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.DefragmentRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.DefragmentRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.DefragmentRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.DefragmentRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.DefragmentRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.DefragmentRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.DefragmentRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DefragmentRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.DefragmentRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.DefragmentRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.DefragmentRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.DefragmentRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.DefragmentResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.DefragmentResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.DefragmentResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.DefragmentResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.DefragmentResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.DefragmentResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.DefragmentResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.DefragmentResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.DefragmentResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.DefragmentResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.DefragmentResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.DefragmentResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.DefragmentResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.DefragmentResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.DefragmentResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.DefragmentResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.DefragmentResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.DefragmentResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.DefragmentResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.DefragmentResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.DefragmentResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.DefragmentResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.DefragmentResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.DefragmentResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.DefragmentResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.DefragmentResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MoveLeaderRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Bin, 0, 0, + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.MoveLeaderRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MoveLeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{targetID => F@_1}; +'dfp_read_field_def_Etcd.MoveLeaderRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MoveLeaderRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MoveLeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MoveLeaderRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MoveLeaderRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MoveLeaderRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MoveLeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{targetID => F@_1}. + +'d_field_Etcd.MoveLeaderRequest_targetID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MoveLeaderRequest_targetID'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MoveLeaderRequest_targetID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.MoveLeaderRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MoveLeaderRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.MoveLeaderRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MoveLeaderRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MoveLeaderRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MoveLeaderRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.MoveLeaderRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.MoveLeaderRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MoveLeaderRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.MoveLeaderResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.MoveLeaderResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.MoveLeaderResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.MoveLeaderResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.MoveLeaderResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.MoveLeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.MoveLeaderResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.MoveLeaderResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.MoveLeaderResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.MoveLeaderResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.MoveLeaderResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.MoveLeaderResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.MoveLeaderResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.MoveLeaderResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.MoveLeaderResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.MoveLeaderResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.MoveLeaderResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.MoveLeaderResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.MoveLeaderResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.MoveLeaderResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.MoveLeaderResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.MoveLeaderResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.MoveLeaderResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AlarmRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Bin, 0, 0, + id('GET', TrUserData), + id(0, TrUserData), + id('NONE', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmRequest'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_action'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AlarmRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{action => F@_1, memberID => F@_2, alarm => F@_3}; +'dfp_read_field_def_Etcd.AlarmRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.AlarmRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AlarmRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.AlarmRequest_action'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 24 -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmRequest'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{action => F@_1, memberID => F@_2, alarm => F@_3}. + +'d_field_Etcd.AlarmRequest_action'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_action'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_action'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.AlarmRequest.AlarmAction'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_Etcd.AlarmRequest_memberID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_memberID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_memberID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_Etcd.AlarmRequest_alarm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmRequest_alarm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AlarmRequest_alarm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = {id('d_enum_Etcd.AlarmType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_Etcd.AlarmRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.AlarmRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.AlarmRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.AlarmRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_Etcd.AlarmRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.AlarmRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.AlarmRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.AlarmRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.AlarmMember'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Bin, 0, 0, + id(0, TrUserData), + id('NONE', TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmMember'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmMember'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmMember'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{memberID => F@_1, alarm => F@_2}; +'dfp_read_field_def_Etcd.AlarmMember'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmMember'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AlarmMember'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmMember'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AlarmMember'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 16 -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmMember'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmMember'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmMember'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmMember'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{memberID => F@_1, alarm => F@_2}. + +'d_field_Etcd.AlarmMember_memberID'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmMember_memberID'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmMember_memberID'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmMember'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.AlarmMember_alarm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmMember_alarm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmMember_alarm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id('d_enum_Etcd.AlarmType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.AlarmMember'(RestF, 0, 0, F@_1, + NewFValue, TrUserData). + +'skip_varint_Etcd.AlarmMember'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AlarmMember'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AlarmMember'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AlarmMember'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmMember'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AlarmMember'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmMember'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.AlarmMember'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.AlarmMember'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AlarmMember'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmMember'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AlarmResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.AlarmResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.AlarmResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{alarms => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.AlarmResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AlarmResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AlarmResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AlarmResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.AlarmResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AlarmResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AlarmResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AlarmResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AlarmResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AlarmResponse'(<<>>, 0, 0, F@_1, + R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{alarms => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.AlarmResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AlarmResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AlarmResponse_alarms'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AlarmResponse_alarms'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.AlarmResponse_alarms'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.AlarmMember'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AlarmResponse'(RestF, 0, 0, + F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_Etcd.AlarmResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AlarmResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.AlarmResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AlarmResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AlarmResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AlarmResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AlarmResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AlarmResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AlarmResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AlarmResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.StatusRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.StatusRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.StatusRequest'(Other, Z1, Z2, + TrUserData) -> + 'dg_read_field_def_Etcd.StatusRequest'(Other, Z1, Z2, + TrUserData). + +'dg_read_field_def_Etcd.StatusRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.StatusRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.StatusRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.StatusRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.StatusRequest'(Rest, 0, 0, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.StatusRequest'(Rest, 0, 0, + TrUserData); + 3 -> + 'skip_group_Etcd.StatusRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.StatusRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.StatusRequest'(<<>>, 0, 0, _) -> + #{}. + +'skip_varint_Etcd.StatusRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.StatusRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_length_delimited_Etcd.StatusRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.StatusRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'skip_length_delimited_Etcd.StatusRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.StatusRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.StatusRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.StatusRequest'(<<_:32, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'skip_64_Etcd.StatusRequest'(<<_:64, Rest/binary>>, Z1, + Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusRequest'(Rest, Z1, Z2, + TrUserData). + +'decode_msg_Etcd.StatusResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id([], TrUserData), + id(0, TrUserData), + id(false, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.StatusResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_version'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_leader'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_errors'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_Etcd.StatusResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, F@_9, F@_10, TrUserData) -> + S1 = #{version => F@_2, dbSize => F@_3, leader => F@_4, + raftIndex => F@_5, raftTerm => F@_6, + raftAppliedIndex => F@_7, + errors => lists_reverse(R1, TrUserData), + dbSizeInUse => F@_9, isLearner => F@_10}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.StatusResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'dg_read_field_def_Etcd.StatusResponse'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_Etcd.StatusResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.StatusResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_Etcd.StatusResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.StatusResponse_header'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_Etcd.StatusResponse_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 32 -> + 'd_field_Etcd.StatusResponse_leader'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + 48 -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 56 -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 66 -> + 'd_field_Etcd.StatusResponse_errors'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 72 -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); + 80 -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.StatusResponse'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_Etcd.StatusResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.StatusResponse'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 3 -> + 'skip_group_Etcd.StatusResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_Etcd.StatusResponse'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) + end + end; +'dg_read_field_def_Etcd.StatusResponse'(<<>>, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, R1, F@_9, F@_10, TrUserData) -> + S1 = #{version => F@_2, dbSize => F@_3, leader => F@_4, + raftIndex => F@_5, raftTerm => F@_6, + raftAppliedIndex => F@_7, + errors => lists_reverse(R1, TrUserData), + dbSizeInUse => F@_9, isLearner => F@_10}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.StatusResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData). + +'d_field_Etcd.StatusResponse_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, NewFValue, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_dbSize'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_dbSize'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_dbSize'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, NewFValue, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftIndex'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftIndex'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_raftIndex'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, NewFValue, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftTerm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftTerm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_raftTerm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, + NewFValue, F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_raftAppliedIndex'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_raftAppliedIndex'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_raftAppliedIndex'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_errors'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_errors'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_Etcd.StatusResponse_errors'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, Prev, F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, + cons(NewFValue, Prev, TrUserData), + F@_9, F@_10, TrUserData). + +'d_field_Etcd.StatusResponse_dbSizeInUse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_dbSizeInUse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_Etcd.StatusResponse_dbSizeInUse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, NewFValue, F@_10, + TrUserData). + +'d_field_Etcd.StatusResponse_isLearner'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_Etcd.StatusResponse_isLearner'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_Etcd.StatusResponse_isLearner'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.StatusResponse'(RestF, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, NewFValue, + TrUserData). + +'skip_varint_Etcd.StatusResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'skip_varint_Etcd.StatusResponse'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'skip_varint_Etcd.StatusResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_Etcd.StatusResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.StatusResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'skip_length_delimited_Etcd.StatusResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.StatusResponse'(Rest2, 0, 0, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_Etcd.StatusResponse'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, 0, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_32_Etcd.StatusResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_Etcd.StatusResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_Etcd.StatusResponse'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_Etcd.AuthEnableRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthEnableRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.AuthEnableRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthEnableRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthEnableRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthEnableRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.AuthEnableRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthEnableRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthEnableRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthEnableRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthEnableRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthEnableRequest'(Rest, 0, 0, TrUserData) + end; +'dg_read_field_def_Etcd.AuthEnableRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthEnableRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthEnableRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthEnableRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthEnableRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthEnableRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthEnableRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest2, 0, 0, + TrUserData). + +'skip_group_Etcd.AuthEnableRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, 0, Z2, + TrUserData). + +'skip_32_Etcd.AuthEnableRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthEnableRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthDisableRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthDisableRequest'(<<>>, 0, 0, + _) -> + #{}; +'dfp_read_field_def_Etcd.AuthDisableRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthDisableRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthDisableRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthDisableRequest'(Rest, N + 7, + X bsl N + Acc, TrUserData); +'dg_read_field_def_Etcd.AuthDisableRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthDisableRequest'(Rest, 0, + 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthDisableRequest'(Rest, Key bsr 3, 0, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthDisableRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthDisableRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthDisableRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthDisableRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthDisableRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthDisableRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthDisableRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthDisableRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthDisableRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthDisableRequest'(<<_:32, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthDisableRequest'(<<_:64, Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthenticateRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateRequest'(<<>>, 0, + 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}; +'dfp_read_field_def_Etcd.AuthenticateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthenticateRequest'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthenticateRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthenticateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthenticateRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthenticateRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthenticateRequest'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthenticateRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthenticateRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}. + +'d_field_Etcd.AuthenticateRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(RestF, 0, + 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthenticateRequest_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateRequest_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateRequest_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(RestF, 0, + 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthenticateRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthenticateRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthenticateRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthenticateRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthenticateRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthenticateRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthenticateRequest'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthenticateRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthenticateRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{name => F@_1, password => F@_2}, + if F@_3 == '$undef' -> S1; + true -> S1#{options => F@_3} + end; +'dfp_read_field_def_Etcd.AuthUserAddRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserAddRequest'(Other, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserAddRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserAddRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserAddRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserAddRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + S1 = #{name => F@_1, password => F@_2}, + if F@_3 == '$undef' -> S1; + true -> S1#{options => F@_3} + end. + +'d_field_Etcd.AuthUserAddRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.AuthUserAddRequest_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.AuthUserAddRequest_options'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddRequest_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthUserAddRequest_options'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(RestF, 0, + 0, F@_1, F@_2, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.AuthUserAddRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'skip_varint_Etcd.AuthUserAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.AuthUserAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest2, 0, + 0, F@_1, F@_2, F@_3, + TrUserData). + +'skip_group_Etcd.AuthUserAddRequest'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, 0, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_32_Etcd.AuthUserAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.AuthUserAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddRequest'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.AuthUserGetRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGetRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthUserGetRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGetRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGetRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGetRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGetRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGetRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthUserGetRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserGetRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthUserGetRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserGetRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserGetRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserGetRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGetRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserGetRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserGetRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserGetRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserGetRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserDeleteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Bin, 0, + 0, id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserDeleteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserDeleteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthUserDeleteRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserDeleteRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserDeleteRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserDeleteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserDeleteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserDeleteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserDeleteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserDeleteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserDeleteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserDeleteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserChangePasswordRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}; +'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserChangePasswordRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserChangePasswordRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserChangePasswordRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserChangePasswordRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, password => F@_2}. + +'d_field_Etcd.AuthUserChangePasswordRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthUserChangePasswordRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(RestF, + 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserChangePasswordRequest_password'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordRequest_password'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserChangePasswordRequest_password'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(RestF, + 0, 0, F@_1, + NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserChangePasswordRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AuthUserChangePasswordRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserChangePasswordRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserChangePasswordRequest'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserChangePasswordRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserChangePasswordRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthUserGrantRoleRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{user => F@_1, role => F@_2}; +'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGrantRoleRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGrantRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGrantRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{user => F@_1, role => F@_2}. + +'d_field_Etcd.AuthUserGrantRoleRequest_user'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_user'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserGrantRoleRequest_user'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthUserGrantRoleRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleRequest_role'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserGrantRoleRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserGrantRoleRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserGrantRoleRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserGrantRoleRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserGrantRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserGrantRoleRequest'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserGrantRoleRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserGrantRoleRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthUserRevokeRoleRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Bin, + 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, role => F@_2}; +'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserRevokeRoleRequest'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserRevokeRoleRequest'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserRevokeRoleRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + #{name => F@_1, role => F@_2}. + +'d_field_Etcd.AuthUserRevokeRoleRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserRevokeRoleRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_Etcd.AuthUserRevokeRoleRequest_role'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleRequest_role'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'d_field_Etcd.AuthUserRevokeRoleRequest_role'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(RestF, + 0, 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthUserRevokeRoleRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserRevokeRoleRequest'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserRevokeRoleRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthUserRevokeRoleRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthUserRevokeRoleRequest'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthUserRevokeRoleRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthUserRevokeRoleRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthRoleAddRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleAddRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleAddRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleAddRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleAddRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleAddRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleAddRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}. + +'d_field_Etcd.AuthRoleAddRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleAddRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleAddRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthRoleAddRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleAddRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleAddRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleAddRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleAddRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleAddRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleAddRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleAddRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleAddRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGetRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{role => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGetRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGetRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGetRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGetRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGetRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGetRequest'(<<>>, 0, 0, + F@_1, _) -> + #{role => F@_1}. + +'d_field_Etcd.AuthRoleGetRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetRequest_role'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleGetRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.AuthRoleGetRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGetRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleGetRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGetRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGetRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGetRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleGetRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleGetRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleGetRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserListRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserListRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.AuthUserListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.AuthUserListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserListRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserListRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserListRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthUserListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthUserListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthUserListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthUserListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthUserListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthUserListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthUserListRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthUserListRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthRoleListRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Bin, 0, 0, + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleListRequest'(<<>>, 0, + 0, _) -> + #{}; +'dfp_read_field_def_Etcd.AuthRoleListRequest'(Other, Z1, + Z2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleListRequest'(Other, Z1, + Z2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleListRequest'(Rest, + 0, 0, TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleListRequest'(Rest, Key bsr 3, + 0, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleListRequest'(Rest, 0, 0, + TrUserData) + end; +'dg_read_field_def_Etcd.AuthRoleListRequest'(<<>>, 0, 0, + _) -> + #{}. + +'skip_varint_Etcd.AuthRoleListRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleListRequest'(Rest, Z1, Z2, + TrUserData); +'skip_varint_Etcd.AuthRoleListRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleListRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleListRequest'(Rest, + N + 7, X bsl N + Acc, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleListRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest2, 0, + 0, TrUserData). + +'skip_group_Etcd.AuthRoleListRequest'(Bin, FNum, Z2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, 0, + Z2, TrUserData). + +'skip_32_Etcd.AuthRoleListRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'skip_64_Etcd.AuthRoleListRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListRequest'(Rest, Z1, + Z2, TrUserData). + +'decode_msg_Etcd.AuthRoleDeleteRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Bin, 0, + 0, id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{role => F@_1}; +'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleDeleteRequest'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleDeleteRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleDeleteRequest'(<<>>, 0, + 0, F@_1, _) -> + #{role => F@_1}. + +'d_field_Etcd.AuthRoleDeleteRequest_role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleDeleteRequest_role'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleDeleteRequest_role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthRoleDeleteRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleDeleteRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleDeleteRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthRoleDeleteRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleDeleteRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleDeleteRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleDeleteRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteRequest'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGrantPermissionRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + S1 = #{name => F@_1}, + if F@_2 == '$undef' -> S1; + true -> S1#{perm => F@_2} + end; +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGrantPermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGrantPermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, _) -> + S1 = #{name => F@_1}, + if F@_2 == '$undef' -> S1; + true -> S1#{perm => F@_2} + end. + +'d_field_Etcd.AuthRoleGrantPermissionRequest_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionRequest_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(RestF, + 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleGrantPermissionRequest_perm'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionRequest_perm'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionRequest_perm'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(RestF, + 0, 0, F@_1, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_authpb.Permission'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGrantPermissionRequest'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_Etcd.AuthRoleGrantPermissionRequest'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_Etcd.AuthRoleGrantPermissionRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_Etcd.AuthRoleGrantPermissionRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_Etcd.AuthRoleRevokePermissionRequest'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Bin, + 0, 0, + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + id(<<>>, + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + #{role => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleRevokePermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleRevokePermissionRequest'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + _) -> + #{role => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_Etcd.AuthRoleRevokePermissionRequest_role'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_role'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_role'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_Etcd.AuthRoleRevokePermissionRequest_key'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_key'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_key'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionRequest_range_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleRevokePermissionRequest'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_Etcd.AuthRoleRevokePermissionRequest'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_Etcd.AuthRoleRevokePermissionRequest'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_Etcd.AuthRoleRevokePermissionRequest'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionRequest'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_Etcd.AuthEnableResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthEnableResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthEnableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthEnableResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthEnableResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthEnableResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthEnableResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthEnableResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthEnableResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthEnableResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthEnableResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthEnableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthEnableResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthEnableResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthEnableResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthEnableResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthEnableResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthEnableResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthEnableResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthEnableResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthEnableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthEnableResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthEnableResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthEnableResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthEnableResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthEnableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthDisableResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthDisableResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthDisableResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthDisableResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthDisableResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthDisableResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthDisableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthDisableResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthDisableResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthDisableResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthDisableResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthDisableResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthDisableResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthDisableResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthDisableResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthDisableResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthDisableResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthDisableResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthDisableResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthDisableResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthDisableResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthDisableResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthDisableResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthDisableResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthDisableResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthDisableResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthenticateResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthenticateResponse'(<<>>, 0, + 0, F@_1, F@_2, _) -> + S1 = #{token => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthenticateResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthenticateResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthenticateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthenticateResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthenticateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthenticateResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthenticateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthenticateResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthenticateResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthenticateResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthenticateResponse'(<<>>, 0, + 0, F@_1, F@_2, _) -> + S1 = #{token => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthenticateResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthenticateResponse_token'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthenticateResponse_token'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthenticateResponse_token'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(RestF, 0, + 0, F@_1, NewFValue, + TrUserData). + +'skip_varint_Etcd.AuthenticateResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthenticateResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthenticateResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthenticateResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthenticateResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthenticateResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthenticateResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthenticateResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthenticateResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthenticateResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserAddResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserAddResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserAddResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserAddResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserAddResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserAddResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserAddResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserAddResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthUserAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserAddResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserAddResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserAddResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserAddResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserGetResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGetResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGetResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGetResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGetResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserGetResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserGetResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserGetResponse_roles'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGetResponse_roles'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserGetResponse_roles'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthUserGetResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserGetResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserGetResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserGetResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthUserGetResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthUserGetResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthUserGetResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthUserGetResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserDeleteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserDeleteResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserDeleteResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserDeleteResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserDeleteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserDeleteResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserDeleteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserDeleteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserDeleteResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthUserDeleteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthUserDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserDeleteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserDeleteResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthUserDeleteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthUserDeleteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthUserChangePasswordResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserChangePasswordResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserChangePasswordResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserChangePasswordResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserChangePasswordResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserChangePasswordResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserChangePasswordResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthUserChangePasswordResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserChangePasswordResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserChangePasswordResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserChangePasswordResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthUserChangePasswordResponse'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserChangePasswordResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserChangePasswordResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserChangePasswordResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthUserGrantRoleResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, 0, + 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserGrantRoleResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserGrantRoleResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserGrantRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserGrantRoleResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserGrantRoleResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserGrantRoleResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserGrantRoleResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserGrantRoleResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserGrantRoleResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthUserGrantRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthUserGrantRoleResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserGrantRoleResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserGrantRoleResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserGrantRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthUserRevokeRoleResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserRevokeRoleResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserRevokeRoleResponse'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserRevokeRoleResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserRevokeRoleResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserRevokeRoleResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthUserRevokeRoleResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthUserRevokeRoleResponse'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(Rest, + N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthUserRevokeRoleResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthUserRevokeRoleResponse'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthUserRevokeRoleResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthUserRevokeRoleResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserRevokeRoleResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthRoleAddResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleAddResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleAddResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleAddResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleAddResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleAddResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleAddResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleAddResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.AuthRoleAddResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleAddResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleAddResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleAddResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleAddResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleAddResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleAddResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleAddResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleAddResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleAddResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleAddResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGetResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{perm => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGetResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGetResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGetResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGetResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGetResponse'(<<>>, 0, 0, + F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if R1 == '$undef' -> S2; + true -> S2#{perm => lists_reverse(R1, TrUserData)} + end. + +'d_field_Etcd.AuthRoleGetResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleGetResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleGetResponse_perm'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGetResponse_perm'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleGetResponse_perm'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthRoleGetResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGetResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthRoleGetResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGetResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGetResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthRoleGetResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthRoleGetResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthRoleGetResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthRoleGetResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGetResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthRoleListResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleListResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleListResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleListResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleListResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{roles => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthRoleListResponse_roles'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleListResponse_roles'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthRoleListResponse_roles'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthRoleListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthRoleListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthRoleListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleListResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthRoleListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthRoleListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthRoleListResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthRoleListResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthUserListResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Bin, 0, + 0, id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.AuthUserListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{users => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthUserListResponse'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthUserListResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.AuthUserListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthUserListResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'dg_read_field_def_Etcd.AuthUserListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 18 -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthUserListResponse'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.AuthUserListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthUserListResponse'(Rest, + 0, 0, F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthUserListResponse'(Rest, Key bsr 3, + 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthUserListResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthUserListResponse'(<<>>, 0, + 0, F@_1, R1, TrUserData) -> + S1 = #{users => lists_reverse(R1, TrUserData)}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthUserListResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserListResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserListResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(RestF, 0, + 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.AuthUserListResponse_users'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthUserListResponse_users'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.AuthUserListResponse_users'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(RestF, 0, + 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_Etcd.AuthUserListResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.AuthUserListResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'skip_varint_Etcd.AuthUserListResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.AuthUserListResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthUserListResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'skip_length_delimited_Etcd.AuthUserListResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest2, 0, + 0, F@_1, F@_2, TrUserData). + +'skip_group_Etcd.AuthUserListResponse'(Bin, FNum, Z2, + F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, 0, + Z2, F@_1, F@_2, TrUserData). + +'skip_32_Etcd.AuthUserListResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'skip_64_Etcd.AuthUserListResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthUserListResponse'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.AuthRoleDeleteResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Bin, 0, + 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(Other, + Z1, Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleDeleteResponse'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleDeleteResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleDeleteResponse'(<<>>, 0, + 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleDeleteResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleDeleteResponse_header'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_Etcd.AuthRoleDeleteResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(RestF, + 0, 0, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleDeleteResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleDeleteResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.AuthRoleDeleteResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_Etcd.AuthRoleDeleteResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_Etcd.AuthRoleDeleteResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + 0, Z2, F@_1, TrUserData). + +'skip_32_Etcd.AuthRoleDeleteResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'skip_64_Etcd.AuthRoleDeleteResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleDeleteResponse'(Rest, + Z1, Z2, F@_1, TrUserData). + +'decode_msg_Etcd.AuthRoleGrantPermissionResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleGrantPermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleGrantPermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleGrantPermissionResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleGrantPermissionResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthRoleGrantPermissionResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleGrantPermissionResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthRoleGrantPermissionResponse'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthRoleGrantPermissionResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthRoleGrantPermissionResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleGrantPermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.AuthRoleRevokePermissionResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.AuthRoleRevokePermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_Etcd.AuthRoleRevokePermissionResponse'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.AuthRoleRevokePermissionResponse_header'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.AuthRoleRevokePermissionResponse_header'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_Etcd.AuthRoleRevokePermissionResponse_header'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(RestF, + 0, 0, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_Etcd.AuthRoleRevokePermissionResponse'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_Etcd.AuthRoleRevokePermissionResponse'(Bin, + FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_Etcd.AuthRoleRevokePermissionResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_Etcd.AuthRoleRevokePermissionResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.AuthRoleRevokePermissionResponse'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_Etcd.HealthCheckRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.HealthCheckRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HealthCheckRequest'(<<>>, 0, 0, + F@_1, _) -> + #{service => F@_1}; +'dfp_read_field_def_Etcd.HealthCheckRequest'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HealthCheckRequest'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.HealthCheckRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HealthCheckRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.HealthCheckRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HealthCheckRequest'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.HealthCheckRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HealthCheckRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HealthCheckRequest'(<<>>, 0, 0, + F@_1, _) -> + #{service => F@_1}. + +'d_field_Etcd.HealthCheckRequest_service'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HealthCheckRequest_service'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HealthCheckRequest_service'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.HealthCheckRequest'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.HealthCheckRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HealthCheckRequest'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.HealthCheckRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.HealthCheckRequest'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HealthCheckRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.HealthCheckRequest'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.HealthCheckRequest'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.HealthCheckRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.HealthCheckRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckRequest'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.HealthCheckResponse'(Bin, + TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Bin, 0, 0, + id('UNKNOWN', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.HealthCheckResponse'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.HealthCheckResponse'(<<>>, 0, + 0, F@_1, _) -> + #{status => F@_1}; +'dfp_read_field_def_Etcd.HealthCheckResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.HealthCheckResponse'(Other, Z1, + Z2, F@_1, TrUserData). + +'dg_read_field_def_Etcd.HealthCheckResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'dg_read_field_def_Etcd.HealthCheckResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.HealthCheckResponse'(Rest, + 0, 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.HealthCheckResponse'(Rest, Key bsr 3, + 0, F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.HealthCheckResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.HealthCheckResponse'(<<>>, 0, 0, + F@_1, _) -> + #{status => F@_1}. + +'d_field_Etcd.HealthCheckResponse_status'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.HealthCheckResponse_status'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.HealthCheckResponse_status'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_Etcd.HealthCheckResponse.ServingStatus'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_Etcd.HealthCheckResponse'(RestF, 0, + 0, NewFValue, TrUserData). + +'skip_varint_Etcd.HealthCheckResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.HealthCheckResponse'(Rest, Z1, Z2, + F@_1, TrUserData); +'skip_varint_Etcd.HealthCheckResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_length_delimited_Etcd.HealthCheckResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.HealthCheckResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.HealthCheckResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest2, 0, + 0, F@_1, TrUserData). + +'skip_group_Etcd.HealthCheckResponse'(Bin, FNum, Z2, + F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, 0, + Z2, F@_1, TrUserData). + +'skip_32_Etcd.HealthCheckResponse'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'skip_64_Etcd.HealthCheckResponse'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.HealthCheckResponse'(Rest, Z1, + Z2, F@_1, TrUserData). + +'decode_msg_Etcd.LockRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LockRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockRequest_name'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockRequest'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{name => F@_1, lease => F@_2}; +'dfp_read_field_def_Etcd.LockRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LockRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_Etcd.LockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LockRequest_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 16 -> + 'd_field_Etcd.LockRequest_lease'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LockRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LockRequest'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LockRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LockRequest'(<<>>, 0, 0, F@_1, + F@_2, _) -> + #{name => F@_1, lease => F@_2}. + +'d_field_Etcd.LockRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LockRequest'(RestF, 0, 0, + NewFValue, F@_2, TrUserData). + +'d_field_Etcd.LockRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LockRequest'(RestF, 0, 0, F@_1, + NewFValue, TrUserData). + +'skip_varint_Etcd.LockRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LockRequest'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_Etcd.LockRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LockRequest'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_Etcd.LockRequest'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LockRequest'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_Etcd.LockRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LockRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LockResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LockResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LockResponse_key'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LockResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{key => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.LockResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LockResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LockResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LockResponse_key'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LockResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LockResponse'(Rest, Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LockResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LockResponse'(<<>>, 0, 0, F@_1, + F@_2, _) -> + S1 = #{key => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.LockResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LockResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LockResponse_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LockResponse_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LockResponse_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LockResponse'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.LockResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LockResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LockResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LockResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LockResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LockResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LockResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LockResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LockResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.UnlockRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Bin, 0, 0, + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.UnlockRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.UnlockRequest_key'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.UnlockRequest'(<<>>, 0, 0, + F@_1, _) -> + #{key => F@_1}; +'dfp_read_field_def_Etcd.UnlockRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.UnlockRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.UnlockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.UnlockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.UnlockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.UnlockRequest_key'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.UnlockRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.UnlockRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.UnlockRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.UnlockRequest'(<<>>, 0, 0, F@_1, + _) -> + #{key => F@_1}. + +'d_field_Etcd.UnlockRequest_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.UnlockRequest_key'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.UnlockRequest_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.UnlockRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.UnlockRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.UnlockRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.UnlockRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.UnlockRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.UnlockRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.UnlockRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.UnlockRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.UnlockRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.UnlockRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.UnlockResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.UnlockResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.UnlockResponse_header'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.UnlockResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.UnlockResponse'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.UnlockResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.UnlockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.UnlockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.UnlockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.UnlockResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.UnlockResponse'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.UnlockResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.UnlockResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.UnlockResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.UnlockResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.UnlockResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.UnlockResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.UnlockResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.UnlockResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.UnlockResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.UnlockResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.UnlockResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.UnlockResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.UnlockResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.UnlockResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.UnlockResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.UnlockResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.UnlockResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.CampaignRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.CampaignRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_name'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_Etcd.CampaignRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_Etcd.CampaignRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{name => F@_1, lease => F@_2, value => F@_3}; +'dfp_read_field_def_Etcd.CampaignRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_Etcd.CampaignRequest'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_Etcd.CampaignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CampaignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_Etcd.CampaignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CampaignRequest_name'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 16 -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 26 -> + 'd_field_Etcd.CampaignRequest_value'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 1 -> + 'skip_64_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CampaignRequest'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_Etcd.CampaignRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_Etcd.CampaignRequest'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_Etcd.CampaignRequest'(<<>>, 0, 0, + F@_1, F@_2, F@_3, _) -> + #{name => F@_1, lease => F@_2, value => F@_3}. + +'d_field_Etcd.CampaignRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + NewFValue, F@_2, F@_3, + TrUserData). + +'d_field_Etcd.CampaignRequest_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + F@_1, NewFValue, F@_3, + TrUserData). + +'d_field_Etcd.CampaignRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_Etcd.CampaignRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignRequest'(RestF, 0, 0, + F@_1, F@_2, NewFValue, + TrUserData). + +'skip_varint_Etcd.CampaignRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_Etcd.CampaignRequest'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_Etcd.CampaignRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_Etcd.CampaignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CampaignRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, TrUserData); +'skip_length_delimited_Etcd.CampaignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_Etcd.CampaignRequest'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_Etcd.CampaignRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_Etcd.CampaignRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignRequest'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_Etcd.CampaignResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.CampaignResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CampaignResponse_header'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CampaignResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.CampaignResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{leader => F@_2} + end; +'dfp_read_field_def_Etcd.CampaignResponse'(Other, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.CampaignResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.CampaignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.CampaignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.CampaignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.CampaignResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.CampaignResponse'(Rest, 0, + 0, F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.CampaignResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.CampaignResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.CampaignResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{leader => F@_2} + end. + +'d_field_Etcd.CampaignResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CampaignResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.CampaignResponse_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.CampaignResponse_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.CampaignResponse_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.CampaignResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.CampaignResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.CampaignResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.CampaignResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.CampaignResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.CampaignResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.CampaignResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.CampaignResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.CampaignResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.CampaignResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.CampaignResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.LeaderKey'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Bin, 0, 0, + id(<<>>, TrUserData), + id(<<>>, TrUserData), id(0, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaderKey'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<24, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_rev'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + 'd_field_Etcd.LeaderKey_lease'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_Etcd.LeaderKey'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, _) -> + #{name => F@_1, key => F@_2, rev => F@_3, + lease => F@_4}; +'dfp_read_field_def_Etcd.LeaderKey'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderKey'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_Etcd.LeaderKey'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderKey'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_Etcd.LeaderKey'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderKey_name'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 18 -> + 'd_field_Etcd.LeaderKey_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 24 -> + 'd_field_Etcd.LeaderKey_rev'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 32 -> + 'd_field_Etcd.LeaderKey_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 1 -> + 'skip_64_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderKey'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaderKey'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderKey'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderKey'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, _) -> + #{name => F@_1, key => F@_2, rev => F@_3, + lease => F@_4}. + +'d_field_Etcd.LeaderKey_name'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_name'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaderKey_name'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, + TrUserData). + +'d_field_Etcd.LeaderKey_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_key'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_Etcd.LeaderKey_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_Etcd.LeaderKey_rev'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_rev'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_Etcd.LeaderKey_rev'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, TrUserData). + +'d_field_Etcd.LeaderKey_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderKey_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_Etcd.LeaderKey_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_Etcd.LeaderKey'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, TrUserData). + +'skip_varint_Etcd.LeaderKey'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_Etcd.LeaderKey'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_Etcd.LeaderKey'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderKey'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, TrUserData); +'skip_length_delimited_Etcd.LeaderKey'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderKey'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_Etcd.LeaderKey'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_Etcd.LeaderKey'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_Etcd.LeaderKey'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderKey'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_Etcd.LeaderRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Bin, 0, 0, + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.LeaderRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.LeaderRequest_name'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.LeaderRequest'(<<>>, 0, 0, + F@_1, _) -> + #{name => F@_1}; +'dfp_read_field_def_Etcd.LeaderRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.LeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.LeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderRequest_name'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.LeaderRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderRequest'(<<>>, 0, 0, F@_1, + _) -> + #{name => F@_1}. + +'d_field_Etcd.LeaderRequest_name'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderRequest_name'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.LeaderRequest_name'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderRequest'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_Etcd.LeaderRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.LeaderRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.LeaderRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.LeaderRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.LeaderRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.LeaderRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.LeaderRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.LeaderRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.LeaderResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Bin, 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.LeaderResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaderResponse_header'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaderResponse'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.LeaderResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{kv => F@_2} + end; +'dfp_read_field_def_Etcd.LeaderResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.LeaderResponse'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.LeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.LeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.LeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.LeaderResponse_header'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.LeaderResponse'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.LeaderResponse'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.LeaderResponse'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.LeaderResponse'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{kv => F@_2} + end. + +'d_field_Etcd.LeaderResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaderResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.LeaderResponse_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.LeaderResponse_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.LeaderResponse_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.LeaderResponse'(RestF, 0, 0, + F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.LeaderResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.LeaderResponse'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.LeaderResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.LeaderResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.LeaderResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'skip_length_delimited_Etcd.LeaderResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.LeaderResponse'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.LeaderResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.LeaderResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.LeaderResponse'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.ResignRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ResignRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResignRequest_leader'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.ResignRequest'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end; +'dfp_read_field_def_Etcd.ResignRequest'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResignRequest'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ResignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResignRequest_leader'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResignRequest'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResignRequest'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ResignRequest'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ResignRequest'(<<>>, 0, 0, F@_1, + _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end. + +'d_field_Etcd.ResignRequest_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResignRequest_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResignRequest_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResignRequest'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResignRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResignRequest'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResignRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ResignRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResignRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'skip_length_delimited_Etcd.ResignRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResignRequest'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ResignRequest'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ResignRequest'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ResignRequest'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignRequest'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.ResignResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ResignResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ResignResponse_header'(Rest, Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_Etcd.ResignResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.ResignResponse'(Other, Z1, Z2, + F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ResignResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ResignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ResignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ResignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ResignResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ResignResponse'(Rest, 0, 0, + F@_1, TrUserData); + 3 -> + 'skip_group_Etcd.ResignResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ResignResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ResignResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.ResignResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ResignResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ResignResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ResignResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ResignResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ResignResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ResignResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ResignResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ResignResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.ResignResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ResignResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ResignResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ResignResponse'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ResignResponse'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ResignResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_Etcd.ProclaimRequest'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Bin, 0, 0, + id('$undef', TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_Etcd.ProclaimRequest'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData); +'dfp_read_field_def_Etcd.ProclaimRequest'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_Etcd.ProclaimRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{value => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end; +'dfp_read_field_def_Etcd.ProclaimRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dg_read_field_def_Etcd.ProclaimRequest'(Other, Z1, Z2, + F@_1, F@_2, TrUserData). + +'dg_read_field_def_Etcd.ProclaimRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ProclaimRequest'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'dg_read_field_def_Etcd.ProclaimRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 18 -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 1 -> + 'skip_64_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ProclaimRequest'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 3 -> + 'skip_group_Etcd.ProclaimRequest'(Rest, Key bsr 3, 0, + F@_1, F@_2, TrUserData); + 5 -> + 'skip_32_Etcd.ProclaimRequest'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ProclaimRequest'(<<>>, 0, 0, + F@_1, F@_2, _) -> + S1 = #{value => F@_2}, + if F@_1 == '$undef' -> S1; + true -> S1#{leader => F@_1} + end. + +'d_field_Etcd.ProclaimRequest_leader'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimRequest_leader'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, + TrUserData); +'d_field_Etcd.ProclaimRequest_leader'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.LeaderKey'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimRequest'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.LeaderKey'(Prev, + NewFValue, + TrUserData) + end, + F@_2, TrUserData). + +'d_field_Etcd.ProclaimRequest_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimRequest_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_Etcd.ProclaimRequest_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimRequest'(RestF, 0, 0, + F@_1, NewFValue, TrUserData). + +'skip_varint_Etcd.ProclaimRequest'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_Etcd.ProclaimRequest'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'skip_varint_Etcd.ProclaimRequest'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_length_delimited_Etcd.ProclaimRequest'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ProclaimRequest'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, TrUserData); +'skip_length_delimited_Etcd.ProclaimRequest'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest2, 0, 0, + F@_1, F@_2, TrUserData). + +'skip_group_Etcd.ProclaimRequest'(Bin, FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, 0, Z2, + F@_1, F@_2, TrUserData). + +'skip_32_Etcd.ProclaimRequest'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'skip_64_Etcd.ProclaimRequest'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimRequest'(Rest, Z1, Z2, + F@_1, F@_2, TrUserData). + +'decode_msg_Etcd.ProclaimResponse'(Bin, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Bin, 0, 0, + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_Etcd.ProclaimResponse'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, Z1, Z2, + F@_1, TrUserData); +'dfp_read_field_def_Etcd.ProclaimResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end; +'dfp_read_field_def_Etcd.ProclaimResponse'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_Etcd.ProclaimResponse'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_Etcd.ProclaimResponse'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_Etcd.ProclaimResponse'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_Etcd.ProclaimResponse'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_Etcd.ProclaimResponse'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_Etcd.ProclaimResponse'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_Etcd.ProclaimResponse'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_Etcd.ProclaimResponse'(<<>>, 0, 0, + F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{header => F@_1} + end. + +'d_field_Etcd.ProclaimResponse_header'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_Etcd.ProclaimResponse_header'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'d_field_Etcd.ProclaimResponse_header'(<<0:1, X:7, + Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_Etcd.ResponseHeader'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_Etcd.ProclaimResponse'(RestF, 0, 0, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_Etcd.ResponseHeader'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_Etcd.ProclaimResponse'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_Etcd.ProclaimResponse'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_Etcd.ProclaimResponse'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_Etcd.ProclaimResponse'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_Etcd.ProclaimResponse'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_Etcd.ProclaimResponse'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_Etcd.ProclaimResponse'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_Etcd.ProclaimResponse'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_Etcd.ProclaimResponse'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_Etcd.ProclaimResponse'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_google.protobuf.FileDescriptorSet'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorSet'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorSet'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorSet'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{file => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.FileDescriptorSet_file'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorSet_file'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'d_field_google.protobuf.FileDescriptorSet_file'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorSet'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.FileDescriptorSet'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorSet'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorSet'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.FileDescriptorSet'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.FileDescriptorSet'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.FileDescriptorSet'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorSet'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.FileDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<88, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<98, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end; +'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); + 18 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 26 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 82 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 90 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 88 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 34 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 42 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 50 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 58 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 66 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 74 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 98 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, R1, + R2, R3, R4, R5, R6, R7, + F@_10, F@_11, F@_12, + TrUserData) -> + S1 = #{dependency => lists_reverse(R1, TrUserData), + public_dependency => lists_reverse(R2, TrUserData), + weak_dependency => lists_reverse(R3, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{package => F@_2} + end, + S4 = if R4 == '$undef' -> S3; + true -> + S3#{message_type => lists_reverse(R4, TrUserData)} + end, + S5 = if R5 == '$undef' -> S4; + true -> S4#{enum_type => lists_reverse(R5, TrUserData)} + end, + S6 = if R6 == '$undef' -> S5; + true -> S5#{service => lists_reverse(R6, TrUserData)} + end, + S7 = if R7 == '$undef' -> S6; + true -> S6#{extension => lists_reverse(R7, TrUserData)} + end, + S8 = if F@_10 == '$undef' -> S7; + true -> S7#{options => F@_10} + end, + S9 = if F@_11 == '$undef' -> S8; + true -> S8#{source_code_info => F@_11} + end, + if F@_12 == '$undef' -> S9; + true -> S9#{syntax => F@_12} + end. + +'d_field_google.protobuf.FileDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_dependency'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, + Prev, + TrUserData), + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + Prev, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + cons(NewFValue, + Prev, + TrUserData), + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, E, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, NewSeq, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(Rest, + N + + 7, + X bsl + N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_public_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + cons(NewFValue, + Prev, + TrUserData), + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_pfield_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + E, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(PackedBytes, + 0, + 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, NewSeq, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(Rest, + N + 7, + X bsl N + + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.FileDescriptorProto_weak_dependency'(<<>>, + 0, 0, + AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_message_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_message_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + cons(NewFValue, + Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_enum_type'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + Prev, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + cons(NewFValue, + Prev, + TrUserData), + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_service'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_service'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_service'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + Prev, F@_9, F@_10, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + cons(NewFValue, + Prev, + TrUserData), + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_extension'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, F@_10, + F@_11, F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + cons(NewFValue, + Prev, + TrUserData), + F@_10, F@_11, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, F@_11, + F@_12, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FileOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FileOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_11, F@_12, + TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_source_code_info'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'d_field_google.protobuf.FileDescriptorProto_source_code_info'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, Prev, + F@_12, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, + NewFValue, + TrUserData) + end, + F@_12, TrUserData). + +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileDescriptorProto_syntax'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData); +'d_field_google.protobuf.FileDescriptorProto_syntax'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'skip_varint_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, TrUserData); +'skip_varint_google.protobuf.FileDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + TrUserData); +'skip_length_delimited_google.protobuf.FileDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_group_google.protobuf.FileDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_32_google.protobuf.FileDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'skip_64_google.protobuf.FileDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<8, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<16, + Rest/binary>>, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_start'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ExtensionRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ExtensionRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + N + + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ExtensionRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ExtensionRange'(Bin, + FNum, Z2, F@_1, + F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ExtensionRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ExtensionRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ExtensionRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Other, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{start => F@_1} + end, + if F@_2 == '$undef' -> S2; + true -> S2#{'end' => F@_2} + end. + +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_start'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_start'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto.ReservedRange_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.DescriptorProto.ReservedRange_end'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto.ReservedRange'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto.ReservedRange'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.DescriptorProto.ReservedRange'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.DescriptorProto.ReservedRange'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto.ReservedRange'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.DescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<74, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.DescriptorProto'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dg_read_field_def_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 50 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 26 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 34 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 42 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 74 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.DescriptorProto'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.DescriptorProto'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.DescriptorProto'(<<>>, + 0, 0, F@_1, R1, R2, R3, R4, + R5, R6, F@_8, R7, R8, + TrUserData) -> + S1 = #{reserved_name => lists_reverse(R8, TrUserData)}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{field => lists_reverse(R1, TrUserData)} + end, + S4 = if R2 == '$undef' -> S3; + true -> S3#{extension => lists_reverse(R2, TrUserData)} + end, + S5 = if R3 == '$undef' -> S4; + true -> + S4#{nested_type => lists_reverse(R3, TrUserData)} + end, + S6 = if R4 == '$undef' -> S5; + true -> S5#{enum_type => lists_reverse(R4, TrUserData)} + end, + S7 = if R5 == '$undef' -> S6; + true -> + S6#{extension_range => lists_reverse(R5, TrUserData)} + end, + S8 = if R6 == '$undef' -> S7; + true -> S7#{oneof_decl => lists_reverse(R6, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{options => F@_8} + end, + if R7 == '$undef' -> S9; + true -> + S9#{reserved_range => lists_reverse(R7, TrUserData)} + end. + +'d_field_google.protobuf.DescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_field'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_field'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_field'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_nested_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_nested_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_nested_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + Prev, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + cons(NewFValue, Prev, + TrUserData), + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_enum_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_enum_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_enum_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_extension_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_extension_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_extension_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + Prev, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ExtensionRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, + cons(NewFValue, Prev, + TrUserData), + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_oneof_decl'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_oneof_decl'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, Prev, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.OneofDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, Prev, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MessageOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + if Prev == '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_range'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_range'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, Prev, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.DescriptorProto.ReservedRange'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, + cons(NewFValue, Prev, + TrUserData), + F@_10, TrUserData). + +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.DescriptorProto_reserved_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.DescriptorProto_reserved_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.DescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'skip_varint_google.protobuf.DescriptorProto'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData); +'skip_varint_google.protobuf.DescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_length_delimited_google.protobuf.DescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.DescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.DescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.DescriptorProto'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_32_google.protobuf.DescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'skip_64_google.protobuf.DescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.DescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData). + +'decode_msg_google.protobuf.FieldDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<82, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end; +'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 32 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 50 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 18 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 58 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 72 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 82 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 66 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{label => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{type => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{type_name => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{extendee => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{default_value => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{oneof_index => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{json_name => F@_9} + end, + if F@_10 == '$undef' -> S10; + true -> S10#{options => F@_10} + end. + +'d_field_google.protobuf.FieldDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_number'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_label'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_label'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_label'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Label'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldDescriptorProto.Type'(begin + <> = + <<(X bsl N + + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_type_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_type_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_extendee'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_extendee'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_default_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_default_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, + F@_9, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + F@_8, F@_9, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_oneof_index'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, + TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_oneof_index'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + NewFValue, F@_9, + F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_json_name'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_json_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, _, F@_10, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + NewFValue, F@_10, + TrUserData). + +'d_field_google.protobuf.FieldDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, TrUserData); +'d_field_google.protobuf.FieldDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.FieldOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.FieldDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'skip_varint_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData); +'skip_varint_google.protobuf.FieldDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + TrUserData); +'skip_length_delimited_google.protobuf.FieldDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_group_google.protobuf.FieldDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + TrUserData). + +'skip_32_google.protobuf.FieldDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'skip_64_google.protobuf.FieldDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + TrUserData). + +'decode_msg_google.protobuf.OneofDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end; +'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + 0, + 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.OneofDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.OneofDescriptorProto'(Rest, 0, + 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.OneofDescriptorProto'(<<>>, + 0, 0, F@_1, _) -> + S1 = #{}, + if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end. + +'d_field_google.protobuf.OneofDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.OneofDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.OneofDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(RestF, + 0, 0, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.OneofDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData); +'skip_varint_google.protobuf.OneofDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.OneofDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, + TrUserData); +'skip_length_delimited_google.protobuf.OneofDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.OneofDescriptorProto'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.OneofDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.OneofDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.OneofDescriptorProto'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.EnumDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{value => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_value'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumDescriptorProto_options'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.EnumValueDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 16 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, + F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{number => F@_2} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_name'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, + NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_number'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_number'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, + F@_3, + TrUserData). + +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.EnumValueOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.EnumValueDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.EnumValueDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.EnumValueDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.EnumValueDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.ServiceDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, + F@_3, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end; +'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 18 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceDescriptorProto'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceDescriptorProto'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> S2#{method => lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{options => F@_3} + end. + +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_method'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_method'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, + F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodDescriptorProto'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, + TrUserData). + +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.ServiceDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.ServiceOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(RestF, + 0, 0, F@_1, + F@_2, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_google.protobuf.ServiceDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_group_google.protobuf.ServiceDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_32_google.protobuf.ServiceDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'skip_64_google.protobuf.ServiceDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + TrUserData). + +'decode_msg_google.protobuf.MethodDescriptorProto'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end; +'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData); + 18 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 26 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 34 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 40 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 48 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodDescriptorProto'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodDescriptorProto'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodDescriptorProto'(<<>>, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{name => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{input_type => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{output_type => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{options => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{client_streaming => F@_5} + end, + if F@_6 == '$undef' -> S6; + true -> S6#{server_streaming => F@_6} + end. + +'d_field_google.protobuf.MethodDescriptorProto_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, NewFValue, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_input_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_input_type'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_output_type'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_output_type'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_options'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_options'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_options'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, Prev, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.MethodOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, + if Prev == + '$undef' -> + NewFValue; + true -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, + NewFValue, + TrUserData) + end, + F@_5, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_client_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_client_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, + NewFValue, F@_6, + TrUserData). + +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodDescriptorProto_server_streaming'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'d_field_google.protobuf.MethodDescriptorProto_server_streaming'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MethodDescriptorProto'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); +'skip_varint_google.protobuf.MethodDescriptorProto'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodDescriptorProto'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + TrUserData); +'skip_length_delimited_google.protobuf.MethodDescriptorProto'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, + TrUserData). + +'skip_group_google.protobuf.MethodDescriptorProto'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_32_google.protobuf.MethodDescriptorProto'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'skip_64_google.protobuf.MethodDescriptorProto'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodDescriptorProto'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, + TrUserData). + +'decode_msg_google.protobuf.FileOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FileOptions'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<72, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<90, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 1, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<162, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<170, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 225, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<176, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<184, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<192, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<200, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<208, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<216, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<224, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<232, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<240, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<248, + 226, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<128, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<136, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<144, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<152, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<160, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<168, + 227, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dfp_read_field_def_google.protobuf.FileOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, R1, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end; +'dfp_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dg_read_field_def_google.protobuf.FileOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'dg_read_field_def_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'dg_read_field_def_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 66 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 80 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 160 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 216 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 72 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 90 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 128 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 136 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 144 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 184 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 248 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 290 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 298 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 304 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504008 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504016 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504024 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504032 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504040 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504048 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504056 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504064 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504072 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504104 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504112 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504120 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + 504128 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData); + 504136 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504144 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504152 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504160 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 504168 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504176 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504184 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504192 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504200 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504208 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 504216 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); + 504224 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); + 504232 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FileOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FileOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FileOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FileOptions'(<<>>, 0, + 0, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, R1, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{java_package => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{java_outer_classname => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{java_multiple_files => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{java_generate_equals_and_hash => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{java_string_check_utf8 => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{optimize_for => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{go_package => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{cc_generic_services => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{java_generic_services => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{py_generic_services => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{deprecated => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{cc_enable_arenas => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{objc_class_prefix => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{csharp_namespace => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{javanano_use_deprecated_package => F@_15} + end, + S17 = if R1 == '$undef' -> S16; + true -> + S16#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{goproto_getters_all => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{goproto_enum_prefix_all => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{goproto_stringer_all => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{verbose_equal_all => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{face_all => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{gostring_all => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{populate_all => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{stringer_all => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{onlyone_all => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{equal_all => F@_26} + end, + S28 = if F@_27 == '$undef' -> S27; + true -> S27#{description_all => F@_27} + end, + S29 = if F@_28 == '$undef' -> S28; + true -> S28#{testgen_all => F@_28} + end, + S30 = if F@_29 == '$undef' -> S29; + true -> S29#{benchgen_all => F@_29} + end, + S31 = if F@_30 == '$undef' -> S30; + true -> S30#{marshaler_all => F@_30} + end, + S32 = if F@_31 == '$undef' -> S31; + true -> S31#{unmarshaler_all => F@_31} + end, + S33 = if F@_32 == '$undef' -> S32; + true -> S32#{stable_marshaler_all => F@_32} + end, + S34 = if F@_33 == '$undef' -> S33; + true -> S33#{sizer_all => F@_33} + end, + S35 = if F@_34 == '$undef' -> S34; + true -> S34#{goproto_enum_stringer_all => F@_34} + end, + S36 = if F@_35 == '$undef' -> S35; + true -> S35#{enum_stringer_all => F@_35} + end, + S37 = if F@_36 == '$undef' -> S36; + true -> S36#{unsafe_marshaler_all => F@_36} + end, + S38 = if F@_37 == '$undef' -> S37; + true -> S37#{unsafe_unmarshaler_all => F@_37} + end, + S39 = if F@_38 == '$undef' -> S38; + true -> S38#{goproto_extensions_map_all => F@_38} + end, + S40 = if F@_39 == '$undef' -> S39; + true -> S39#{goproto_unrecognized_all => F@_39} + end, + S41 = if F@_40 == '$undef' -> S40; + true -> S40#{gogoproto_import => F@_40} + end, + S42 = if F@_41 == '$undef' -> S41; + true -> S41#{protosizer_all => F@_41} + end, + if F@_42 == '$undef' -> S42; + true -> S42#{compare_all => F@_42} + end. + +'d_field_google.protobuf.FileOptions_java_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_package'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_java_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_outer_classname'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_outer_classname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_multiple_files'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_multiple_files'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generate_equals_and_hash'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_string_check_utf8'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_string_check_utf8'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_optimize_for'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_optimize_for'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_optimize_for'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FileOptions.OptimizeMode'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, + TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_go_package'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_go_package'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_go_package'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_java_generic_services'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_java_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_java_generic_services'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, _, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_py_generic_services'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_py_generic_services'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_py_generic_services'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, _, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_cc_enable_arenas'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_cc_enable_arenas'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + _, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_objc_class_prefix'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_objc_class_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_csharp_namespace'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_csharp_namespace'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, _, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(Rest, + N + 7, + X bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_javanano_use_deprecated_package'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, _, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, Prev, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + cons(NewFValue, Prev, + TrUserData), + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_getters_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_getters_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, _, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, NewFValue, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_prefix_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, _, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, NewFValue, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_stringer_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, _, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + NewFValue, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_verbose_equal_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_verbose_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_face_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_face_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_face_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_gostring_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gostring_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_gostring_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, _, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_populate_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_populate_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_populate_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, _, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stringer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, _, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + NewFValue, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_onlyone_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_onlyone_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_onlyone_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, _, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, NewFValue, F@_26, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_equal_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_equal_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_equal_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, _, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, NewFValue, + F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_description_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_description_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_description_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, _, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + NewFValue, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_testgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_testgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_testgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, _, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + NewFValue, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_benchgen_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_benchgen_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_benchgen_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + _, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, NewFValue, F@_30, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_marshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, _, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, NewFValue, + F@_31, F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unmarshaler_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unmarshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, _, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + NewFValue, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_stable_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_stable_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, _, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + NewFValue, F@_33, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_sizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_sizer_all'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_sizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, _, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, NewFValue, F@_34, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_enum_stringer_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, _, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, NewFValue, + F@_35, F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_enum_stringer_all'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_enum_stringer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, _, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, + NewFValue, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_marshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_marshaler_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + _, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + NewFValue, F@_37, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_unsafe_unmarshaler_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, _, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, NewFValue, F@_38, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_extensions_map_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + F@_28, + F@_29, + F@_30, + F@_31, + F@_32, + F@_33, + F@_34, + F@_35, + F@_36, + F@_37, + F@_38, + F@_39, + F@_40, + F@_41, + F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_extensions_map_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + _, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, NewFValue, + F@_39, F@_40, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, F@_39, + F@_40, F@_41, + F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_goproto_unrecognized_all'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, F@_28, + F@_29, F@_30, + F@_31, F@_32, + F@_33, F@_34, + F@_35, F@_36, + F@_37, F@_38, + F@_39, F@_40, + F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_goproto_unrecognized_all'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + F@_28, F@_29, + F@_30, F@_31, + F@_32, F@_33, + F@_34, F@_35, + F@_36, F@_37, + F@_38, _, F@_40, + F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + NewFValue, F@_40, F@_41, + F@_42, TrUserData). + +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_gogoproto_import'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_gogoproto_import'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, _, F@_41, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + NewFValue, F@_41, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_protosizer_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_protosizer_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'d_field_google.protobuf.FileOptions_protosizer_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, _, F@_42, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, NewFValue, F@_42, + TrUserData). + +'d_field_google.protobuf.FileOptions_compare_all'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FileOptions_compare_all'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, + F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData); +'d_field_google.protobuf.FileOptions_compare_all'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, F@_28, + F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, + F@_41, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FileOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.FileOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'skip_varint_google.protobuf.FileOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, F@_28, F@_29, F@_30, + F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, + F@_41, F@_42, TrUserData); +'skip_varint_google.protobuf.FileOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, F@_36, + F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_length_delimited_google.protobuf.FileOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FileOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, + F@_39, F@_40, F@_41, + F@_42, TrUserData); +'skip_length_delimited_google.protobuf.FileOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_group_google.protobuf.FileOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, F@_32, + F@_33, F@_34, F@_35, F@_36, F@_37, + F@_38, F@_39, F@_40, F@_41, F@_42, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_32_google.protobuf.FileOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'skip_64_google.protobuf.FileOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, F@_28, F@_29, + F@_30, F@_31, F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, F@_40, F@_41, + F@_42, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FileOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + F@_28, F@_29, F@_30, F@_31, + F@_32, F@_33, F@_34, F@_35, + F@_36, F@_37, F@_38, F@_39, + F@_40, F@_41, F@_42, + TrUserData). + +'decode_msg_google.protobuf.MessageOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MessageOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<56, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<168, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<176, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 220, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<240, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<248, + 160, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<128, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<136, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<144, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<152, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<160, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<184, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<192, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<200, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<208, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<224, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<232, + 161, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData); +'dfp_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, + F@_4, R1, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end; +'dfp_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData). + +'dg_read_field_def_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'dg_read_field_def_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 16 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 24 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 56 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512008 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512024 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512032 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512040 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512048 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512056 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 536064 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512072 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512104 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512112 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512120 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512128 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 512136 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512144 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512152 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512160 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 512184 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512192 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512200 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512208 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 512224 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); + 512232 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MessageOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData); + 5 -> + 'skip_32_google.protobuf.MessageOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MessageOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + R1, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{message_set_wire_format => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{no_standard_descriptor_accessor => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{deprecated => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{map_entry => F@_4} + end, + S6 = if R1 == '$undef' -> S5; + true -> + S5#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{goproto_getters => F@_6} + end, + S8 = if F@_7 == '$undef' -> S7; + true -> S7#{goproto_stringer => F@_7} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{verbose_equal => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{face => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{gostring => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{populate => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{stringer => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{onlyone => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{equal => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{description => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{testgen => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{benchgen => F@_17} + end, + S19 = if F@_18 == '$undef' -> S18; + true -> S18#{marshaler => F@_18} + end, + S20 = if F@_19 == '$undef' -> S19; + true -> S19#{unmarshaler => F@_19} + end, + S21 = if F@_20 == '$undef' -> S20; + true -> S20#{stable_marshaler => F@_20} + end, + S22 = if F@_21 == '$undef' -> S21; + true -> S21#{sizer => F@_21} + end, + S23 = if F@_22 == '$undef' -> S22; + true -> S22#{unsafe_marshaler => F@_22} + end, + S24 = if F@_23 == '$undef' -> S23; + true -> S23#{unsafe_unmarshaler => F@_23} + end, + S25 = if F@_24 == '$undef' -> S24; + true -> S24#{goproto_extensions_map => F@_24} + end, + S26 = if F@_25 == '$undef' -> S25; + true -> S25#{goproto_unrecognized => F@_25} + end, + S27 = if F@_26 == '$undef' -> S26; + true -> S26#{protosizer => F@_26} + end, + if F@_27 == '$undef' -> S27; + true -> S27#{compare => F@_27} + end. + +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_message_set_wire_format'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_message_set_wire_format'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(Rest, + N + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_no_standard_descriptor_accessor'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, + _, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_map_entry'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_map_entry'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_map_entry'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + Prev, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, + cons(NewFValue, Prev, + TrUserData), + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_getters'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_getters'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, _, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_verbose_equal'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_verbose_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + _, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_face'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_face'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_face'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_gostring'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_gostring'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_gostring'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_populate'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_populate'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_populate'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, _, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, NewFValue, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_onlyone'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_onlyone'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_onlyone'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, NewFValue, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_equal'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_equal'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_equal'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + NewFValue, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_description'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_description'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_description'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, _, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, NewFValue, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_testgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_testgen'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_testgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, NewFValue, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_benchgen'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_benchgen'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_benchgen'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, _, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + NewFValue, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_marshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, NewFValue, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unmarshaler'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_unmarshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, _, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, NewFValue, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_stable_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_stable_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, _, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + NewFValue, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_sizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_sizer'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_sizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, _, F@_22, + F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, NewFValue, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_marshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_marshaler'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, _, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, NewFValue, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_unsafe_unmarshaler'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, _, + F@_24, F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + NewFValue, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, + F@_24, F@_25, + F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_extensions_map'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + F@_19, + F@_20, + F@_21, + F@_22, + F@_23, + F@_24, + F@_25, + F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_extensions_map'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, F@_19, + F@_20, F@_21, + F@_22, F@_23, _, + F@_25, F@_26, + F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, NewFValue, F@_25, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_goproto_unrecognized'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, + F@_25, F@_26, + F@_27, + TrUserData); +'d_field_google.protobuf.MessageOptions_goproto_unrecognized'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + F@_19, F@_20, + F@_21, F@_22, + F@_23, F@_24, _, + F@_26, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, NewFValue, + F@_26, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_protosizer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, F@_27, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_protosizer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_protosizer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, + F@_24, F@_25, _, F@_27, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + NewFValue, F@_27, + TrUserData). + +'d_field_google.protobuf.MessageOptions_compare'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MessageOptions_compare'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'d_field_google.protobuf.MessageOptions_compare'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MessageOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.MessageOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'skip_varint_google.protobuf.MessageOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData); +'skip_varint_google.protobuf.MessageOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_length_delimited_google.protobuf.MessageOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MessageOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, + F@_25, F@_26, F@_27, + TrUserData); +'skip_length_delimited_google.protobuf.MessageOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, + F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_group_google.protobuf.MessageOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, F@_19, F@_20, + F@_21, F@_22, F@_23, F@_24, F@_25, + F@_26, F@_27, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_32_google.protobuf.MessageOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'skip_64_google.protobuf.MessageOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, F@_20, F@_21, + F@_22, F@_23, F@_24, F@_25, F@_26, + F@_27, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MessageOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, F@_19, + F@_20, F@_21, F@_22, + F@_23, F@_24, F@_25, + F@_26, F@_27, + TrUserData). + +'decode_msg_google.protobuf.FieldOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.FieldOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<80, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<200, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<208, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<218, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<226, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<234, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<242, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<250, + 222, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<130, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<138, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<144, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<152, + 223, 31, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dfp_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end; +'dfp_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'dg_read_field_def_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'dg_read_field_def_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 16 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 48 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 40 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 24 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 80 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 7994 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + F@_8, + F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 520008 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520016 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520026 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520034 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520042 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520050 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520058 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 520066 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520074 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); + 520080 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, 0, + 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 520088 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, + F@_14, F@_15, + F@_16, F@_17, + F@_18, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 1 -> + 'skip_64_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + F@_8, F@_9, + F@_10, + F@_11, + F@_12, + F@_13, + F@_14, + F@_15, + F@_16, + F@_17, + F@_18, + TrUserData); + 3 -> + 'skip_group_google.protobuf.FieldOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, + TrUserData); + 5 -> + 'skip_32_google.protobuf.FieldOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.FieldOptions'(<<>>, + 0, 0, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, R1, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{ctype => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{packed => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{jstype => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{lazy => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{deprecated => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{weak => F@_6} + end, + S8 = if R1 == '$undef' -> S7; + true -> + S7#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S9 = if F@_8 == '$undef' -> S8; + true -> S8#{nullable => F@_8} + end, + S10 = if F@_9 == '$undef' -> S9; + true -> S9#{embed => F@_9} + end, + S11 = if F@_10 == '$undef' -> S10; + true -> S10#{customtype => F@_10} + end, + S12 = if F@_11 == '$undef' -> S11; + true -> S11#{customname => F@_11} + end, + S13 = if F@_12 == '$undef' -> S12; + true -> S12#{jsontag => F@_12} + end, + S14 = if F@_13 == '$undef' -> S13; + true -> S13#{moretags => F@_13} + end, + S15 = if F@_14 == '$undef' -> S14; + true -> S14#{casttype => F@_14} + end, + S16 = if F@_15 == '$undef' -> S15; + true -> S15#{castkey => F@_15} + end, + S17 = if F@_16 == '$undef' -> S16; + true -> S16#{castvalue => F@_16} + end, + S18 = if F@_17 == '$undef' -> S17; + true -> S17#{stdtime => F@_17} + end, + if F@_18 == '$undef' -> S18; + true -> S18#{stdduration => F@_18} + end. + +'d_field_google.protobuf.FieldOptions_ctype'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_ctype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_ctype'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.CType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_packed'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_packed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_packed'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jstype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jstype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jstype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_google.protobuf.FieldOptions.JSType'(begin + <> = + <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData). + +'d_field_google.protobuf.FieldOptions_lazy'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_lazy'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_lazy'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, _, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_weak'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_weak'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_weak'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, _, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, F@_8, + F@_9, F@_10, + F@_11, F@_12, + F@_13, F@_14, + F@_15, F@_16, + F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, Prev, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + cons(NewFValue, Prev, + TrUserData), + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_nullable'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_nullable'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_nullable'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, _, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + NewFValue, F@_9, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_embed'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_embed'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_embed'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, _, F@_10, + F@_11, F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, NewFValue, F@_10, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customtype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customtype'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customtype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, _, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, NewFValue, + F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, _, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, + NewFValue, F@_12, F@_13, + F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_jsontag'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_jsontag'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_jsontag'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, _, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + NewFValue, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_moretags'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_moretags'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_moretags'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, _, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, NewFValue, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_casttype'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_casttype'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_casttype'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, _, + F@_15, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, NewFValue, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castkey'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castkey'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_castkey'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, _, F@_16, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + NewFValue, F@_16, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_castvalue'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_castvalue'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_castvalue'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, _, F@_17, F@_18, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, NewFValue, F@_17, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdtime'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdtime'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'d_field_google.protobuf.FieldOptions_stdtime'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, F@_9, + F@_10, F@_11, F@_12, F@_13, + F@_14, F@_15, F@_16, _, F@_18, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, NewFValue, + F@_18, TrUserData). + +'d_field_google.protobuf.FieldOptions_stdduration'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.FieldOptions_stdduration'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'d_field_google.protobuf.FieldOptions_stdduration'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, + F@_17, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.FieldOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.FieldOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'skip_varint_google.protobuf.FieldOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, + F@_11, F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, F@_18, + TrUserData); +'skip_varint_google.protobuf.FieldOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, + F@_17, F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_length_delimited_google.protobuf.FieldOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.FieldOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, F@_8, + F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData); +'skip_length_delimited_google.protobuf.FieldOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, + F@_16, F@_17, F@_18, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_group_google.protobuf.FieldOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, + F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_32_google.protobuf.FieldOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'skip_64_google.protobuf.FieldOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, F@_15, F@_16, F@_17, + F@_18, TrUserData) -> + 'dfp_read_field_def_google.protobuf.FieldOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + F@_8, F@_9, F@_10, F@_11, + F@_12, F@_13, F@_14, + F@_15, F@_16, F@_17, + F@_18, TrUserData). + +'decode_msg_google.protobuf.EnumOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Bin, 0, + 0, + id('$undef', TrUserData), + id('$undef', TrUserData), + id([], TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumOptions'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<136, + 163, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<168, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<176, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<186, + 164, 30, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumOptions'(<<>>, + 0, 0, F@_1, F@_2, R1, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end; +'dfp_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'dg_read_field_def_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 16 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 24 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496008 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496168 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 496176 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 496186 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumOptions'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumOptions'(<<>>, 0, + 0, F@_1, F@_2, R1, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{allow_alias => F@_1} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{deprecated => F@_2} + end, + S4 = if R1 == '$undef' -> S3; + true -> + S3#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{goproto_enum_prefix => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{goproto_enum_stringer => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{enum_stringer => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{enum_customname => F@_7} + end. + +'d_field_google.protobuf.EnumOptions_allow_alias'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_allow_alias'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_allow_alias'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, NewFValue, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_uninterpreted_option'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + Prev, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, + cons(NewFValue, Prev, + TrUserData), + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_prefix'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_prefix'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, F@_5, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + NewFValue, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_goproto_enum_stringer'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_goproto_enum_stringer'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, NewFValue, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_stringer'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.EnumOptions_enum_stringer'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, _, F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, NewFValue, + F@_7, TrUserData). + +'d_field_google.protobuf.EnumOptions_enum_customname'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumOptions_enum_customname'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData); +'d_field_google.protobuf.EnumOptions_enum_customname'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumOptions'(RestF, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + NewFValue, TrUserData). + +'skip_varint_google.protobuf.EnumOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'skip_varint_google.protobuf.EnumOptions'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData); +'skip_varint_google.protobuf.EnumOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.EnumOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.EnumOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest2, + 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.EnumOptions'(Bin, FNum, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + 0, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.EnumOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.EnumOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumOptions'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.EnumValueOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<138, + 157, 32, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, + TrUserData); +'dfp_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end; +'dfp_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.EnumValueOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + TrUserData); + 7994 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 528010 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, 0, + 0, F@_1, F@_2, + F@_3, + TrUserData); + 1 -> + 'skip_64_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + TrUserData); + 3 -> + 'skip_group_google.protobuf.EnumValueOptions'(Rest, + Key bsr 3, 0, + F@_1, F@_2, F@_3, + TrUserData); + 5 -> + 'skip_32_google.protobuf.EnumValueOptions'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.EnumValueOptions'(<<>>, + 0, 0, F@_1, R1, F@_3, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + S3 = if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end, + if F@_3 == '$undef' -> S3; + true -> S3#{enumvalue_customname => F@_3} + end. + +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, NewFValue, F@_2, + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, F@_3, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + F@_3, TrUserData). + +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.EnumValueOptions_enumvalue_customname'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, + TrUserData); +'d_field_google.protobuf.EnumValueOptions_enumvalue_customname'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.EnumValueOptions'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'skip_varint_google.protobuf.EnumValueOptions'(Rest, Z1, + Z2, F@_1, F@_2, F@_3, + TrUserData); +'skip_varint_google.protobuf.EnumValueOptions'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.EnumValueOptions'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_google.protobuf.EnumValueOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, TrUserData). + +'skip_group_google.protobuf.EnumValueOptions'(Bin, FNum, + Z2, F@_1, F@_2, F@_3, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_32_google.protobuf.EnumValueOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'skip_64_google.protobuf.EnumValueOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.EnumValueOptions'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, TrUserData). + +'decode_msg_google.protobuf.ServiceOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Bin, + 0, 0, + id('$undef', + TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.ServiceOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.ServiceOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.ServiceOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.ServiceOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.ServiceOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.ServiceOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.ServiceOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.ServiceOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.ServiceOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.ServiceOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.ServiceOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.ServiceOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.ServiceOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.ServiceOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.ServiceOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.ServiceOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.ServiceOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.MethodOptions'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Bin, + 0, 0, + id('$undef', TrUserData), + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.MethodOptions'(<<136, + 2, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<186, + 62, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Other, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'dg_read_field_def_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 264 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + 0, 0, F@_1, F@_2, + TrUserData); + 7994 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.MethodOptions'(Rest, + Key bsr 3, 0, F@_1, + F@_2, TrUserData); + 5 -> + 'skip_32_google.protobuf.MethodOptions'(Rest, 0, 0, + F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.MethodOptions'(<<>>, + 0, 0, F@_1, R1, TrUserData) -> + S1 = #{}, + S2 = if F@_1 == '$undef' -> S1; + true -> S1#{deprecated => F@_1} + end, + if R1 == '$undef' -> S2; + true -> + S2#{uninterpreted_option => + lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.MethodOptions_deprecated'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_deprecated'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_google.protobuf.MethodOptions_deprecated'(<<0:1, + X:7, Rest/binary>>, + N, Acc, _, F@_2, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, NewFValue, F@_2, + TrUserData). + +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.MethodOptions_uninterpreted_option'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.MethodOptions_uninterpreted_option'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.MethodOptions'(RestF, + 0, 0, F@_1, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.MethodOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_google.protobuf.MethodOptions'(Rest, Z1, + Z2, F@_1, F@_2, TrUserData); +'skip_varint_google.protobuf.MethodOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.MethodOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.MethodOptions'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.MethodOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest2, + 0, 0, F@_1, F@_2, + TrUserData). + +'skip_group_google.protobuf.MethodOptions'(Bin, FNum, + Z2, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + 0, Z2, F@_1, F@_2, + TrUserData). + +'skip_32_google.protobuf.MethodOptions'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'skip_64_google.protobuf.MethodOptions'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_google.protobuf.MethodOptions'(Rest, + Z1, Z2, F@_1, F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Bin, + 0, 0, + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + Z1, Z2, + F@_1, F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}; +'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, F@_1, + F@_2, + TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Other, + Z1, Z2, + F@_1, F@_2, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 16 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, + 0, + F@_1, + F@_2, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption.NamePart'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, 0, + F@_1, + F@_2, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption.NamePart'(<<>>, + 0, 0, F@_1, + F@_2, _) -> + #{name_part => F@_1, is_extension => F@_2}. + +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_name_part'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_name_part'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, _, + F@_2, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + NewFValue, + F@_2, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + TrUserData); +'d_field_google.protobuf.UninterpretedOption.NamePart_is_extension'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, _, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(RestF, + 0, 0, + F@_1, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, F@_1, + F@_2, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption.NamePart'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest2, + 0, 0, + F@_1, + F@_2, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption.NamePart'(Bin, + FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + 0, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption.NamePart'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption.NamePart'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption.NamePart'(Rest, + Z1, Z2, + F@_1, + F@_2, + TrUserData). + +'decode_msg_google.protobuf.UninterpretedOption'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Bin, + 0, 0, + id([], TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<40, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<49, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<58, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<66, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); +'dfp_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end; +'dfp_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + F@_7, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 18 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 26 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 32 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 40 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 49 -> + 'd_field_google.protobuf.UninterpretedOption_double_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 58 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 66 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 1 -> + 'skip_64_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + F@_6, + F@_7, + TrUserData); + 3 -> + 'skip_group_google.protobuf.UninterpretedOption'(Rest, + Key bsr 3, 0, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); + 5 -> + 'skip_32_google.protobuf.UninterpretedOption'(Rest, 0, + 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.UninterpretedOption'(<<>>, + 0, 0, R1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + S1 = #{}, + S2 = if R1 == '$undef' -> S1; + true -> S1#{name => lists_reverse(R1, TrUserData)} + end, + S3 = if F@_2 == '$undef' -> S2; + true -> S2#{identifier_value => F@_2} + end, + S4 = if F@_3 == '$undef' -> S3; + true -> S3#{positive_int_value => F@_3} + end, + S5 = if F@_4 == '$undef' -> S4; + true -> S4#{negative_int_value => F@_4} + end, + S6 = if F@_5 == '$undef' -> S5; + true -> S5#{double_value => F@_5} + end, + S7 = if F@_6 == '$undef' -> S6; + true -> S6#{string_value => F@_6} + end, + if F@_7 == '$undef' -> S7; + true -> S7#{aggregate_value => F@_7} + end. + +'d_field_google.protobuf.UninterpretedOption_name'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_name'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_name'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.UninterpretedOption.NamePart'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_identifier_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_identifier_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, _, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, + NewFValue, F@_3, + F@_4, F@_5, F@_6, + F@_7, TrUserData). + +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_positive_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_positive_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, F@_4, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc, TrUserData), + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + NewFValue, F@_4, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_negative_int_value'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_negative_int_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, _, + F@_5, F@_6, + F@_7, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, NewFValue, + F@_5, F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 127, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(infinity, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<0:48, + 240, 255, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id('-infinity', + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<<_:48, + 15:4, _:4, _:1, + 127:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(nan, + TrUserData), + F@_6, F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_double_value'(<>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, _, F@_6, + F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + id(Value, + TrUserData), + F@_6, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_string_value'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_string_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_string_value'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, _, + F@_7, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + NewFValue, F@_7, + TrUserData). + +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.UninterpretedOption_aggregate_value'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'d_field_google.protobuf.UninterpretedOption_aggregate_value'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, F@_6, _, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(RestF, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, NewFValue, + TrUserData). + +'skip_varint_google.protobuf.UninterpretedOption'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'skip_varint_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData); +'skip_varint_google.protobuf.UninterpretedOption'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.UninterpretedOption'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, F@_6, + F@_7, + TrUserData); +'skip_length_delimited_google.protobuf.UninterpretedOption'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest2, + 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_group_google.protobuf.UninterpretedOption'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, F@_7, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + 0, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_32_google.protobuf.UninterpretedOption'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'skip_64_google.protobuf.UninterpretedOption'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, F@_7, TrUserData) -> + 'dfp_read_field_def_google.protobuf.UninterpretedOption'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + F@_6, F@_7, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo.Location'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Bin, + 0, 0, + id([], + TrUserData), + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id([], + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<34, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<50, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + Z1, + Z2, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 8 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 18 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 16 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 26 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 34 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 50 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo.Location'(Rest, + Key bsr 3, + 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo.Location'(<<>>, + 0, 0, R1, R2, F@_3, + F@_4, R3, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData), + span => lists_reverse(R2, TrUserData), + leading_detached_comments => + lists_reverse(R3, TrUserData)}, + S2 = if F@_3 == '$undef' -> S1; + true -> S1#{leading_comments => F@_3} + end, + if F@_4 == '$undef' -> S2; + true -> S2#{trailing_comments => F@_4} + end. + +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, Rest/binary>>, + N, Acc, E, F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, NewSeq, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, Prev, F@_3, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + cons(NewFValue, + Prev, + TrUserData), + F@_3, F@_4, + F@_5, + TrUserData). + +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, F@_1, + F@_2, F@_3, F@_4, + F@_5, TrUserData); +'d_pfield_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, E, F@_3, + F@_4, F@_5, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(PackedBytes, + 0, 0, E, + TrUserData), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + NewSeq, F@_3, + F@_4, F@_5, + TrUserData). + +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(Rest, + N + 7, + X bsl N + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.SourceCodeInfo.Location_span'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.SourceCodeInfo.Location_span'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, _, + F@_4, F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, + NewFValue, + F@_4, F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_trailing_comments'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, _, + F@_5, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + NewFValue, + F@_5, + TrUserData). + +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<1:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(Rest, + N + + + 7, + X + bsl + N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + F@_5, + TrUserData); +'d_field_google.protobuf.SourceCodeInfo.Location_leading_detached_comments'(<<0:1, + X:7, + Rest/binary>>, + N, + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(RestF, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + cons(NewFValue, + Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, + TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo.Location'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + F@_5, + TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo.Location'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest2, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo.Location'(Bin, + FNum, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + 0, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo.Location'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo.Location'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, F@_5, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo.Location'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, F@_5, + TrUserData). + +'decode_msg_google.protobuf.SourceCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + Z1, Z2, F@_1, TrUserData); +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, TrUserData) -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 1 -> + 'skip_64_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.SourceCodeInfo'(Rest, + Key bsr 3, 0, F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.SourceCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.SourceCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{location => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.SourceCodeInfo_location'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.SourceCodeInfo_location'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.SourceCodeInfo_location'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.SourceCodeInfo.Location'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.SourceCodeInfo'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.SourceCodeInfo'(Rest, Z1, + Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.SourceCodeInfo'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.SourceCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.SourceCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest2, + 0, 0, F@_1, TrUserData). + +'skip_group_google.protobuf.SourceCodeInfo'(Bin, FNum, + Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.SourceCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.SourceCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.SourceCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + 0, 0, + id([], + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + id('$undef', + TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, + F@_2, F@_3, + F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Other, + Z1, Z2, + F@_1, F@_2, + F@_3, F@_4, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 8 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 18 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 24 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 32 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + 0, 0, F@_1, + F@_2, F@_3, + F@_4, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Key + bsr + 3, + 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(<<>>, + 0, 0, R1, F@_2, + F@_3, F@_4, + TrUserData) -> + S1 = #{path => lists_reverse(R1, TrUserData)}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{source_file => F@_2} + end, + S3 = if F@_3 == '$undef' -> S2; + true -> S2#{'begin' => F@_3} + end, + if F@_4 == '$undef' -> S3; + true -> S3#{'end' => F@_4} + end. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, Prev, F@_2, + F@_3, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + cons(NewFValue, + Prev, + TrUserData), + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_pfield_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, E, F@_2, + F@_3, F@_4, + TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(PackedBytes, + 0, 0, + E, + TrUserData), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + NewSeq, + F@_2, + F@_3, + F@_4, + TrUserData). + +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) + when N < 57 -> + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(Rest, + N + 7, + X bsl N + + Acc, + AccSeq, + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + AccSeq, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'd_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(RestF, + 0, 0, + [NewFValue + | AccSeq], + TrUserData); +'d_packed_field_google.protobuf.GeneratedCodeInfo.Annotation_path'(<<>>, + 0, 0, AccSeq, + _) -> + AccSeq. + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + F@_2, F@_3, + F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(Rest, + N + 7, + X bsl N + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_source_file'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, + _, F@_3, + F@_4, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + NewFValue, + F@_3, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_begin'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, + _, F@_4, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + NewFValue, + F@_4, + TrUserData). + +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(Rest, + N + 7, + X bsl N + Acc, + F@_1, F@_2, F@_3, + F@_4, + TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo.Annotation_end'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, + F@_3, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(RestF, + 0, 0, + F@_1, + F@_2, + F@_3, + NewFValue, + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, F@_1, + F@_2, F@_3, F@_4, + TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<1:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + N + 7, + X bsl N + + + Acc, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo.Annotation'(<<0:1, + X:7, + Rest/binary>>, + N, Acc, + F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest2, + 0, 0, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo.Annotation'(Bin, + FNum, Z2, F@_1, F@_2, + F@_3, F@_4, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + 0, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo.Annotation'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, + F@_4, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo.Annotation'(Rest, + Z1, Z2, + F@_1, + F@_2, + F@_3, + F@_4, + TrUserData). + +'decode_msg_google.protobuf.GeneratedCodeInfo'(Bin, + TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Bin, + 0, 0, + id([], TrUserData), + TrUserData). + +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, + TrUserData) -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + Z1, Z2, F@_1, + TrUserData); +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData) -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Other, + Z1, Z2, F@_1, + TrUserData). + +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + 0, 0, F@_1, + TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, 0, + 0, F@_1, + TrUserData); + 1 -> + 'skip_64_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData); + 2 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + 0, 0, + F@_1, + TrUserData); + 3 -> + 'skip_group_google.protobuf.GeneratedCodeInfo'(Rest, + Key bsr 3, 0, + F@_1, + TrUserData); + 5 -> + 'skip_32_google.protobuf.GeneratedCodeInfo'(Rest, 0, 0, + F@_1, TrUserData) + end + end; +'dg_read_field_def_google.protobuf.GeneratedCodeInfo'(<<>>, + 0, 0, R1, TrUserData) -> + S1 = #{}, + if R1 == '$undef' -> S1; + true -> S1#{annotation => lists_reverse(R1, TrUserData)} + end. + +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_google.protobuf.GeneratedCodeInfo_annotation'(Rest, + N + 7, X bsl N + Acc, + F@_1, TrUserData); +'d_field_google.protobuf.GeneratedCodeInfo_annotation'(<<0:1, + X:7, Rest/binary>>, + N, Acc, Prev, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(RestF, + 0, 0, + cons(NewFValue, Prev, + TrUserData), + TrUserData). + +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<1:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, TrUserData); +'skip_varint_google.protobuf.GeneratedCodeInfo'(<<0:1, + _:7, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) + when N < 57 -> + 'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(Rest, + N + 7, + X bsl N + Acc, + F@_1, TrUserData); +'skip_length_delimited_google.protobuf.GeneratedCodeInfo'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest2, + 0, 0, F@_1, + TrUserData). + +'skip_group_google.protobuf.GeneratedCodeInfo'(Bin, + FNum, Z2, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + 0, Z2, F@_1, + TrUserData). + +'skip_32_google.protobuf.GeneratedCodeInfo'(<<_:32, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'skip_64_google.protobuf.GeneratedCodeInfo'(<<_:64, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_google.protobuf.GeneratedCodeInfo'(Rest, + Z1, Z2, F@_1, + TrUserData). + +'decode_msg_mvccpb.KeyValue'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Bin, 0, 0, + id(<<>>, TrUserData), + id(0, TrUserData), id(0, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(0, TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.KeyValue'(<<10, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_key'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<16, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<24, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<32, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_version'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<42, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_value'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<48, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'd_field_mvccpb.KeyValue_lease'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +'dfp_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}; +'dfp_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dg_read_field_def_mvccpb.KeyValue'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'dg_read_field_def_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'dg_read_field_def_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_mvccpb.KeyValue_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 16 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 24 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 32 -> + 'd_field_mvccpb.KeyValue_version'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 42 -> + 'd_field_mvccpb.KeyValue_value'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, + TrUserData); + 1 -> + 'skip_64_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, 0, 0, + F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); + 3 -> + 'skip_group_mvccpb.KeyValue'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData); + 5 -> + 'skip_32_mvccpb.KeyValue'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData) + end + end; +'dg_read_field_def_mvccpb.KeyValue'(<<>>, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, _) -> + #{key => F@_1, create_revision => F@_2, + mod_revision => F@_3, version => F@_4, value => F@_5, + lease => F@_6}. + +'d_field_mvccpb.KeyValue_key'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_key'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, + NewFValue, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData). + +'d_field_mvccpb.KeyValue_create_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_create_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_create_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_mod_revision'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_mod_revision'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_mod_revision'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, F@_4, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, NewFValue, F@_4, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_version'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_version'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + F@_5, F@_6, TrUserData); +'d_field_mvccpb.KeyValue_version'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, NewFValue, F@_5, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_value'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_value'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_value'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6, + TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, NewFValue, F@_6, + TrUserData). + +'d_field_mvccpb.KeyValue_lease'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) + when N < 57 -> + 'd_field_mvccpb.KeyValue_lease'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData); +'d_field_mvccpb.KeyValue_lease'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, _, + TrUserData) -> + {NewFValue, RestF} = {begin + <> = <<(X bsl N + + Acc):64/unsigned-native>>, + id(Res, TrUserData) + end, + Rest}, + 'dfp_read_field_def_mvccpb.KeyValue'(RestF, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, NewFValue, + TrUserData). + +'skip_varint_mvccpb.KeyValue'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'skip_varint_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData); +'skip_varint_mvccpb.KeyValue'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_length_delimited_mvccpb.KeyValue'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.KeyValue'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + F@_4, F@_5, F@_6, TrUserData); +'skip_length_delimited_mvccpb.KeyValue'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, + F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.KeyValue'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_group_mvccpb.KeyValue'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_32_mvccpb.KeyValue'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'skip_64_mvccpb.KeyValue'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + 'dfp_read_field_def_mvccpb.KeyValue'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, F@_5, F@_6, + TrUserData). + +'decode_msg_mvccpb.Event'(Bin, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Bin, 0, 0, + id('PUT', TrUserData), + id('$undef', TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_mvccpb.Event'(<<8, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_type'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_mvccpb.Event_prev_kv'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'dfp_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end; +'dfp_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_mvccpb.Event'(Other, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'dg_read_field_def_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_mvccpb.Event_type'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 18 -> + 'd_field_mvccpb.Event_kv'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 26 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 1 -> + 'skip_64_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData); + 2 -> + 'skip_length_delimited_mvccpb.Event'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 3 -> + 'skip_group_mvccpb.Event'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_mvccpb.Event'(Rest, 0, 0, F@_1, F@_2, F@_3, + TrUserData) + end + end; +'dg_read_field_def_mvccpb.Event'(<<>>, 0, 0, F@_1, F@_2, + F@_3, _) -> + S1 = #{type => F@_1}, + S2 = if F@_2 == '$undef' -> S1; + true -> S1#{kv => F@_2} + end, + if F@_3 == '$undef' -> S2; + true -> S2#{prev_kv => F@_3} + end. + +'d_field_mvccpb.Event_type'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_type'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_type'(<<0:1, X:7, Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_mvccpb.Event.EventType'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_mvccpb.Event_kv'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_kv'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_kv'(<<0:1, X:7, Rest/binary>>, N, + Acc, F@_1, Prev, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + F@_3, TrUserData). + +'d_field_mvccpb.Event_prev_kv'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_mvccpb.Event_prev_kv'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, TrUserData); +'d_field_mvccpb.Event_prev_kv'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_mvccpb.KeyValue'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_mvccpb.Event'(RestF, 0, 0, F@_1, + F@_2, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_mvccpb.KeyValue'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_mvccpb.Event'(<<1:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_mvccpb.Event'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, TrUserData); +'skip_varint_mvccpb.Event'(<<0:1, _:7, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_length_delimited_mvccpb.Event'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_mvccpb.Event'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_mvccpb.Event'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_mvccpb.Event'(Rest2, 0, 0, F@_1, + F@_2, F@_3, TrUserData). + +'skip_group_mvccpb.Event'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_mvccpb.Event'(Rest, 0, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_32_mvccpb.Event'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'skip_64_mvccpb.Event'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_mvccpb.Event'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData). + +'decode_msg_authpb.UserAddOptions'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Bin, 0, 0, + id(false, TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.UserAddOptions'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, Z1, + Z2, F@_1, TrUserData); +'dfp_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}; +'dfp_read_field_def_authpb.UserAddOptions'(Other, Z1, + Z2, F@_1, TrUserData) -> + 'dg_read_field_def_authpb.UserAddOptions'(Other, Z1, Z2, + F@_1, TrUserData). + +'dg_read_field_def_authpb.UserAddOptions'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.UserAddOptions'(Rest, N + 7, + X bsl N + Acc, F@_1, TrUserData); +'dg_read_field_def_authpb.UserAddOptions'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, 0, 0, + F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 1 -> + 'skip_64_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, 0, + 0, F@_1, + TrUserData); + 3 -> + 'skip_group_authpb.UserAddOptions'(Rest, Key bsr 3, 0, + F@_1, TrUserData); + 5 -> + 'skip_32_authpb.UserAddOptions'(Rest, 0, 0, F@_1, + TrUserData) + end + end; +'dg_read_field_def_authpb.UserAddOptions'(<<>>, 0, 0, + F@_1, _) -> + #{no_password => F@_1}. + +'d_field_authpb.UserAddOptions_no_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'd_field_authpb.UserAddOptions_no_password'(Rest, N + 7, + X bsl N + Acc, F@_1, + TrUserData); +'d_field_authpb.UserAddOptions_no_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.UserAddOptions'(RestF, 0, 0, + NewFValue, TrUserData). + +'skip_varint_authpb.UserAddOptions'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'skip_varint_authpb.UserAddOptions'(Rest, Z1, Z2, F@_1, + TrUserData); +'skip_varint_authpb.UserAddOptions'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_length_delimited_authpb.UserAddOptions'(<<1:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.UserAddOptions'(Rest, + N + 7, X bsl N + Acc, F@_1, + TrUserData); +'skip_length_delimited_authpb.UserAddOptions'(<<0:1, + X:7, Rest/binary>>, + N, Acc, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.UserAddOptions'(Rest2, 0, 0, + F@_1, TrUserData). + +'skip_group_authpb.UserAddOptions'(Bin, FNum, Z2, F@_1, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, 0, Z2, + F@_1, TrUserData). + +'skip_32_authpb.UserAddOptions'(<<_:32, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'skip_64_authpb.UserAddOptions'(<<_:64, Rest/binary>>, + Z1, Z2, F@_1, TrUserData) -> + 'dfp_read_field_def_authpb.UserAddOptions'(Rest, Z1, Z2, + F@_1, TrUserData). + +'decode_msg_authpb.User'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Bin, 0, 0, + id(<<>>, TrUserData), id(<<>>, TrUserData), + id([], TrUserData), + id('$undef', TrUserData), TrUserData). + +'dfp_read_field_def_authpb.User'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_name'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_password'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<26, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_roles'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<34, Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'd_field_authpb.User_options'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'dfp_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end; +'dfp_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData) -> + 'dg_read_field_def_authpb.User'(Other, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'dg_read_field_def_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'dg_read_field_def_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.User_name'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 18 -> + 'd_field_authpb.User_password'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 26 -> + 'd_field_authpb.User_roles'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 34 -> + 'd_field_authpb.User_options'(Rest, 0, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 1 -> + 'skip_64_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData); + 2 -> + 'skip_length_delimited_authpb.User'(Rest, 0, 0, F@_1, + F@_2, F@_3, F@_4, + TrUserData); + 3 -> + 'skip_group_authpb.User'(Rest, Key bsr 3, 0, F@_1, F@_2, + F@_3, F@_4, TrUserData); + 5 -> + 'skip_32_authpb.User'(Rest, 0, 0, F@_1, F@_2, F@_3, + F@_4, TrUserData) + end + end; +'dg_read_field_def_authpb.User'(<<>>, 0, 0, F@_1, F@_2, + R1, F@_4, TrUserData) -> + S1 = #{name => F@_1, password => F@_2, + roles => lists_reverse(R1, TrUserData)}, + if F@_4 == '$undef' -> S1; + true -> S1#{options => F@_4} + end. + +'d_field_authpb.User_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, NewFValue, + F@_2, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_password'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_password'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_password'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + NewFValue, F@_3, F@_4, TrUserData). + +'d_field_authpb.User_roles'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_roles'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, F@_3, F@_4, TrUserData); +'d_field_authpb.User_roles'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, Prev, F@_4, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, cons(NewFValue, Prev, TrUserData), + F@_4, TrUserData). + +'d_field_authpb.User_options'(<<1:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'd_field_authpb.User_options'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'d_field_authpb.User_options'(<<0:1, X:7, Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.UserAddOptions'(Bs, + TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.User'(RestF, 0, 0, F@_1, + F@_2, F@_3, + if Prev == '$undef' -> NewFValue; + true -> + 'merge_msg_authpb.UserAddOptions'(Prev, + NewFValue, + TrUserData) + end, + TrUserData). + +'skip_varint_authpb.User'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'skip_varint_authpb.User'(Rest, Z1, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData); +'skip_varint_authpb.User'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_length_delimited_authpb.User'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.User'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData); +'skip_length_delimited_authpb.User'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, F@_4, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.User'(Rest2, 0, 0, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_group_authpb.User'(Bin, FNum, Z2, F@_1, F@_2, + F@_3, F@_4, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.User'(Rest, 0, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_32_authpb.User'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'skip_64_authpb.User'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, F@_3, F@_4, TrUserData) -> + 'dfp_read_field_def_authpb.User'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, F@_4, TrUserData). + +'decode_msg_authpb.Permission'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Bin, 0, 0, + id('READ', TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_authpb.Permission'(<<8, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_permType'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<18, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_key'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<26, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'd_field_authpb.Permission_range_end'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData); +'dfp_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}; +'dfp_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData) -> + 'dg_read_field_def_authpb.Permission'(Other, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'dg_read_field_def_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'dg_read_field_def_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> + 'd_field_authpb.Permission_permType'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + 18 -> + 'd_field_authpb.Permission_key'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 26 -> + 'd_field_authpb.Permission_range_end'(Rest, 0, 0, F@_1, + F@_2, F@_3, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 1 -> + 'skip_64_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData); + 2 -> + 'skip_length_delimited_authpb.Permission'(Rest, 0, 0, + F@_1, F@_2, F@_3, + TrUserData); + 3 -> + 'skip_group_authpb.Permission'(Rest, Key bsr 3, 0, F@_1, + F@_2, F@_3, TrUserData); + 5 -> + 'skip_32_authpb.Permission'(Rest, 0, 0, F@_1, F@_2, + F@_3, TrUserData) + end + end; +'dg_read_field_def_authpb.Permission'(<<>>, 0, 0, F@_1, + F@_2, F@_3, _) -> + #{permType => F@_1, key => F@_2, range_end => F@_3}. + +'d_field_authpb.Permission_permType'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_permType'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_permType'(<<0:1, X:7, + Rest/binary>>, + N, Acc, _, F@_2, F@_3, TrUserData) -> + {NewFValue, RestF} = + {id('d_enum_authpb.Permission.Type'(begin + <> = <<(X + bsl + N + + + Acc):32/unsigned-native>>, + id(Res, TrUserData) + end), + TrUserData), + Rest}, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + NewFValue, F@_2, F@_3, TrUserData). + +'d_field_authpb.Permission_key'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_key'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_key'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, NewFValue, F@_3, TrUserData). + +'d_field_authpb.Permission_range_end'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'd_field_authpb.Permission_range_end'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'d_field_authpb.Permission_range_end'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Permission'(RestF, 0, 0, + F@_1, F@_2, NewFValue, TrUserData). + +'skip_varint_authpb.Permission'(<<1:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'skip_varint_authpb.Permission'(Rest, Z1, Z2, F@_1, + F@_2, F@_3, TrUserData); +'skip_varint_authpb.Permission'(<<0:1, _:7, + Rest/binary>>, + Z1, Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_length_delimited_authpb.Permission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Permission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, F@_3, + TrUserData); +'skip_length_delimited_authpb.Permission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, F@_3, + TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Permission'(Rest2, 0, 0, + F@_1, F@_2, F@_3, TrUserData). + +'skip_group_authpb.Permission'(Bin, FNum, Z2, F@_1, + F@_2, F@_3, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Permission'(Rest, 0, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_32_authpb.Permission'(<<_:32, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'skip_64_authpb.Permission'(<<_:64, Rest/binary>>, Z1, + Z2, F@_1, F@_2, F@_3, TrUserData) -> + 'dfp_read_field_def_authpb.Permission'(Rest, Z1, Z2, + F@_1, F@_2, F@_3, TrUserData). + +'decode_msg_authpb.Role'(Bin, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Bin, 0, 0, + id(<<>>, TrUserData), id([], TrUserData), + TrUserData). + +'dfp_read_field_def_authpb.Role'(<<10, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_name'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'dfp_read_field_def_authpb.Role'(<<18, Rest/binary>>, + Z1, Z2, F@_1, F@_2, TrUserData) -> + 'd_field_authpb.Role_keyPermission'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData); +'dfp_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end; +'dfp_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData) -> + 'dg_read_field_def_authpb.Role'(Other, Z1, Z2, F@_1, + F@_2, TrUserData). + +'dg_read_field_def_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 32 - 7 -> + 'dg_read_field_def_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'dg_read_field_def_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> + 'd_field_authpb.Role_name'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 18 -> + 'd_field_authpb.Role_keyPermission'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> + 'skip_varint_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 1 -> + 'skip_64_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData); + 2 -> + 'skip_length_delimited_authpb.Role'(Rest, 0, 0, F@_1, + F@_2, TrUserData); + 3 -> + 'skip_group_authpb.Role'(Rest, Key bsr 3, 0, F@_1, F@_2, + TrUserData); + 5 -> + 'skip_32_authpb.Role'(Rest, 0, 0, F@_1, F@_2, + TrUserData) + end + end; +'dg_read_field_def_authpb.Role'(<<>>, 0, 0, F@_1, R1, + TrUserData) -> + S1 = #{name => F@_1}, + if R1 == '$undef' -> S1; + true -> + S1#{keyPermission => lists_reverse(R1, TrUserData)} + end. + +'d_field_authpb.Role_name'(<<1:1, X:7, Rest/binary>>, N, + Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_name'(Rest, N + 7, X bsl N + Acc, + F@_1, F@_2, TrUserData); +'d_field_authpb.Role_name'(<<0:1, X:7, Rest/binary>>, N, + Acc, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id(binary:copy(Bytes), TrUserData), Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, NewFValue, + F@_2, TrUserData). + +'d_field_authpb.Role_keyPermission'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'd_field_authpb.Role_keyPermission'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'d_field_authpb.Role_keyPermission'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, Prev, TrUserData) -> + {NewFValue, RestF} = begin + Len = X bsl N + Acc, + <> = Rest, + {id('decode_msg_authpb.Permission'(Bs, TrUserData), + TrUserData), + Rest2} + end, + 'dfp_read_field_def_authpb.Role'(RestF, 0, 0, F@_1, + cons(NewFValue, Prev, TrUserData), + TrUserData). + +'skip_varint_authpb.Role'(<<1:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'skip_varint_authpb.Role'(Rest, Z1, Z2, F@_1, F@_2, + TrUserData); +'skip_varint_authpb.Role'(<<0:1, _:7, Rest/binary>>, Z1, + Z2, F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_length_delimited_authpb.Role'(<<1:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) + when N < 57 -> + 'skip_length_delimited_authpb.Role'(Rest, N + 7, + X bsl N + Acc, F@_1, F@_2, TrUserData); +'skip_length_delimited_authpb.Role'(<<0:1, X:7, + Rest/binary>>, + N, Acc, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_authpb.Role'(Rest2, 0, 0, F@_1, + F@_2, TrUserData). + +'skip_group_authpb.Role'(Bin, FNum, Z2, F@_1, F@_2, + TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_authpb.Role'(Rest, 0, Z2, F@_1, + F@_2, TrUserData). + +'skip_32_authpb.Role'(<<_:32, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'skip_64_authpb.Role'(<<_:64, Rest/binary>>, Z1, Z2, + F@_1, F@_2, TrUserData) -> + 'dfp_read_field_def_authpb.Role'(Rest, Z1, Z2, F@_1, + F@_2, TrUserData). + +'d_enum_Etcd.RangeRequest.SortOrder'(0) -> 'NONE'; +'d_enum_Etcd.RangeRequest.SortOrder'(1) -> 'ASCEND'; +'d_enum_Etcd.RangeRequest.SortOrder'(2) -> 'DESCEND'; +'d_enum_Etcd.RangeRequest.SortOrder'(V) -> V. + +'d_enum_Etcd.RangeRequest.SortTarget'(0) -> 'KEY'; +'d_enum_Etcd.RangeRequest.SortTarget'(1) -> 'VERSION'; +'d_enum_Etcd.RangeRequest.SortTarget'(2) -> 'CREATE'; +'d_enum_Etcd.RangeRequest.SortTarget'(3) -> 'MOD'; +'d_enum_Etcd.RangeRequest.SortTarget'(4) -> 'VALUE'; +'d_enum_Etcd.RangeRequest.SortTarget'(V) -> V. + +'d_enum_Etcd.Compare.CompareResult'(0) -> 'EQUAL'; +'d_enum_Etcd.Compare.CompareResult'(1) -> 'GREATER'; +'d_enum_Etcd.Compare.CompareResult'(2) -> 'LESS'; +'d_enum_Etcd.Compare.CompareResult'(3) -> 'NOT_EQUAL'; +'d_enum_Etcd.Compare.CompareResult'(V) -> V. + +'d_enum_Etcd.Compare.CompareTarget'(0) -> 'VERSION'; +'d_enum_Etcd.Compare.CompareTarget'(1) -> 'CREATE'; +'d_enum_Etcd.Compare.CompareTarget'(2) -> 'MOD'; +'d_enum_Etcd.Compare.CompareTarget'(3) -> 'VALUE'; +'d_enum_Etcd.Compare.CompareTarget'(4) -> 'LEASE'; +'d_enum_Etcd.Compare.CompareTarget'(V) -> V. + +'d_enum_Etcd.WatchCreateRequest.FilterType'(0) -> + 'NOPUT'; +'d_enum_Etcd.WatchCreateRequest.FilterType'(1) -> + 'NODELETE'; +'d_enum_Etcd.WatchCreateRequest.FilterType'(V) -> V. + +'d_enum_Etcd.AlarmType'(0) -> 'NONE'; +'d_enum_Etcd.AlarmType'(1) -> 'NOSPACE'; +'d_enum_Etcd.AlarmType'(2) -> 'CORRUPT'; +'d_enum_Etcd.AlarmType'(V) -> V. + +'d_enum_Etcd.AlarmRequest.AlarmAction'(0) -> 'GET'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(1) -> 'ACTIVATE'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(2) -> + 'DEACTIVATE'; +'d_enum_Etcd.AlarmRequest.AlarmAction'(V) -> V. + +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'; +'d_enum_Etcd.HealthCheckResponse.ServingStatus'(V) -> V. + +'d_enum_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'; +'d_enum_google.protobuf.FieldDescriptorProto.Type'(V) -> + V. + +'d_enum_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'; +'d_enum_google.protobuf.FieldDescriptorProto.Label'(V) -> + V. + +'d_enum_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'; +'d_enum_google.protobuf.FileOptions.OptimizeMode'(V) -> + V. + +'d_enum_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'d_enum_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'d_enum_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'; +'d_enum_google.protobuf.FieldOptions.CType'(V) -> V. + +'d_enum_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'d_enum_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'d_enum_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'; +'d_enum_google.protobuf.FieldOptions.JSType'(V) -> V. + +'d_enum_mvccpb.Event.EventType'(0) -> 'PUT'; +'d_enum_mvccpb.Event.EventType'(1) -> 'DELETE'; +'d_enum_mvccpb.Event.EventType'(V) -> V. + +'d_enum_authpb.Permission.Type'(0) -> 'READ'; +'d_enum_authpb.Permission.Type'(1) -> 'WRITE'; +'d_enum_authpb.Permission.Type'(2) -> 'READWRITE'; +'d_enum_authpb.Permission.Type'(V) -> V. + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> + merge_msgs(Prev, New, MsgName, []). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'merge_msg_Etcd.ResponseHeader'(Prev, New, TrUserData); + 'Etcd.RangeRequest' -> + 'merge_msg_Etcd.RangeRequest'(Prev, New, TrUserData); + 'Etcd.RangeResponse' -> + 'merge_msg_Etcd.RangeResponse'(Prev, New, TrUserData); + 'Etcd.PutRequest' -> + 'merge_msg_Etcd.PutRequest'(Prev, New, TrUserData); + 'Etcd.PutResponse' -> + 'merge_msg_Etcd.PutResponse'(Prev, New, TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'merge_msg_Etcd.DeleteRangeRequest'(Prev, New, + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'merge_msg_Etcd.DeleteRangeResponse'(Prev, New, + TrUserData); + 'Etcd.RequestOp' -> + 'merge_msg_Etcd.RequestOp'(Prev, New, TrUserData); + 'Etcd.ResponseOp' -> + 'merge_msg_Etcd.ResponseOp'(Prev, New, TrUserData); + 'Etcd.Compare' -> + 'merge_msg_Etcd.Compare'(Prev, New, TrUserData); + 'Etcd.TxnRequest' -> + 'merge_msg_Etcd.TxnRequest'(Prev, New, TrUserData); + 'Etcd.TxnResponse' -> + 'merge_msg_Etcd.TxnResponse'(Prev, New, TrUserData); + 'Etcd.CompactionRequest' -> + 'merge_msg_Etcd.CompactionRequest'(Prev, New, + TrUserData); + 'Etcd.CompactionResponse' -> + 'merge_msg_Etcd.CompactionResponse'(Prev, New, + TrUserData); + 'Etcd.HashRequest' -> + 'merge_msg_Etcd.HashRequest'(Prev, New, TrUserData); + 'Etcd.HashKVRequest' -> + 'merge_msg_Etcd.HashKVRequest'(Prev, New, TrUserData); + 'Etcd.HashKVResponse' -> + 'merge_msg_Etcd.HashKVResponse'(Prev, New, TrUserData); + 'Etcd.HashResponse' -> + 'merge_msg_Etcd.HashResponse'(Prev, New, TrUserData); + 'Etcd.SnapshotRequest' -> + 'merge_msg_Etcd.SnapshotRequest'(Prev, New, TrUserData); + 'Etcd.SnapshotResponse' -> + 'merge_msg_Etcd.SnapshotResponse'(Prev, New, + TrUserData); + 'Etcd.WatchRequest' -> + 'merge_msg_Etcd.WatchRequest'(Prev, New, TrUserData); + 'Etcd.WatchCreateRequest' -> + 'merge_msg_Etcd.WatchCreateRequest'(Prev, New, + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'merge_msg_Etcd.WatchCancelRequest'(Prev, New, + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'merge_msg_Etcd.WatchProgressRequest'(Prev, New, + TrUserData); + 'Etcd.WatchResponse' -> + 'merge_msg_Etcd.WatchResponse'(Prev, New, TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'merge_msg_Etcd.LeaseGrantRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'merge_msg_Etcd.LeaseGrantResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'merge_msg_Etcd.LeaseRevokeRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'merge_msg_Etcd.LeaseRevokeResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'merge_msg_Etcd.LeaseCheckpoint'(Prev, New, TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'merge_msg_Etcd.LeaseCheckpointRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'merge_msg_Etcd.LeaseCheckpointResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'merge_msg_Etcd.LeaseKeepAliveRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'merge_msg_Etcd.LeaseKeepAliveResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'merge_msg_Etcd.LeaseTimeToLiveRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'merge_msg_Etcd.LeaseTimeToLiveResponse'(Prev, New, + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'merge_msg_Etcd.LeaseLeasesRequest'(Prev, New, + TrUserData); + 'Etcd.LeaseStatus' -> + 'merge_msg_Etcd.LeaseStatus'(Prev, New, TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'merge_msg_Etcd.LeaseLeasesResponse'(Prev, New, + TrUserData); + 'Etcd.Member' -> + 'merge_msg_Etcd.Member'(Prev, New, TrUserData); + 'Etcd.MemberAddRequest' -> + 'merge_msg_Etcd.MemberAddRequest'(Prev, New, + TrUserData); + 'Etcd.MemberAddResponse' -> + 'merge_msg_Etcd.MemberAddResponse'(Prev, New, + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'merge_msg_Etcd.MemberRemoveRequest'(Prev, New, + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'merge_msg_Etcd.MemberRemoveResponse'(Prev, New, + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'merge_msg_Etcd.MemberUpdateRequest'(Prev, New, + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'merge_msg_Etcd.MemberUpdateResponse'(Prev, New, + TrUserData); + 'Etcd.MemberListRequest' -> + 'merge_msg_Etcd.MemberListRequest'(Prev, New, + TrUserData); + 'Etcd.MemberListResponse' -> + 'merge_msg_Etcd.MemberListResponse'(Prev, New, + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'merge_msg_Etcd.MemberPromoteRequest'(Prev, New, + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'merge_msg_Etcd.MemberPromoteResponse'(Prev, New, + TrUserData); + 'Etcd.DefragmentRequest' -> + 'merge_msg_Etcd.DefragmentRequest'(Prev, New, + TrUserData); + 'Etcd.DefragmentResponse' -> + 'merge_msg_Etcd.DefragmentResponse'(Prev, New, + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'merge_msg_Etcd.MoveLeaderRequest'(Prev, New, + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'merge_msg_Etcd.MoveLeaderResponse'(Prev, New, + TrUserData); + 'Etcd.AlarmRequest' -> + 'merge_msg_Etcd.AlarmRequest'(Prev, New, TrUserData); + 'Etcd.AlarmMember' -> + 'merge_msg_Etcd.AlarmMember'(Prev, New, TrUserData); + 'Etcd.AlarmResponse' -> + 'merge_msg_Etcd.AlarmResponse'(Prev, New, TrUserData); + 'Etcd.StatusRequest' -> + 'merge_msg_Etcd.StatusRequest'(Prev, New, TrUserData); + 'Etcd.StatusResponse' -> + 'merge_msg_Etcd.StatusResponse'(Prev, New, TrUserData); + 'Etcd.AuthEnableRequest' -> + 'merge_msg_Etcd.AuthEnableRequest'(Prev, New, + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'merge_msg_Etcd.AuthDisableRequest'(Prev, New, + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'merge_msg_Etcd.AuthenticateRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'merge_msg_Etcd.AuthUserAddRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'merge_msg_Etcd.AuthUserGetRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'merge_msg_Etcd.AuthUserDeleteRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'merge_msg_Etcd.AuthUserChangePasswordRequest'(Prev, + New, TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'merge_msg_Etcd.AuthUserGrantRoleRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'merge_msg_Etcd.AuthUserRevokeRoleRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'merge_msg_Etcd.AuthRoleAddRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'merge_msg_Etcd.AuthRoleGetRequest'(Prev, New, + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'merge_msg_Etcd.AuthUserListRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'merge_msg_Etcd.AuthRoleListRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'merge_msg_Etcd.AuthRoleDeleteRequest'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'merge_msg_Etcd.AuthRoleGrantPermissionRequest'(Prev, + New, TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'merge_msg_Etcd.AuthRoleRevokePermissionRequest'(Prev, + New, TrUserData); + 'Etcd.AuthEnableResponse' -> + 'merge_msg_Etcd.AuthEnableResponse'(Prev, New, + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'merge_msg_Etcd.AuthDisableResponse'(Prev, New, + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'merge_msg_Etcd.AuthenticateResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'merge_msg_Etcd.AuthUserAddResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'merge_msg_Etcd.AuthUserGetResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'merge_msg_Etcd.AuthUserDeleteResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'merge_msg_Etcd.AuthUserChangePasswordResponse'(Prev, + New, TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'merge_msg_Etcd.AuthUserGrantRoleResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'merge_msg_Etcd.AuthUserRevokeRoleResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'merge_msg_Etcd.AuthRoleAddResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'merge_msg_Etcd.AuthRoleGetResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'merge_msg_Etcd.AuthRoleListResponse'(Prev, New, + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'merge_msg_Etcd.AuthUserListResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'merge_msg_Etcd.AuthRoleDeleteResponse'(Prev, New, + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'merge_msg_Etcd.AuthRoleGrantPermissionResponse'(Prev, + New, TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'merge_msg_Etcd.AuthRoleRevokePermissionResponse'(Prev, + New, TrUserData); + 'Etcd.HealthCheckRequest' -> + 'merge_msg_Etcd.HealthCheckRequest'(Prev, New, + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'merge_msg_Etcd.HealthCheckResponse'(Prev, New, + TrUserData); + 'Etcd.LockRequest' -> + 'merge_msg_Etcd.LockRequest'(Prev, New, TrUserData); + 'Etcd.LockResponse' -> + 'merge_msg_Etcd.LockResponse'(Prev, New, TrUserData); + 'Etcd.UnlockRequest' -> + 'merge_msg_Etcd.UnlockRequest'(Prev, New, TrUserData); + 'Etcd.UnlockResponse' -> + 'merge_msg_Etcd.UnlockResponse'(Prev, New, TrUserData); + 'Etcd.CampaignRequest' -> + 'merge_msg_Etcd.CampaignRequest'(Prev, New, TrUserData); + 'Etcd.CampaignResponse' -> + 'merge_msg_Etcd.CampaignResponse'(Prev, New, + TrUserData); + 'Etcd.LeaderKey' -> + 'merge_msg_Etcd.LeaderKey'(Prev, New, TrUserData); + 'Etcd.LeaderRequest' -> + 'merge_msg_Etcd.LeaderRequest'(Prev, New, TrUserData); + 'Etcd.LeaderResponse' -> + 'merge_msg_Etcd.LeaderResponse'(Prev, New, TrUserData); + 'Etcd.ResignRequest' -> + 'merge_msg_Etcd.ResignRequest'(Prev, New, TrUserData); + 'Etcd.ResignResponse' -> + 'merge_msg_Etcd.ResignResponse'(Prev, New, TrUserData); + 'Etcd.ProclaimRequest' -> + 'merge_msg_Etcd.ProclaimRequest'(Prev, New, TrUserData); + 'Etcd.ProclaimResponse' -> + 'merge_msg_Etcd.ProclaimResponse'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'merge_msg_google.protobuf.FileDescriptorSet'(Prev, New, + TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'merge_msg_google.protobuf.FileDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(Prev, + New, + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'merge_msg_google.protobuf.DescriptorProto'(Prev, New, + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'merge_msg_google.protobuf.FieldDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'merge_msg_google.protobuf.OneofDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'merge_msg_google.protobuf.EnumDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'merge_msg_google.protobuf.EnumValueDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'merge_msg_google.protobuf.ServiceDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'merge_msg_google.protobuf.MethodDescriptorProto'(Prev, + New, TrUserData); + 'google.protobuf.FileOptions' -> + 'merge_msg_google.protobuf.FileOptions'(Prev, New, + TrUserData); + 'google.protobuf.MessageOptions' -> + 'merge_msg_google.protobuf.MessageOptions'(Prev, New, + TrUserData); + 'google.protobuf.FieldOptions' -> + 'merge_msg_google.protobuf.FieldOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumOptions' -> + 'merge_msg_google.protobuf.EnumOptions'(Prev, New, + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'merge_msg_google.protobuf.EnumValueOptions'(Prev, New, + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'merge_msg_google.protobuf.ServiceOptions'(Prev, New, + TrUserData); + 'google.protobuf.MethodOptions' -> + 'merge_msg_google.protobuf.MethodOptions'(Prev, New, + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'merge_msg_google.protobuf.UninterpretedOption.NamePart'(Prev, + New, + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'merge_msg_google.protobuf.UninterpretedOption'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'merge_msg_google.protobuf.SourceCodeInfo.Location'(Prev, + New, TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'merge_msg_google.protobuf.SourceCodeInfo'(Prev, New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Prev, + New, + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'merge_msg_google.protobuf.GeneratedCodeInfo'(Prev, New, + TrUserData); + 'mvccpb.KeyValue' -> + 'merge_msg_mvccpb.KeyValue'(Prev, New, TrUserData); + 'mvccpb.Event' -> + 'merge_msg_mvccpb.Event'(Prev, New, TrUserData); + 'authpb.UserAddOptions' -> + 'merge_msg_authpb.UserAddOptions'(Prev, New, + TrUserData); + 'authpb.User' -> + 'merge_msg_authpb.User'(Prev, New, TrUserData); + 'authpb.Permission' -> + 'merge_msg_authpb.Permission'(Prev, New, TrUserData); + 'authpb.Role' -> + 'merge_msg_authpb.Role'(Prev, New, TrUserData) + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResponseHeader'/3}). +'merge_msg_Etcd.ResponseHeader'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{cluster_id := NFcluster_id}} -> + S1#{cluster_id => NFcluster_id}; + {#{cluster_id := PFcluster_id}, _} -> + S1#{cluster_id => PFcluster_id}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{member_id := NFmember_id}} -> + S2#{member_id => NFmember_id}; + {#{member_id := PFmember_id}, _} -> + S2#{member_id => PFmember_id}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S3#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S3#{revision => PFrevision}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{raft_term := NFraft_term}} -> + S4#{raft_term => NFraft_term}; + {#{raft_term := PFraft_term}, _} -> + S4#{raft_term => PFraft_term}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RangeRequest'/3}). +'merge_msg_Etcd.RangeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{limit := NFlimit}} -> S3#{limit => NFlimit}; + {#{limit := PFlimit}, _} -> S3#{limit => PFlimit}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S4#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S4#{revision => PFrevision}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{sort_order := NFsort_order}} -> + S5#{sort_order => NFsort_order}; + {#{sort_order := PFsort_order}, _} -> + S5#{sort_order => PFsort_order}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{sort_target := NFsort_target}} -> + S6#{sort_target => NFsort_target}; + {#{sort_target := PFsort_target}, _} -> + S6#{sort_target => PFsort_target}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{serializable := NFserializable}} -> + S7#{serializable => NFserializable}; + {#{serializable := PFserializable}, _} -> + S7#{serializable => PFserializable}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{keys_only := NFkeys_only}} -> + S8#{keys_only => NFkeys_only}; + {#{keys_only := PFkeys_only}, _} -> + S8#{keys_only => PFkeys_only}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{count_only := NFcount_only}} -> + S9#{count_only => NFcount_only}; + {#{count_only := PFcount_only}, _} -> + S9#{count_only => PFcount_only}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{min_mod_revision := NFmin_mod_revision}} -> + S10#{min_mod_revision => NFmin_mod_revision}; + {#{min_mod_revision := PFmin_mod_revision}, _} -> + S10#{min_mod_revision => PFmin_mod_revision}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{max_mod_revision := NFmax_mod_revision}} -> + S11#{max_mod_revision => NFmax_mod_revision}; + {#{max_mod_revision := PFmax_mod_revision}, _} -> + S11#{max_mod_revision => PFmax_mod_revision}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{min_create_revision := NFmin_create_revision}} -> + S12#{min_create_revision => NFmin_create_revision}; + {#{min_create_revision := PFmin_create_revision}, _} -> + S12#{min_create_revision => PFmin_create_revision}; + _ -> S12 + end, + case {PMsg, NMsg} of + {_, #{max_create_revision := NFmax_create_revision}} -> + S13#{max_create_revision => NFmax_create_revision}; + {#{max_create_revision := PFmax_create_revision}, _} -> + S13#{max_create_revision => PFmax_create_revision}; + _ -> S13 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RangeResponse'/3}). +'merge_msg_Etcd.RangeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kvs := PFkvs}, #{kvs := NFkvs}} -> + S2#{kvs => 'erlang_++'(PFkvs, NFkvs, TrUserData)}; + {_, #{kvs := NFkvs}} -> S2#{kvs => NFkvs}; + {#{kvs := PFkvs}, _} -> S2#{kvs => PFkvs}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{more := NFmore}} -> S3#{more => NFmore}; + {#{more := PFmore}, _} -> S3#{more => PFmore}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{count := NFcount}} -> S4#{count => NFcount}; + {#{count := PFcount}, _} -> S4#{count => PFcount}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.PutRequest'/3}). +'merge_msg_Etcd.PutRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S3#{lease => NFlease}; + {#{lease := PFlease}, _} -> S3#{lease => PFlease}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S4#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S4#{prev_kv => PFprev_kv}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{ignore_value := NFignore_value}} -> + S5#{ignore_value => NFignore_value}; + {#{ignore_value := PFignore_value}, _} -> + S5#{ignore_value => PFignore_value}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{ignore_lease := NFignore_lease}} -> + S6#{ignore_lease => NFignore_lease}; + {#{ignore_lease := PFignore_lease}, _} -> + S6#{ignore_lease => PFignore_lease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.PutResponse'/3}). +'merge_msg_Etcd.PutResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S2#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S2#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S2#{prev_kv => PFprev_kv}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DeleteRangeRequest'/3}). +'merge_msg_Etcd.DeleteRangeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DeleteRangeResponse'/3}). +'merge_msg_Etcd.DeleteRangeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deleted := NFdeleted}} -> + S2#{deleted => NFdeleted}; + {#{deleted := PFdeleted}, _} -> + S2#{deleted => PFdeleted}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kvs := PFprev_kvs}, + #{prev_kvs := NFprev_kvs}} -> + S3#{prev_kvs => + 'erlang_++'(PFprev_kvs, NFprev_kvs, TrUserData)}; + {_, #{prev_kvs := NFprev_kvs}} -> + S3#{prev_kvs => NFprev_kvs}; + {#{prev_kvs := PFprev_kvs}, _} -> + S3#{prev_kvs => PFprev_kvs}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.RequestOp'/3}). +'merge_msg_Etcd.RequestOp'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{request := {request_range, OPFrequest}}, + #{request := {request_range, ONFrequest}}} -> + S1#{request => + {request_range, + 'merge_msg_Etcd.RangeRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {#{request := {request_put, OPFrequest}}, + #{request := {request_put, ONFrequest}}} -> + S1#{request => + {request_put, + 'merge_msg_Etcd.PutRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {#{request := {request_delete_range, OPFrequest}}, + #{request := {request_delete_range, ONFrequest}}} -> + S1#{request => + {request_delete_range, + 'merge_msg_Etcd.DeleteRangeRequest'(OPFrequest, + ONFrequest, + TrUserData)}}; + {#{request := {request_txn, OPFrequest}}, + #{request := {request_txn, ONFrequest}}} -> + S1#{request => + {request_txn, + 'merge_msg_Etcd.TxnRequest'(OPFrequest, ONFrequest, + TrUserData)}}; + {_, #{request := NFrequest}} -> + S1#{request => NFrequest}; + {#{request := PFrequest}, _} -> + S1#{request => PFrequest}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResponseOp'/3}). +'merge_msg_Etcd.ResponseOp'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{response := {response_range, OPFresponse}}, + #{response := {response_range, ONFresponse}}} -> + S1#{response => + {response_range, + 'merge_msg_Etcd.RangeResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {#{response := {response_put, OPFresponse}}, + #{response := {response_put, ONFresponse}}} -> + S1#{response => + {response_put, + 'merge_msg_Etcd.PutResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {#{response := {response_delete_range, OPFresponse}}, + #{response := {response_delete_range, ONFresponse}}} -> + S1#{response => + {response_delete_range, + 'merge_msg_Etcd.DeleteRangeResponse'(OPFresponse, + ONFresponse, + TrUserData)}}; + {#{response := {response_txn, OPFresponse}}, + #{response := {response_txn, ONFresponse}}} -> + S1#{response => + {response_txn, + 'merge_msg_Etcd.TxnResponse'(OPFresponse, ONFresponse, + TrUserData)}}; + {_, #{response := NFresponse}} -> + S1#{response => NFresponse}; + {#{response := PFresponse}, _} -> + S1#{response => PFresponse}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.Compare'/3}). +'merge_msg_Etcd.Compare'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{result := NFresult}} -> S1#{result => NFresult}; + {#{result := PFresult}, _} -> S1#{result => PFresult}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{target := NFtarget}} -> S2#{target => NFtarget}; + {#{target := PFtarget}, _} -> S2#{target => PFtarget}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S3#{key => NFkey}; + {#{key := PFkey}, _} -> S3#{key => PFkey}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{target_union := NFtarget_union}} -> + S4#{target_union => NFtarget_union}; + {#{target_union := PFtarget_union}, _} -> + S4#{target_union => PFtarget_union}; + _ -> S4 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S5#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S5#{range_end => PFrange_end}; + _ -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.TxnRequest'/3}). +'merge_msg_Etcd.TxnRequest'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{compare := PFcompare}, #{compare := NFcompare}} -> + S1#{compare => + 'erlang_++'(PFcompare, NFcompare, TrUserData)}; + {_, #{compare := NFcompare}} -> + S1#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S1#{compare => PFcompare}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{success := PFsuccess}, #{success := NFsuccess}} -> + S2#{success => + 'erlang_++'(PFsuccess, NFsuccess, TrUserData)}; + {_, #{success := NFsuccess}} -> + S2#{success => NFsuccess}; + {#{success := PFsuccess}, _} -> + S2#{success => PFsuccess}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{failure := PFfailure}, #{failure := NFfailure}} -> + S3#{failure => + 'erlang_++'(PFfailure, NFfailure, TrUserData)}; + {_, #{failure := NFfailure}} -> + S3#{failure => NFfailure}; + {#{failure := PFfailure}, _} -> + S3#{failure => PFfailure}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.TxnResponse'/3}). +'merge_msg_Etcd.TxnResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{succeeded := NFsucceeded}} -> + S2#{succeeded => NFsucceeded}; + {#{succeeded := PFsucceeded}, _} -> + S2#{succeeded => PFsucceeded}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{responses := PFresponses}, + #{responses := NFresponses}} -> + S3#{responses => + 'erlang_++'(PFresponses, NFresponses, TrUserData)}; + {_, #{responses := NFresponses}} -> + S3#{responses => NFresponses}; + {#{responses := PFresponses}, _} -> + S3#{responses => PFresponses}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CompactionRequest'/3}). +'merge_msg_Etcd.CompactionRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S1#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S1#{revision => PFrevision}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{physical := NFphysical}} -> + S2#{physical => NFphysical}; + {#{physical := PFphysical}, _} -> + S2#{physical => PFphysical}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CompactionResponse'/3}). +'merge_msg_Etcd.CompactionResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashRequest'/3}). +'merge_msg_Etcd.HashRequest'(_Prev, New, _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashKVRequest'/3}). +'merge_msg_Etcd.HashKVRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{revision := NFrevision}} -> + S1#{revision => NFrevision}; + {#{revision := PFrevision}, _} -> + S1#{revision => PFrevision}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashKVResponse'/3}). +'merge_msg_Etcd.HashKVResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{hash := NFhash}} -> S2#{hash => NFhash}; + {#{hash := PFhash}, _} -> S2#{hash => PFhash}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{compact_revision := NFcompact_revision}} -> + S3#{compact_revision => NFcompact_revision}; + {#{compact_revision := PFcompact_revision}, _} -> + S3#{compact_revision => PFcompact_revision}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HashResponse'/3}). +'merge_msg_Etcd.HashResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{hash := NFhash}} -> S2#{hash => NFhash}; + {#{hash := PFhash}, _} -> S2#{hash => PFhash}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.SnapshotRequest'/3}). +'merge_msg_Etcd.SnapshotRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.SnapshotResponse'/3}). +'merge_msg_Etcd.SnapshotResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{remaining_bytes := NFremaining_bytes}} -> + S2#{remaining_bytes => NFremaining_bytes}; + {#{remaining_bytes := PFremaining_bytes}, _} -> + S2#{remaining_bytes => PFremaining_bytes}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{blob := NFblob}} -> S3#{blob => NFblob}; + {#{blob := PFblob}, _} -> S3#{blob => PFblob}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchRequest'/3}). +'merge_msg_Etcd.WatchRequest'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{request_union := {create_request, OPFrequest_union}}, + #{request_union := + {create_request, ONFrequest_union}}} -> + S1#{request_union => + {create_request, + 'merge_msg_Etcd.WatchCreateRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {#{request_union := {cancel_request, OPFrequest_union}}, + #{request_union := + {cancel_request, ONFrequest_union}}} -> + S1#{request_union => + {cancel_request, + 'merge_msg_Etcd.WatchCancelRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {#{request_union := + {progress_request, OPFrequest_union}}, + #{request_union := + {progress_request, ONFrequest_union}}} -> + S1#{request_union => + {progress_request, + 'merge_msg_Etcd.WatchProgressRequest'(OPFrequest_union, + ONFrequest_union, + TrUserData)}}; + {_, #{request_union := NFrequest_union}} -> + S1#{request_union => NFrequest_union}; + {#{request_union := PFrequest_union}, _} -> + S1#{request_union => PFrequest_union}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchCreateRequest'/3}). +'merge_msg_Etcd.WatchCreateRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S2#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S2#{range_end => PFrange_end}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{start_revision := NFstart_revision}} -> + S3#{start_revision => NFstart_revision}; + {#{start_revision := PFstart_revision}, _} -> + S3#{start_revision => PFstart_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{progress_notify := NFprogress_notify}} -> + S4#{progress_notify => NFprogress_notify}; + {#{progress_notify := PFprogress_notify}, _} -> + S4#{progress_notify => PFprogress_notify}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{filters := PFfilters}, #{filters := NFfilters}} -> + S5#{filters => + 'erlang_++'(PFfilters, NFfilters, TrUserData)}; + {_, #{filters := NFfilters}} -> + S5#{filters => NFfilters}; + {#{filters := PFfilters}, _} -> + S5#{filters => PFfilters}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{prev_kv := NFprev_kv}} -> + S6#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S6#{prev_kv => PFprev_kv}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S7#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S7#{watch_id => PFwatch_id}; + _ -> S7 + end, + case {PMsg, NMsg} of + {_, #{fragment := NFfragment}} -> + S8#{fragment => NFfragment}; + {#{fragment := PFfragment}, _} -> + S8#{fragment => PFfragment}; + _ -> S8 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchCancelRequest'/3}). +'merge_msg_Etcd.WatchCancelRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S1#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S1#{watch_id => PFwatch_id}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchProgressRequest'/3}). +'merge_msg_Etcd.WatchProgressRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.WatchResponse'/3}). +'merge_msg_Etcd.WatchResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{watch_id := NFwatch_id}} -> + S2#{watch_id => NFwatch_id}; + {#{watch_id := PFwatch_id}, _} -> + S2#{watch_id => PFwatch_id}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{created := NFcreated}} -> + S3#{created => NFcreated}; + {#{created := PFcreated}, _} -> + S3#{created => PFcreated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{canceled := NFcanceled}} -> + S4#{canceled => NFcanceled}; + {#{canceled := PFcanceled}, _} -> + S4#{canceled => PFcanceled}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{compact_revision := NFcompact_revision}} -> + S5#{compact_revision => NFcompact_revision}; + {#{compact_revision := PFcompact_revision}, _} -> + S5#{compact_revision => PFcompact_revision}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{cancel_reason := NFcancel_reason}} -> + S6#{cancel_reason => NFcancel_reason}; + {#{cancel_reason := PFcancel_reason}, _} -> + S6#{cancel_reason => PFcancel_reason}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{fragment := NFfragment}} -> + S7#{fragment => NFfragment}; + {#{fragment := PFfragment}, _} -> + S7#{fragment => PFfragment}; + _ -> S7 + end, + case {PMsg, NMsg} of + {#{events := PFevents}, #{events := NFevents}} -> + S8#{events => + 'erlang_++'(PFevents, NFevents, TrUserData)}; + {_, #{events := NFevents}} -> S8#{events => NFevents}; + {#{events := PFevents}, _} -> S8#{events => PFevents}; + {_, _} -> S8 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseGrantRequest'/3}). +'merge_msg_Etcd.LeaseGrantRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S1#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S1#{'TTL' => PFTTL}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseGrantResponse'/3}). +'merge_msg_Etcd.LeaseGrantResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{error := NFerror}} -> S4#{error => NFerror}; + {#{error := PFerror}, _} -> S4#{error => PFerror}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseRevokeRequest'/3}). +'merge_msg_Etcd.LeaseRevokeRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseRevokeResponse'/3}). +'merge_msg_Etcd.LeaseRevokeResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpoint'/3}). +'merge_msg_Etcd.LeaseCheckpoint'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{remaining_TTL := NFremaining_TTL}} -> + S2#{remaining_TTL => NFremaining_TTL}; + {#{remaining_TTL := PFremaining_TTL}, _} -> + S2#{remaining_TTL => PFremaining_TTL}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpointRequest'/3}). +'merge_msg_Etcd.LeaseCheckpointRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{checkpoints := PFcheckpoints}, + #{checkpoints := NFcheckpoints}} -> + S1#{checkpoints => + 'erlang_++'(PFcheckpoints, NFcheckpoints, TrUserData)}; + {_, #{checkpoints := NFcheckpoints}} -> + S1#{checkpoints => NFcheckpoints}; + {#{checkpoints := PFcheckpoints}, _} -> + S1#{checkpoints => PFcheckpoints}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseCheckpointResponse'/3}). +'merge_msg_Etcd.LeaseCheckpointResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseKeepAliveRequest'/3}). +'merge_msg_Etcd.LeaseKeepAliveRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseKeepAliveResponse'/3}). +'merge_msg_Etcd.LeaseKeepAliveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseTimeToLiveRequest'/3}). +'merge_msg_Etcd.LeaseTimeToLiveRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{keys := NFkeys}} -> S2#{keys => NFkeys}; + {#{keys := PFkeys}, _} -> S2#{keys => PFkeys}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseTimeToLiveResponse'/3}). +'merge_msg_Etcd.LeaseTimeToLiveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S2#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S2#{'ID' => PFID}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'TTL' := NFTTL}} -> S3#{'TTL' => NFTTL}; + {#{'TTL' := PFTTL}, _} -> S3#{'TTL' => PFTTL}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{grantedTTL := NFgrantedTTL}} -> + S4#{grantedTTL => NFgrantedTTL}; + {#{grantedTTL := PFgrantedTTL}, _} -> + S4#{grantedTTL => PFgrantedTTL}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{keys := PFkeys}, #{keys := NFkeys}} -> + S5#{keys => 'erlang_++'(PFkeys, NFkeys, TrUserData)}; + {_, #{keys := NFkeys}} -> S5#{keys => NFkeys}; + {#{keys := PFkeys}, _} -> S5#{keys => PFkeys}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseLeasesRequest'/3}). +'merge_msg_Etcd.LeaseLeasesRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseStatus'/3}). +'merge_msg_Etcd.LeaseStatus'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaseLeasesResponse'/3}). +'merge_msg_Etcd.LeaseLeasesResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{leases := PFleases}, #{leases := NFleases}} -> + S2#{leases => + 'erlang_++'(PFleases, NFleases, TrUserData)}; + {_, #{leases := NFleases}} -> S2#{leases => NFleases}; + {#{leases := PFleases}, _} -> S2#{leases => PFleases}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.Member'/3}). +'merge_msg_Etcd.Member'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S2#{name => NFname}; + {#{name := PFname}, _} -> S2#{name => PFname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S3#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S3#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S3#{peerURLs => PFpeerURLs}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{clientURLs := PFclientURLs}, + #{clientURLs := NFclientURLs}} -> + S4#{clientURLs => + 'erlang_++'(PFclientURLs, NFclientURLs, TrUserData)}; + {_, #{clientURLs := NFclientURLs}} -> + S4#{clientURLs => NFclientURLs}; + {#{clientURLs := PFclientURLs}, _} -> + S4#{clientURLs => PFclientURLs}; + {_, _} -> S4 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S5#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S5#{isLearner => PFisLearner}; + _ -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberAddRequest'/3}). +'merge_msg_Etcd.MemberAddRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S1#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S1#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S1#{peerURLs => PFpeerURLs}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S2#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S2#{isLearner => PFisLearner}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberAddResponse'/3}). +'merge_msg_Etcd.MemberAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{member := PFmember}, #{member := NFmember}} -> + S2#{member => + 'merge_msg_Etcd.Member'(PFmember, NFmember, + TrUserData)}; + {_, #{member := NFmember}} -> S2#{member => NFmember}; + {#{member := PFmember}, _} -> S2#{member => PFmember}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S3#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S3#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S3#{members => PFmembers}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberRemoveRequest'/3}). +'merge_msg_Etcd.MemberRemoveRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberRemoveResponse'/3}). +'merge_msg_Etcd.MemberRemoveResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberUpdateRequest'/3}). +'merge_msg_Etcd.MemberUpdateRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{peerURLs := PFpeerURLs}, + #{peerURLs := NFpeerURLs}} -> + S2#{peerURLs => + 'erlang_++'(PFpeerURLs, NFpeerURLs, TrUserData)}; + {_, #{peerURLs := NFpeerURLs}} -> + S2#{peerURLs => NFpeerURLs}; + {#{peerURLs := PFpeerURLs}, _} -> + S2#{peerURLs => PFpeerURLs}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberUpdateResponse'/3}). +'merge_msg_Etcd.MemberUpdateResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberListRequest'/3}). +'merge_msg_Etcd.MemberListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberListResponse'/3}). +'merge_msg_Etcd.MemberListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberPromoteRequest'/3}). +'merge_msg_Etcd.MemberPromoteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{'ID' := NFID}} -> S1#{'ID' => NFID}; + {#{'ID' := PFID}, _} -> S1#{'ID' => PFID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MemberPromoteResponse'/3}). +'merge_msg_Etcd.MemberPromoteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{members := PFmembers}, #{members := NFmembers}} -> + S2#{members => + 'erlang_++'(PFmembers, NFmembers, TrUserData)}; + {_, #{members := NFmembers}} -> + S2#{members => NFmembers}; + {#{members := PFmembers}, _} -> + S2#{members => PFmembers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DefragmentRequest'/3}). +'merge_msg_Etcd.DefragmentRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.DefragmentResponse'/3}). +'merge_msg_Etcd.DefragmentResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MoveLeaderRequest'/3}). +'merge_msg_Etcd.MoveLeaderRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{targetID := NFtargetID}} -> + S1#{targetID => NFtargetID}; + {#{targetID := PFtargetID}, _} -> + S1#{targetID => PFtargetID}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.MoveLeaderResponse'/3}). +'merge_msg_Etcd.MoveLeaderResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmRequest'/3}). +'merge_msg_Etcd.AlarmRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{action := NFaction}} -> S1#{action => NFaction}; + {#{action := PFaction}, _} -> S1#{action => PFaction}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{memberID := NFmemberID}} -> + S2#{memberID => NFmemberID}; + {#{memberID := PFmemberID}, _} -> + S2#{memberID => PFmemberID}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{alarm := NFalarm}} -> S3#{alarm => NFalarm}; + {#{alarm := PFalarm}, _} -> S3#{alarm => PFalarm}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmMember'/3}). +'merge_msg_Etcd.AlarmMember'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{memberID := NFmemberID}} -> + S1#{memberID => NFmemberID}; + {#{memberID := PFmemberID}, _} -> + S1#{memberID => PFmemberID}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{alarm := NFalarm}} -> S2#{alarm => NFalarm}; + {#{alarm := PFalarm}, _} -> S2#{alarm => PFalarm}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AlarmResponse'/3}). +'merge_msg_Etcd.AlarmResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{alarms := PFalarms}, #{alarms := NFalarms}} -> + S2#{alarms => + 'erlang_++'(PFalarms, NFalarms, TrUserData)}; + {_, #{alarms := NFalarms}} -> S2#{alarms => NFalarms}; + {#{alarms := PFalarms}, _} -> S2#{alarms => PFalarms}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.StatusRequest'/3}). +'merge_msg_Etcd.StatusRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.StatusResponse'/3}). +'merge_msg_Etcd.StatusResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S2#{version => NFversion}; + {#{version := PFversion}, _} -> + S2#{version => PFversion}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{dbSize := NFdbSize}} -> S3#{dbSize => NFdbSize}; + {#{dbSize := PFdbSize}, _} -> S3#{dbSize => PFdbSize}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{leader := NFleader}} -> S4#{leader => NFleader}; + {#{leader := PFleader}, _} -> S4#{leader => PFleader}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{raftIndex := NFraftIndex}} -> + S5#{raftIndex => NFraftIndex}; + {#{raftIndex := PFraftIndex}, _} -> + S5#{raftIndex => PFraftIndex}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{raftTerm := NFraftTerm}} -> + S6#{raftTerm => NFraftTerm}; + {#{raftTerm := PFraftTerm}, _} -> + S6#{raftTerm => PFraftTerm}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{raftAppliedIndex := NFraftAppliedIndex}} -> + S7#{raftAppliedIndex => NFraftAppliedIndex}; + {#{raftAppliedIndex := PFraftAppliedIndex}, _} -> + S7#{raftAppliedIndex => PFraftAppliedIndex}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{errors := PFerrors}, #{errors := NFerrors}} -> + S8#{errors => + 'erlang_++'(PFerrors, NFerrors, TrUserData)}; + {_, #{errors := NFerrors}} -> S8#{errors => NFerrors}; + {#{errors := PFerrors}, _} -> S8#{errors => PFerrors}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{dbSizeInUse := NFdbSizeInUse}} -> + S9#{dbSizeInUse => NFdbSizeInUse}; + {#{dbSizeInUse := PFdbSizeInUse}, _} -> + S9#{dbSizeInUse => PFdbSizeInUse}; + _ -> S9 + end, + case {PMsg, NMsg} of + {_, #{isLearner := NFisLearner}} -> + S10#{isLearner => NFisLearner}; + {#{isLearner := PFisLearner}, _} -> + S10#{isLearner => PFisLearner}; + _ -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthEnableRequest'/3}). +'merge_msg_Etcd.AuthEnableRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthDisableRequest'/3}). +'merge_msg_Etcd.AuthDisableRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthenticateRequest'/3}). +'merge_msg_Etcd.AuthenticateRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserAddRequest'/3}). +'merge_msg_Etcd.AuthUserAddRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGetRequest'/3}). +'merge_msg_Etcd.AuthUserGetRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserDeleteRequest'/3}). +'merge_msg_Etcd.AuthUserDeleteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserChangePasswordRequest'/3}). +'merge_msg_Etcd.AuthUserChangePasswordRequest'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGrantRoleRequest'/3}). +'merge_msg_Etcd.AuthUserGrantRoleRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{user := NFuser}} -> S1#{user => NFuser}; + {#{user := PFuser}, _} -> S1#{user => PFuser}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S2#{role => NFrole}; + {#{role := PFrole}, _} -> S2#{role => PFrole}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +'merge_msg_Etcd.AuthUserRevokeRoleRequest'(PMsg, NMsg, + _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S2#{role => NFrole}; + {#{role := PFrole}, _} -> S2#{role => PFrole}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleAddRequest'/3}). +'merge_msg_Etcd.AuthRoleAddRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGetRequest'/3}). +'merge_msg_Etcd.AuthRoleGetRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserListRequest'/3}). +'merge_msg_Etcd.AuthUserListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleListRequest'/3}). +'merge_msg_Etcd.AuthRoleListRequest'(_Prev, New, + _TrUserData) -> + New. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleDeleteRequest'/3}). +'merge_msg_Etcd.AuthRoleDeleteRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +'merge_msg_Etcd.AuthRoleGrantPermissionRequest'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{perm := PFperm}, #{perm := NFperm}} -> + S2#{perm => + 'merge_msg_authpb.Permission'(PFperm, NFperm, + TrUserData)}; + {_, #{perm := NFperm}} -> S2#{perm => NFperm}; + {#{perm := PFperm}, _} -> S2#{perm => PFperm}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +'merge_msg_Etcd.AuthRoleRevokePermissionRequest'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{role := NFrole}} -> S1#{role => NFrole}; + {#{role := PFrole}, _} -> S1#{role => PFrole}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthEnableResponse'/3}). +'merge_msg_Etcd.AuthEnableResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthDisableResponse'/3}). +'merge_msg_Etcd.AuthDisableResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthenticateResponse'/3}). +'merge_msg_Etcd.AuthenticateResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{token := NFtoken}} -> S2#{token => NFtoken}; + {#{token := PFtoken}, _} -> S2#{token => PFtoken}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserAddResponse'/3}). +'merge_msg_Etcd.AuthUserAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGetResponse'/3}). +'merge_msg_Etcd.AuthUserGetResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S2#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S2#{roles => NFroles}; + {#{roles := PFroles}, _} -> S2#{roles => PFroles}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserDeleteResponse'/3}). +'merge_msg_Etcd.AuthUserDeleteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserChangePasswordResponse'/3}). +'merge_msg_Etcd.AuthUserChangePasswordResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserGrantRoleResponse'/3}). +'merge_msg_Etcd.AuthUserGrantRoleResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +'merge_msg_Etcd.AuthUserRevokeRoleResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleAddResponse'/3}). +'merge_msg_Etcd.AuthRoleAddResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGetResponse'/3}). +'merge_msg_Etcd.AuthRoleGetResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{perm := PFperm}, #{perm := NFperm}} -> + S2#{perm => 'erlang_++'(PFperm, NFperm, TrUserData)}; + {_, #{perm := NFperm}} -> S2#{perm => NFperm}; + {#{perm := PFperm}, _} -> S2#{perm => PFperm}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleListResponse'/3}). +'merge_msg_Etcd.AuthRoleListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S2#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S2#{roles => NFroles}; + {#{roles := PFroles}, _} -> S2#{roles => PFroles}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthUserListResponse'/3}). +'merge_msg_Etcd.AuthUserListResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{users := PFusers}, #{users := NFusers}} -> + S2#{users => 'erlang_++'(PFusers, NFusers, TrUserData)}; + {_, #{users := NFusers}} -> S2#{users => NFusers}; + {#{users := PFusers}, _} -> S2#{users => PFusers}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleDeleteResponse'/3}). +'merge_msg_Etcd.AuthRoleDeleteResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +'merge_msg_Etcd.AuthRoleGrantPermissionResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +'merge_msg_Etcd.AuthRoleRevokePermissionResponse'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HealthCheckRequest'/3}). +'merge_msg_Etcd.HealthCheckRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{service := NFservice}} -> + S1#{service => NFservice}; + {#{service := PFservice}, _} -> + S1#{service => PFservice}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.HealthCheckResponse'/3}). +'merge_msg_Etcd.HealthCheckResponse'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{status := NFstatus}} -> S1#{status => NFstatus}; + {#{status := PFstatus}, _} -> S1#{status => PFstatus}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LockRequest'/3}). +'merge_msg_Etcd.LockRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S2#{lease => NFlease}; + {#{lease := PFlease}, _} -> S2#{lease => PFlease}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LockResponse'/3}). +'merge_msg_Etcd.LockResponse'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.UnlockRequest'/3}). +'merge_msg_Etcd.UnlockRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.UnlockResponse'/3}). +'merge_msg_Etcd.UnlockResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CampaignRequest'/3}). +'merge_msg_Etcd.CampaignRequest'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S2#{lease => NFlease}; + {#{lease := PFlease}, _} -> S2#{lease => PFlease}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S3#{value => NFvalue}; + {#{value := PFvalue}, _} -> S3#{value => PFvalue}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.CampaignResponse'/3}). +'merge_msg_Etcd.CampaignResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S2#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S2#{leader => NFleader}; + {#{leader := PFleader}, _} -> S2#{leader => PFleader}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderKey'/3}). +'merge_msg_Etcd.LeaderKey'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{rev := NFrev}} -> S3#{rev => NFrev}; + {#{rev := PFrev}, _} -> S3#{rev => PFrev}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S4#{lease => NFlease}; + {#{lease := PFlease}, _} -> S4#{lease => PFlease}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderRequest'/3}). +'merge_msg_Etcd.LeaderRequest'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.LeaderResponse'/3}). +'merge_msg_Etcd.LeaderResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResignRequest'/3}). +'merge_msg_Etcd.ResignRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S1#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S1#{leader => NFleader}; + {#{leader := PFleader}, _} -> S1#{leader => PFleader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ResignResponse'/3}). +'merge_msg_Etcd.ResignResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ProclaimRequest'/3}). +'merge_msg_Etcd.ProclaimRequest'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{leader := PFleader}, #{leader := NFleader}} -> + S1#{leader => + 'merge_msg_Etcd.LeaderKey'(PFleader, NFleader, + TrUserData)}; + {_, #{leader := NFleader}} -> S1#{leader => NFleader}; + {#{leader := PFleader}, _} -> S1#{leader => PFleader}; + {_, _} -> S1 + end, + case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_Etcd.ProclaimResponse'/3}). +'merge_msg_Etcd.ProclaimResponse'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{header := PFheader}, #{header := NFheader}} -> + S1#{header => + 'merge_msg_Etcd.ResponseHeader'(PFheader, NFheader, + TrUserData)}; + {_, #{header := NFheader}} -> S1#{header => NFheader}; + {#{header := PFheader}, _} -> S1#{header => PFheader}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorSet'/3}). +'merge_msg_google.protobuf.FileDescriptorSet'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{file := PFfile}, #{file := NFfile}} -> + S1#{file => 'erlang_++'(PFfile, NFfile, TrUserData)}; + {_, #{file := NFfile}} -> S1#{file => NFfile}; + {#{file := PFfile}, _} -> S1#{file => PFfile}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileDescriptorProto'/3}). +'merge_msg_google.protobuf.FileDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{package := NFpackage}} -> + S2#{package => NFpackage}; + {#{package := PFpackage}, _} -> + S2#{package => PFpackage}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{dependency := PFdependency}, + #{dependency := NFdependency}} -> + S3#{dependency => + 'erlang_++'(PFdependency, NFdependency, TrUserData)}; + {_, #{dependency := NFdependency}} -> + S3#{dependency => NFdependency}; + {#{dependency := PFdependency}, _} -> + S3#{dependency => PFdependency}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{public_dependency := PFpublic_dependency}, + #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => + 'erlang_++'(PFpublic_dependency, NFpublic_dependency, + TrUserData)}; + {_, #{public_dependency := NFpublic_dependency}} -> + S4#{public_dependency => NFpublic_dependency}; + {#{public_dependency := PFpublic_dependency}, _} -> + S4#{public_dependency => PFpublic_dependency}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{weak_dependency := PFweak_dependency}, + #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => + 'erlang_++'(PFweak_dependency, NFweak_dependency, + TrUserData)}; + {_, #{weak_dependency := NFweak_dependency}} -> + S5#{weak_dependency => NFweak_dependency}; + {#{weak_dependency := PFweak_dependency}, _} -> + S5#{weak_dependency => PFweak_dependency}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{message_type := PFmessage_type}, + #{message_type := NFmessage_type}} -> + S6#{message_type => + 'erlang_++'(PFmessage_type, NFmessage_type, + TrUserData)}; + {_, #{message_type := NFmessage_type}} -> + S6#{message_type => NFmessage_type}; + {#{message_type := PFmessage_type}, _} -> + S6#{message_type => PFmessage_type}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S7#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S7#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S7#{enum_type => PFenum_type}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{service := PFservice}, #{service := NFservice}} -> + S8#{service => + 'erlang_++'(PFservice, NFservice, TrUserData)}; + {_, #{service := NFservice}} -> + S8#{service => NFservice}; + {#{service := PFservice}, _} -> + S8#{service => PFservice}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S9#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S9#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S9#{extension => PFextension}; + {_, _} -> S9 + end, + S11 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FileOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end, + S12 = case {PMsg, NMsg} of + {#{source_code_info := PFsource_code_info}, + #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => + 'merge_msg_google.protobuf.SourceCodeInfo'(PFsource_code_info, + NFsource_code_info, + TrUserData)}; + {_, #{source_code_info := NFsource_code_info}} -> + S11#{source_code_info => NFsource_code_info}; + {#{source_code_info := PFsource_code_info}, _} -> + S11#{source_code_info => PFsource_code_info}; + {_, _} -> S11 + end, + case {PMsg, NMsg} of + {_, #{syntax := NFsyntax}} -> S12#{syntax => NFsyntax}; + {#{syntax := PFsyntax}, _} -> S12#{syntax => PFsyntax}; + _ -> S12 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ExtensionRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'merge_msg_google.protobuf.DescriptorProto.ReservedRange'(PMsg, + NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{start := NFstart}} -> S1#{start => NFstart}; + {#{start := PFstart}, _} -> S1#{start => PFstart}; + _ -> S1 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S2#{'end' => NFend}; + {#{'end' := PFend}, _} -> S2#{'end' => PFend}; + _ -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.DescriptorProto'/3}). +'merge_msg_google.protobuf.DescriptorProto'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{field := PFfield}, #{field := NFfield}} -> + S2#{field => 'erlang_++'(PFfield, NFfield, TrUserData)}; + {_, #{field := NFfield}} -> S2#{field => NFfield}; + {#{field := PFfield}, _} -> S2#{field => PFfield}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{extension := PFextension}, + #{extension := NFextension}} -> + S3#{extension => + 'erlang_++'(PFextension, NFextension, TrUserData)}; + {_, #{extension := NFextension}} -> + S3#{extension => NFextension}; + {#{extension := PFextension}, _} -> + S3#{extension => PFextension}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{nested_type := PFnested_type}, + #{nested_type := NFnested_type}} -> + S4#{nested_type => + 'erlang_++'(PFnested_type, NFnested_type, TrUserData)}; + {_, #{nested_type := NFnested_type}} -> + S4#{nested_type => NFnested_type}; + {#{nested_type := PFnested_type}, _} -> + S4#{nested_type => PFnested_type}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{enum_type := PFenum_type}, + #{enum_type := NFenum_type}} -> + S5#{enum_type => + 'erlang_++'(PFenum_type, NFenum_type, TrUserData)}; + {_, #{enum_type := NFenum_type}} -> + S5#{enum_type => NFenum_type}; + {#{enum_type := PFenum_type}, _} -> + S5#{enum_type => PFenum_type}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {#{extension_range := PFextension_range}, + #{extension_range := NFextension_range}} -> + S6#{extension_range => + 'erlang_++'(PFextension_range, NFextension_range, + TrUserData)}; + {_, #{extension_range := NFextension_range}} -> + S6#{extension_range => NFextension_range}; + {#{extension_range := PFextension_range}, _} -> + S6#{extension_range => PFextension_range}; + {_, _} -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{oneof_decl := PFoneof_decl}, + #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => + 'erlang_++'(PFoneof_decl, NFoneof_decl, TrUserData)}; + {_, #{oneof_decl := NFoneof_decl}} -> + S7#{oneof_decl => NFoneof_decl}; + {#{oneof_decl := PFoneof_decl}, _} -> + S7#{oneof_decl => PFoneof_decl}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S8#{options => + 'merge_msg_google.protobuf.MessageOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S8#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S8#{options => PFoptions}; + {_, _} -> S8 + end, + S10 = case {PMsg, NMsg} of + {#{reserved_range := PFreserved_range}, + #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => + 'erlang_++'(PFreserved_range, NFreserved_range, + TrUserData)}; + {_, #{reserved_range := NFreserved_range}} -> + S9#{reserved_range => NFreserved_range}; + {#{reserved_range := PFreserved_range}, _} -> + S9#{reserved_range => PFreserved_range}; + {_, _} -> S9 + end, + case {PMsg, NMsg} of + {#{reserved_name := PFreserved_name}, + #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => + 'erlang_++'(PFreserved_name, NFreserved_name, + TrUserData)}; + {_, #{reserved_name := NFreserved_name}} -> + S10#{reserved_name => NFreserved_name}; + {#{reserved_name := PFreserved_name}, _} -> + S10#{reserved_name => PFreserved_name}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldDescriptorProto'/3}). +'merge_msg_google.protobuf.FieldDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{label := NFlabel}} -> S3#{label => NFlabel}; + {#{label := PFlabel}, _} -> S3#{label => PFlabel}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S4#{type => NFtype}; + {#{type := PFtype}, _} -> S4#{type => PFtype}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{type_name := NFtype_name}} -> + S5#{type_name => NFtype_name}; + {#{type_name := PFtype_name}, _} -> + S5#{type_name => PFtype_name}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{extendee := NFextendee}} -> + S6#{extendee => NFextendee}; + {#{extendee := PFextendee}, _} -> + S6#{extendee => PFextendee}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{default_value := NFdefault_value}} -> + S7#{default_value => NFdefault_value}; + {#{default_value := PFdefault_value}, _} -> + S7#{default_value => PFdefault_value}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{oneof_index := NFoneof_index}} -> + S8#{oneof_index => NFoneof_index}; + {#{oneof_index := PFoneof_index}, _} -> + S8#{oneof_index => PFoneof_index}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{json_name := NFjson_name}} -> + S9#{json_name => NFjson_name}; + {#{json_name := PFjson_name}, _} -> + S9#{json_name => PFjson_name}; + _ -> S9 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S10#{options => + 'merge_msg_google.protobuf.FieldOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S10#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S10#{options => PFoptions}; + {_, _} -> S10 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.OneofDescriptorProto'/3}). +'merge_msg_google.protobuf.OneofDescriptorProto'(PMsg, + NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{value := PFvalue}, #{value := NFvalue}} -> + S2#{value => 'erlang_++'(PFvalue, NFvalue, TrUserData)}; + {_, #{value := NFvalue}} -> S2#{value => NFvalue}; + {#{value := PFvalue}, _} -> S2#{value => PFvalue}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'merge_msg_google.protobuf.EnumValueDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{number := NFnumber}} -> S2#{number => NFnumber}; + {#{number := PFnumber}, _} -> S2#{number => PFnumber}; + _ -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.EnumValueOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceDescriptorProto'/3}). +'merge_msg_google.protobuf.ServiceDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{method := PFmethod}, #{method := NFmethod}} -> + S2#{method => + 'erlang_++'(PFmethod, NFmethod, TrUserData)}; + {_, #{method := NFmethod}} -> S2#{method => NFmethod}; + {#{method := PFmethod}, _} -> S2#{method => PFmethod}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S3#{options => + 'merge_msg_google.protobuf.ServiceOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S3#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S3#{options => PFoptions}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodDescriptorProto'/3}). +'merge_msg_google.protobuf.MethodDescriptorProto'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{input_type := NFinput_type}} -> + S2#{input_type => NFinput_type}; + {#{input_type := PFinput_type}, _} -> + S2#{input_type => PFinput_type}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{output_type := NFoutput_type}} -> + S3#{output_type => NFoutput_type}; + {#{output_type := PFoutput_type}, _} -> + S3#{output_type => PFoutput_type}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_google.protobuf.MethodOptions'(PFoptions, + NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{client_streaming := NFclient_streaming}} -> + S5#{client_streaming => NFclient_streaming}; + {#{client_streaming := PFclient_streaming}, _} -> + S5#{client_streaming => PFclient_streaming}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{server_streaming := NFserver_streaming}} -> + S6#{server_streaming => NFserver_streaming}; + {#{server_streaming := PFserver_streaming}, _} -> + S6#{server_streaming => PFserver_streaming}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FileOptions'/3}). +'merge_msg_google.protobuf.FileOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{java_package := NFjava_package}} -> + S1#{java_package => NFjava_package}; + {#{java_package := PFjava_package}, _} -> + S1#{java_package => PFjava_package}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{java_outer_classname := NFjava_outer_classname}} -> + S2#{java_outer_classname => NFjava_outer_classname}; + {#{java_outer_classname := PFjava_outer_classname}, + _} -> + S2#{java_outer_classname => PFjava_outer_classname}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{java_multiple_files := NFjava_multiple_files}} -> + S3#{java_multiple_files => NFjava_multiple_files}; + {#{java_multiple_files := PFjava_multiple_files}, _} -> + S3#{java_multiple_files => PFjava_multiple_files}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, + #{java_generate_equals_and_hash := + NFjava_generate_equals_and_hash}} -> + S4#{java_generate_equals_and_hash => + NFjava_generate_equals_and_hash}; + {#{java_generate_equals_and_hash := + PFjava_generate_equals_and_hash}, + _} -> + S4#{java_generate_equals_and_hash => + PFjava_generate_equals_and_hash}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{java_string_check_utf8 := + NFjava_string_check_utf8}} -> + S5#{java_string_check_utf8 => NFjava_string_check_utf8}; + {#{java_string_check_utf8 := PFjava_string_check_utf8}, + _} -> + S5#{java_string_check_utf8 => PFjava_string_check_utf8}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{optimize_for := NFoptimize_for}} -> + S6#{optimize_for => NFoptimize_for}; + {#{optimize_for := PFoptimize_for}, _} -> + S6#{optimize_for => PFoptimize_for}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{go_package := NFgo_package}} -> + S7#{go_package => NFgo_package}; + {#{go_package := PFgo_package}, _} -> + S7#{go_package => PFgo_package}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{cc_generic_services := NFcc_generic_services}} -> + S8#{cc_generic_services => NFcc_generic_services}; + {#{cc_generic_services := PFcc_generic_services}, _} -> + S8#{cc_generic_services => PFcc_generic_services}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, + #{java_generic_services := NFjava_generic_services}} -> + S9#{java_generic_services => NFjava_generic_services}; + {#{java_generic_services := PFjava_generic_services}, + _} -> + S9#{java_generic_services => PFjava_generic_services}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{py_generic_services := NFpy_generic_services}} -> + S10#{py_generic_services => NFpy_generic_services}; + {#{py_generic_services := PFpy_generic_services}, _} -> + S10#{py_generic_services => PFpy_generic_services}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S11#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S11#{deprecated => PFdeprecated}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{cc_enable_arenas := NFcc_enable_arenas}} -> + S12#{cc_enable_arenas => NFcc_enable_arenas}; + {#{cc_enable_arenas := PFcc_enable_arenas}, _} -> + S12#{cc_enable_arenas => PFcc_enable_arenas}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{objc_class_prefix := NFobjc_class_prefix}} -> + S13#{objc_class_prefix => NFobjc_class_prefix}; + {#{objc_class_prefix := PFobjc_class_prefix}, _} -> + S13#{objc_class_prefix => PFobjc_class_prefix}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{csharp_namespace := NFcsharp_namespace}} -> + S14#{csharp_namespace => NFcsharp_namespace}; + {#{csharp_namespace := PFcsharp_namespace}, _} -> + S14#{csharp_namespace => PFcsharp_namespace}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, + #{javanano_use_deprecated_package := + NFjavanano_use_deprecated_package}} -> + S15#{javanano_use_deprecated_package => + NFjavanano_use_deprecated_package}; + {#{javanano_use_deprecated_package := + PFjavanano_use_deprecated_package}, + _} -> + S15#{javanano_use_deprecated_package => + PFjavanano_use_deprecated_package}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S16#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S16#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{goproto_getters_all := NFgoproto_getters_all}} -> + S17#{goproto_getters_all => NFgoproto_getters_all}; + {#{goproto_getters_all := PFgoproto_getters_all}, _} -> + S17#{goproto_getters_all => PFgoproto_getters_all}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, + #{goproto_enum_prefix_all := + NFgoproto_enum_prefix_all}} -> + S18#{goproto_enum_prefix_all => + NFgoproto_enum_prefix_all}; + {#{goproto_enum_prefix_all := + PFgoproto_enum_prefix_all}, + _} -> + S18#{goproto_enum_prefix_all => + PFgoproto_enum_prefix_all}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, + #{goproto_stringer_all := NFgoproto_stringer_all}} -> + S19#{goproto_stringer_all => NFgoproto_stringer_all}; + {#{goproto_stringer_all := PFgoproto_stringer_all}, + _} -> + S19#{goproto_stringer_all => PFgoproto_stringer_all}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{verbose_equal_all := NFverbose_equal_all}} -> + S20#{verbose_equal_all => NFverbose_equal_all}; + {#{verbose_equal_all := PFverbose_equal_all}, _} -> + S20#{verbose_equal_all => PFverbose_equal_all}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{face_all := NFface_all}} -> + S21#{face_all => NFface_all}; + {#{face_all := PFface_all}, _} -> + S21#{face_all => PFface_all}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{gostring_all := NFgostring_all}} -> + S22#{gostring_all => NFgostring_all}; + {#{gostring_all := PFgostring_all}, _} -> + S22#{gostring_all => PFgostring_all}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{populate_all := NFpopulate_all}} -> + S23#{populate_all => NFpopulate_all}; + {#{populate_all := PFpopulate_all}, _} -> + S23#{populate_all => PFpopulate_all}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, #{stringer_all := NFstringer_all}} -> + S24#{stringer_all => NFstringer_all}; + {#{stringer_all := PFstringer_all}, _} -> + S24#{stringer_all => PFstringer_all}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, #{onlyone_all := NFonlyone_all}} -> + S25#{onlyone_all => NFonlyone_all}; + {#{onlyone_all := PFonlyone_all}, _} -> + S25#{onlyone_all => PFonlyone_all}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{equal_all := NFequal_all}} -> + S26#{equal_all => NFequal_all}; + {#{equal_all := PFequal_all}, _} -> + S26#{equal_all => PFequal_all}; + _ -> S26 + end, + S28 = case {PMsg, NMsg} of + {_, #{description_all := NFdescription_all}} -> + S27#{description_all => NFdescription_all}; + {#{description_all := PFdescription_all}, _} -> + S27#{description_all => PFdescription_all}; + _ -> S27 + end, + S29 = case {PMsg, NMsg} of + {_, #{testgen_all := NFtestgen_all}} -> + S28#{testgen_all => NFtestgen_all}; + {#{testgen_all := PFtestgen_all}, _} -> + S28#{testgen_all => PFtestgen_all}; + _ -> S28 + end, + S30 = case {PMsg, NMsg} of + {_, #{benchgen_all := NFbenchgen_all}} -> + S29#{benchgen_all => NFbenchgen_all}; + {#{benchgen_all := PFbenchgen_all}, _} -> + S29#{benchgen_all => PFbenchgen_all}; + _ -> S29 + end, + S31 = case {PMsg, NMsg} of + {_, #{marshaler_all := NFmarshaler_all}} -> + S30#{marshaler_all => NFmarshaler_all}; + {#{marshaler_all := PFmarshaler_all}, _} -> + S30#{marshaler_all => PFmarshaler_all}; + _ -> S30 + end, + S32 = case {PMsg, NMsg} of + {_, #{unmarshaler_all := NFunmarshaler_all}} -> + S31#{unmarshaler_all => NFunmarshaler_all}; + {#{unmarshaler_all := PFunmarshaler_all}, _} -> + S31#{unmarshaler_all => PFunmarshaler_all}; + _ -> S31 + end, + S33 = case {PMsg, NMsg} of + {_, + #{stable_marshaler_all := NFstable_marshaler_all}} -> + S32#{stable_marshaler_all => NFstable_marshaler_all}; + {#{stable_marshaler_all := PFstable_marshaler_all}, + _} -> + S32#{stable_marshaler_all => PFstable_marshaler_all}; + _ -> S32 + end, + S34 = case {PMsg, NMsg} of + {_, #{sizer_all := NFsizer_all}} -> + S33#{sizer_all => NFsizer_all}; + {#{sizer_all := PFsizer_all}, _} -> + S33#{sizer_all => PFsizer_all}; + _ -> S33 + end, + S35 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer_all := + NFgoproto_enum_stringer_all}} -> + S34#{goproto_enum_stringer_all => + NFgoproto_enum_stringer_all}; + {#{goproto_enum_stringer_all := + PFgoproto_enum_stringer_all}, + _} -> + S34#{goproto_enum_stringer_all => + PFgoproto_enum_stringer_all}; + _ -> S34 + end, + S36 = case {PMsg, NMsg} of + {_, #{enum_stringer_all := NFenum_stringer_all}} -> + S35#{enum_stringer_all => NFenum_stringer_all}; + {#{enum_stringer_all := PFenum_stringer_all}, _} -> + S35#{enum_stringer_all => PFenum_stringer_all}; + _ -> S35 + end, + S37 = case {PMsg, NMsg} of + {_, + #{unsafe_marshaler_all := NFunsafe_marshaler_all}} -> + S36#{unsafe_marshaler_all => NFunsafe_marshaler_all}; + {#{unsafe_marshaler_all := PFunsafe_marshaler_all}, + _} -> + S36#{unsafe_marshaler_all => PFunsafe_marshaler_all}; + _ -> S36 + end, + S38 = case {PMsg, NMsg} of + {_, + #{unsafe_unmarshaler_all := + NFunsafe_unmarshaler_all}} -> + S37#{unsafe_unmarshaler_all => + NFunsafe_unmarshaler_all}; + {#{unsafe_unmarshaler_all := PFunsafe_unmarshaler_all}, + _} -> + S37#{unsafe_unmarshaler_all => + PFunsafe_unmarshaler_all}; + _ -> S37 + end, + S39 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map_all := + NFgoproto_extensions_map_all}} -> + S38#{goproto_extensions_map_all => + NFgoproto_extensions_map_all}; + {#{goproto_extensions_map_all := + PFgoproto_extensions_map_all}, + _} -> + S38#{goproto_extensions_map_all => + PFgoproto_extensions_map_all}; + _ -> S38 + end, + S40 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized_all := + NFgoproto_unrecognized_all}} -> + S39#{goproto_unrecognized_all => + NFgoproto_unrecognized_all}; + {#{goproto_unrecognized_all := + PFgoproto_unrecognized_all}, + _} -> + S39#{goproto_unrecognized_all => + PFgoproto_unrecognized_all}; + _ -> S39 + end, + S41 = case {PMsg, NMsg} of + {_, #{gogoproto_import := NFgogoproto_import}} -> + S40#{gogoproto_import => NFgogoproto_import}; + {#{gogoproto_import := PFgogoproto_import}, _} -> + S40#{gogoproto_import => PFgogoproto_import}; + _ -> S40 + end, + S42 = case {PMsg, NMsg} of + {_, #{protosizer_all := NFprotosizer_all}} -> + S41#{protosizer_all => NFprotosizer_all}; + {#{protosizer_all := PFprotosizer_all}, _} -> + S41#{protosizer_all => PFprotosizer_all}; + _ -> S41 + end, + case {PMsg, NMsg} of + {_, #{compare_all := NFcompare_all}} -> + S42#{compare_all => NFcompare_all}; + {#{compare_all := PFcompare_all}, _} -> + S42#{compare_all => PFcompare_all}; + _ -> S42 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MessageOptions'/3}). +'merge_msg_google.protobuf.MessageOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, + #{message_set_wire_format := + NFmessage_set_wire_format}} -> + S1#{message_set_wire_format => + NFmessage_set_wire_format}; + {#{message_set_wire_format := + PFmessage_set_wire_format}, + _} -> + S1#{message_set_wire_format => + PFmessage_set_wire_format}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, + #{no_standard_descriptor_accessor := + NFno_standard_descriptor_accessor}} -> + S2#{no_standard_descriptor_accessor => + NFno_standard_descriptor_accessor}; + {#{no_standard_descriptor_accessor := + PFno_standard_descriptor_accessor}, + _} -> + S2#{no_standard_descriptor_accessor => + PFno_standard_descriptor_accessor}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S3#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S3#{deprecated => PFdeprecated}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{map_entry := NFmap_entry}} -> + S4#{map_entry => NFmap_entry}; + {#{map_entry := PFmap_entry}, _} -> + S4#{map_entry => PFmap_entry}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S5#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S5#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{goproto_getters := NFgoproto_getters}} -> + S6#{goproto_getters => NFgoproto_getters}; + {#{goproto_getters := PFgoproto_getters}, _} -> + S6#{goproto_getters => PFgoproto_getters}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {_, #{goproto_stringer := NFgoproto_stringer}} -> + S7#{goproto_stringer => NFgoproto_stringer}; + {#{goproto_stringer := PFgoproto_stringer}, _} -> + S7#{goproto_stringer => PFgoproto_stringer}; + _ -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{verbose_equal := NFverbose_equal}} -> + S8#{verbose_equal => NFverbose_equal}; + {#{verbose_equal := PFverbose_equal}, _} -> + S8#{verbose_equal => PFverbose_equal}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{face := NFface}} -> S9#{face => NFface}; + {#{face := PFface}, _} -> S9#{face => PFface}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{gostring := NFgostring}} -> + S10#{gostring => NFgostring}; + {#{gostring := PFgostring}, _} -> + S10#{gostring => PFgostring}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{populate := NFpopulate}} -> + S11#{populate => NFpopulate}; + {#{populate := PFpopulate}, _} -> + S11#{populate => PFpopulate}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{stringer := NFstringer}} -> + S12#{stringer => NFstringer}; + {#{stringer := PFstringer}, _} -> + S12#{stringer => PFstringer}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{onlyone := NFonlyone}} -> + S13#{onlyone => NFonlyone}; + {#{onlyone := PFonlyone}, _} -> + S13#{onlyone => PFonlyone}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{equal := NFequal}} -> S14#{equal => NFequal}; + {#{equal := PFequal}, _} -> S14#{equal => PFequal}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{description := NFdescription}} -> + S15#{description => NFdescription}; + {#{description := PFdescription}, _} -> + S15#{description => PFdescription}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{testgen := NFtestgen}} -> + S16#{testgen => NFtestgen}; + {#{testgen := PFtestgen}, _} -> + S16#{testgen => PFtestgen}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{benchgen := NFbenchgen}} -> + S17#{benchgen => NFbenchgen}; + {#{benchgen := PFbenchgen}, _} -> + S17#{benchgen => PFbenchgen}; + _ -> S17 + end, + S19 = case {PMsg, NMsg} of + {_, #{marshaler := NFmarshaler}} -> + S18#{marshaler => NFmarshaler}; + {#{marshaler := PFmarshaler}, _} -> + S18#{marshaler => PFmarshaler}; + _ -> S18 + end, + S20 = case {PMsg, NMsg} of + {_, #{unmarshaler := NFunmarshaler}} -> + S19#{unmarshaler => NFunmarshaler}; + {#{unmarshaler := PFunmarshaler}, _} -> + S19#{unmarshaler => PFunmarshaler}; + _ -> S19 + end, + S21 = case {PMsg, NMsg} of + {_, #{stable_marshaler := NFstable_marshaler}} -> + S20#{stable_marshaler => NFstable_marshaler}; + {#{stable_marshaler := PFstable_marshaler}, _} -> + S20#{stable_marshaler => PFstable_marshaler}; + _ -> S20 + end, + S22 = case {PMsg, NMsg} of + {_, #{sizer := NFsizer}} -> S21#{sizer => NFsizer}; + {#{sizer := PFsizer}, _} -> S21#{sizer => PFsizer}; + _ -> S21 + end, + S23 = case {PMsg, NMsg} of + {_, #{unsafe_marshaler := NFunsafe_marshaler}} -> + S22#{unsafe_marshaler => NFunsafe_marshaler}; + {#{unsafe_marshaler := PFunsafe_marshaler}, _} -> + S22#{unsafe_marshaler => PFunsafe_marshaler}; + _ -> S22 + end, + S24 = case {PMsg, NMsg} of + {_, #{unsafe_unmarshaler := NFunsafe_unmarshaler}} -> + S23#{unsafe_unmarshaler => NFunsafe_unmarshaler}; + {#{unsafe_unmarshaler := PFunsafe_unmarshaler}, _} -> + S23#{unsafe_unmarshaler => PFunsafe_unmarshaler}; + _ -> S23 + end, + S25 = case {PMsg, NMsg} of + {_, + #{goproto_extensions_map := + NFgoproto_extensions_map}} -> + S24#{goproto_extensions_map => + NFgoproto_extensions_map}; + {#{goproto_extensions_map := PFgoproto_extensions_map}, + _} -> + S24#{goproto_extensions_map => + PFgoproto_extensions_map}; + _ -> S24 + end, + S26 = case {PMsg, NMsg} of + {_, + #{goproto_unrecognized := NFgoproto_unrecognized}} -> + S25#{goproto_unrecognized => NFgoproto_unrecognized}; + {#{goproto_unrecognized := PFgoproto_unrecognized}, + _} -> + S25#{goproto_unrecognized => PFgoproto_unrecognized}; + _ -> S25 + end, + S27 = case {PMsg, NMsg} of + {_, #{protosizer := NFprotosizer}} -> + S26#{protosizer => NFprotosizer}; + {#{protosizer := PFprotosizer}, _} -> + S26#{protosizer => PFprotosizer}; + _ -> S26 + end, + case {PMsg, NMsg} of + {_, #{compare := NFcompare}} -> + S27#{compare => NFcompare}; + {#{compare := PFcompare}, _} -> + S27#{compare => PFcompare}; + _ -> S27 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.FieldOptions'/3}). +'merge_msg_google.protobuf.FieldOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{ctype := NFctype}} -> S1#{ctype => NFctype}; + {#{ctype := PFctype}, _} -> S1#{ctype => PFctype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{packed := NFpacked}} -> S2#{packed => NFpacked}; + {#{packed := PFpacked}, _} -> S2#{packed => PFpacked}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{jstype := NFjstype}} -> S3#{jstype => NFjstype}; + {#{jstype := PFjstype}, _} -> S3#{jstype => PFjstype}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{lazy := NFlazy}} -> S4#{lazy => NFlazy}; + {#{lazy := PFlazy}, _} -> S4#{lazy => PFlazy}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S5#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S5#{deprecated => PFdeprecated}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{weak := NFweak}} -> S6#{weak => NFweak}; + {#{weak := PFweak}, _} -> S6#{weak => PFweak}; + _ -> S6 + end, + S8 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S7#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S7#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S7 + end, + S9 = case {PMsg, NMsg} of + {_, #{nullable := NFnullable}} -> + S8#{nullable => NFnullable}; + {#{nullable := PFnullable}, _} -> + S8#{nullable => PFnullable}; + _ -> S8 + end, + S10 = case {PMsg, NMsg} of + {_, #{embed := NFembed}} -> S9#{embed => NFembed}; + {#{embed := PFembed}, _} -> S9#{embed => PFembed}; + _ -> S9 + end, + S11 = case {PMsg, NMsg} of + {_, #{customtype := NFcustomtype}} -> + S10#{customtype => NFcustomtype}; + {#{customtype := PFcustomtype}, _} -> + S10#{customtype => PFcustomtype}; + _ -> S10 + end, + S12 = case {PMsg, NMsg} of + {_, #{customname := NFcustomname}} -> + S11#{customname => NFcustomname}; + {#{customname := PFcustomname}, _} -> + S11#{customname => PFcustomname}; + _ -> S11 + end, + S13 = case {PMsg, NMsg} of + {_, #{jsontag := NFjsontag}} -> + S12#{jsontag => NFjsontag}; + {#{jsontag := PFjsontag}, _} -> + S12#{jsontag => PFjsontag}; + _ -> S12 + end, + S14 = case {PMsg, NMsg} of + {_, #{moretags := NFmoretags}} -> + S13#{moretags => NFmoretags}; + {#{moretags := PFmoretags}, _} -> + S13#{moretags => PFmoretags}; + _ -> S13 + end, + S15 = case {PMsg, NMsg} of + {_, #{casttype := NFcasttype}} -> + S14#{casttype => NFcasttype}; + {#{casttype := PFcasttype}, _} -> + S14#{casttype => PFcasttype}; + _ -> S14 + end, + S16 = case {PMsg, NMsg} of + {_, #{castkey := NFcastkey}} -> + S15#{castkey => NFcastkey}; + {#{castkey := PFcastkey}, _} -> + S15#{castkey => PFcastkey}; + _ -> S15 + end, + S17 = case {PMsg, NMsg} of + {_, #{castvalue := NFcastvalue}} -> + S16#{castvalue => NFcastvalue}; + {#{castvalue := PFcastvalue}, _} -> + S16#{castvalue => PFcastvalue}; + _ -> S16 + end, + S18 = case {PMsg, NMsg} of + {_, #{stdtime := NFstdtime}} -> + S17#{stdtime => NFstdtime}; + {#{stdtime := PFstdtime}, _} -> + S17#{stdtime => PFstdtime}; + _ -> S17 + end, + case {PMsg, NMsg} of + {_, #{stdduration := NFstdduration}} -> + S18#{stdduration => NFstdduration}; + {#{stdduration := PFstdduration}, _} -> + S18#{stdduration => PFstdduration}; + _ -> S18 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumOptions'/3}). +'merge_msg_google.protobuf.EnumOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{allow_alias := NFallow_alias}} -> + S1#{allow_alias => NFallow_alias}; + {#{allow_alias := PFallow_alias}, _} -> + S1#{allow_alias => PFallow_alias}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S2#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S2#{deprecated => PFdeprecated}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S3#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S3#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{goproto_enum_prefix := NFgoproto_enum_prefix}} -> + S4#{goproto_enum_prefix => NFgoproto_enum_prefix}; + {#{goproto_enum_prefix := PFgoproto_enum_prefix}, _} -> + S4#{goproto_enum_prefix => PFgoproto_enum_prefix}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, + #{goproto_enum_stringer := NFgoproto_enum_stringer}} -> + S5#{goproto_enum_stringer => NFgoproto_enum_stringer}; + {#{goproto_enum_stringer := PFgoproto_enum_stringer}, + _} -> + S5#{goproto_enum_stringer => PFgoproto_enum_stringer}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{enum_stringer := NFenum_stringer}} -> + S6#{enum_stringer => NFenum_stringer}; + {#{enum_stringer := PFenum_stringer}, _} -> + S6#{enum_stringer => PFenum_stringer}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{enum_customname := NFenum_customname}} -> + S7#{enum_customname => NFenum_customname}; + {#{enum_customname := PFenum_customname}, _} -> + S7#{enum_customname => PFenum_customname}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.EnumValueOptions'/3}). +'merge_msg_google.protobuf.EnumValueOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {_, + #{enumvalue_customname := NFenumvalue_customname}} -> + S3#{enumvalue_customname => NFenumvalue_customname}; + {#{enumvalue_customname := PFenumvalue_customname}, + _} -> + S3#{enumvalue_customname => PFenumvalue_customname}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.ServiceOptions'/3}). +'merge_msg_google.protobuf.ServiceOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.MethodOptions'/3}). +'merge_msg_google.protobuf.MethodOptions'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{deprecated := NFdeprecated}} -> + S1#{deprecated => NFdeprecated}; + {#{deprecated := PFdeprecated}, _} -> + S1#{deprecated => PFdeprecated}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{uninterpreted_option := PFuninterpreted_option}, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => + 'erlang_++'(PFuninterpreted_option, + NFuninterpreted_option, TrUserData)}; + {_, + #{uninterpreted_option := NFuninterpreted_option}} -> + S2#{uninterpreted_option => NFuninterpreted_option}; + {#{uninterpreted_option := PFuninterpreted_option}, + _} -> + S2#{uninterpreted_option => PFuninterpreted_option}; + {_, _} -> S2 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'merge_msg_google.protobuf.UninterpretedOption.NamePart'(#{}, + #{name_part := + NFname_part, + is_extension := + NFis_extension}, + _) -> + #{name_part => NFname_part, + is_extension => NFis_extension}. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.UninterpretedOption'/3}). +'merge_msg_google.protobuf.UninterpretedOption'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{name := PFname}, #{name := NFname}} -> + S1#{name => 'erlang_++'(PFname, NFname, TrUserData)}; + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{identifier_value := NFidentifier_value}} -> + S2#{identifier_value => NFidentifier_value}; + {#{identifier_value := PFidentifier_value}, _} -> + S2#{identifier_value => PFidentifier_value}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{positive_int_value := NFpositive_int_value}} -> + S3#{positive_int_value => NFpositive_int_value}; + {#{positive_int_value := PFpositive_int_value}, _} -> + S3#{positive_int_value => PFpositive_int_value}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{negative_int_value := NFnegative_int_value}} -> + S4#{negative_int_value => NFnegative_int_value}; + {#{negative_int_value := PFnegative_int_value}, _} -> + S4#{negative_int_value => PFnegative_int_value}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{double_value := NFdouble_value}} -> + S5#{double_value => NFdouble_value}; + {#{double_value := PFdouble_value}, _} -> + S5#{double_value => PFdouble_value}; + _ -> S5 + end, + S7 = case {PMsg, NMsg} of + {_, #{string_value := NFstring_value}} -> + S6#{string_value => NFstring_value}; + {#{string_value := PFstring_value}, _} -> + S6#{string_value => PFstring_value}; + _ -> S6 + end, + case {PMsg, NMsg} of + {_, #{aggregate_value := NFaggregate_value}} -> + S7#{aggregate_value => NFaggregate_value}; + {#{aggregate_value := PFaggregate_value}, _} -> + S7#{aggregate_value => PFaggregate_value}; + _ -> S7 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'merge_msg_google.protobuf.SourceCodeInfo.Location'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{span := PFspan}, #{span := NFspan}} -> + S2#{span => 'erlang_++'(PFspan, NFspan, TrUserData)}; + {_, #{span := NFspan}} -> S2#{span => NFspan}; + {#{span := PFspan}, _} -> S2#{span => PFspan}; + {_, _} -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{leading_comments := NFleading_comments}} -> + S3#{leading_comments => NFleading_comments}; + {#{leading_comments := PFleading_comments}, _} -> + S3#{leading_comments => PFleading_comments}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{trailing_comments := NFtrailing_comments}} -> + S4#{trailing_comments => NFtrailing_comments}; + {#{trailing_comments := PFtrailing_comments}, _} -> + S4#{trailing_comments => PFtrailing_comments}; + _ -> S4 + end, + case {PMsg, NMsg} of + {#{leading_detached_comments := + PFleading_detached_comments}, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + 'erlang_++'(PFleading_detached_comments, + NFleading_detached_comments, TrUserData)}; + {_, + #{leading_detached_comments := + NFleading_detached_comments}} -> + S5#{leading_detached_comments => + NFleading_detached_comments}; + {#{leading_detached_comments := + PFleading_detached_comments}, + _} -> + S5#{leading_detached_comments => + PFleading_detached_comments}; + {_, _} -> S5 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.SourceCodeInfo'/3}). +'merge_msg_google.protobuf.SourceCodeInfo'(PMsg, NMsg, + TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{location := PFlocation}, + #{location := NFlocation}} -> + S1#{location => + 'erlang_++'(PFlocation, NFlocation, TrUserData)}; + {_, #{location := NFlocation}} -> + S1#{location => NFlocation}; + {#{location := PFlocation}, _} -> + S1#{location => PFlocation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo.Annotation'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {#{path := PFpath}, #{path := NFpath}} -> + S1#{path => 'erlang_++'(PFpath, NFpath, TrUserData)}; + {_, #{path := NFpath}} -> S1#{path => NFpath}; + {#{path := PFpath}, _} -> S1#{path => PFpath}; + {_, _} -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{source_file := NFsource_file}} -> + S2#{source_file => NFsource_file}; + {#{source_file := PFsource_file}, _} -> + S2#{source_file => PFsource_file}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{'begin' := NFbegin}} -> S3#{'begin' => NFbegin}; + {#{'begin' := PFbegin}, _} -> S3#{'begin' => PFbegin}; + _ -> S3 + end, + case {PMsg, NMsg} of + {_, #{'end' := NFend}} -> S4#{'end' => NFend}; + {#{'end' := PFend}, _} -> S4#{'end' => PFend}; + _ -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_google.protobuf.GeneratedCodeInfo'/3}). +'merge_msg_google.protobuf.GeneratedCodeInfo'(PMsg, + NMsg, TrUserData) -> + S1 = #{}, + case {PMsg, NMsg} of + {#{annotation := PFannotation}, + #{annotation := NFannotation}} -> + S1#{annotation => + 'erlang_++'(PFannotation, NFannotation, TrUserData)}; + {_, #{annotation := NFannotation}} -> + S1#{annotation => NFannotation}; + {#{annotation := PFannotation}, _} -> + S1#{annotation => PFannotation}; + {_, _} -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.KeyValue'/3}). +'merge_msg_mvccpb.KeyValue'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S1#{key => NFkey}; + {#{key := PFkey}, _} -> S1#{key => PFkey}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{create_revision := NFcreate_revision}} -> + S2#{create_revision => NFcreate_revision}; + {#{create_revision := PFcreate_revision}, _} -> + S2#{create_revision => PFcreate_revision}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {_, #{mod_revision := NFmod_revision}} -> + S3#{mod_revision => NFmod_revision}; + {#{mod_revision := PFmod_revision}, _} -> + S3#{mod_revision => PFmod_revision}; + _ -> S3 + end, + S5 = case {PMsg, NMsg} of + {_, #{version := NFversion}} -> + S4#{version => NFversion}; + {#{version := PFversion}, _} -> + S4#{version => PFversion}; + _ -> S4 + end, + S6 = case {PMsg, NMsg} of + {_, #{value := NFvalue}} -> S5#{value => NFvalue}; + {#{value := PFvalue}, _} -> S5#{value => PFvalue}; + _ -> S5 + end, + case {PMsg, NMsg} of + {_, #{lease := NFlease}} -> S6#{lease => NFlease}; + {#{lease := PFlease}, _} -> S6#{lease => PFlease}; + _ -> S6 + end. + +-compile({nowarn_unused_function,'merge_msg_mvccpb.Event'/3}). +'merge_msg_mvccpb.Event'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{type := NFtype}} -> S1#{type => NFtype}; + {#{type := PFtype}, _} -> S1#{type => PFtype}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {#{kv := PFkv}, #{kv := NFkv}} -> + S2#{kv => + 'merge_msg_mvccpb.KeyValue'(PFkv, NFkv, TrUserData)}; + {_, #{kv := NFkv}} -> S2#{kv => NFkv}; + {#{kv := PFkv}, _} -> S2#{kv => PFkv}; + {_, _} -> S2 + end, + case {PMsg, NMsg} of + {#{prev_kv := PFprev_kv}, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => + 'merge_msg_mvccpb.KeyValue'(PFprev_kv, NFprev_kv, + TrUserData)}; + {_, #{prev_kv := NFprev_kv}} -> + S3#{prev_kv => NFprev_kv}; + {#{prev_kv := PFprev_kv}, _} -> + S3#{prev_kv => PFprev_kv}; + {_, _} -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.UserAddOptions'/3}). +'merge_msg_authpb.UserAddOptions'(PMsg, NMsg, _) -> + S1 = #{}, + case {PMsg, NMsg} of + {_, #{no_password := NFno_password}} -> + S1#{no_password => NFno_password}; + {#{no_password := PFno_password}, _} -> + S1#{no_password => PFno_password}; + _ -> S1 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.User'/3}). +'merge_msg_authpb.User'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{password := NFpassword}} -> + S2#{password => NFpassword}; + {#{password := PFpassword}, _} -> + S2#{password => PFpassword}; + _ -> S2 + end, + S4 = case {PMsg, NMsg} of + {#{roles := PFroles}, #{roles := NFroles}} -> + S3#{roles => 'erlang_++'(PFroles, NFroles, TrUserData)}; + {_, #{roles := NFroles}} -> S3#{roles => NFroles}; + {#{roles := PFroles}, _} -> S3#{roles => PFroles}; + {_, _} -> S3 + end, + case {PMsg, NMsg} of + {#{options := PFoptions}, #{options := NFoptions}} -> + S4#{options => + 'merge_msg_authpb.UserAddOptions'(PFoptions, NFoptions, + TrUserData)}; + {_, #{options := NFoptions}} -> + S4#{options => NFoptions}; + {#{options := PFoptions}, _} -> + S4#{options => PFoptions}; + {_, _} -> S4 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Permission'/3}). +'merge_msg_authpb.Permission'(PMsg, NMsg, _) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{permType := NFpermType}} -> + S1#{permType => NFpermType}; + {#{permType := PFpermType}, _} -> + S1#{permType => PFpermType}; + _ -> S1 + end, + S3 = case {PMsg, NMsg} of + {_, #{key := NFkey}} -> S2#{key => NFkey}; + {#{key := PFkey}, _} -> S2#{key => PFkey}; + _ -> S2 + end, + case {PMsg, NMsg} of + {_, #{range_end := NFrange_end}} -> + S3#{range_end => NFrange_end}; + {#{range_end := PFrange_end}, _} -> + S3#{range_end => PFrange_end}; + _ -> S3 + end. + +-compile({nowarn_unused_function,'merge_msg_authpb.Role'/3}). +'merge_msg_authpb.Role'(PMsg, NMsg, TrUserData) -> + S1 = #{}, + S2 = case {PMsg, NMsg} of + {_, #{name := NFname}} -> S1#{name => NFname}; + {#{name := PFname}, _} -> S1#{name => PFname}; + _ -> S1 + end, + case {PMsg, NMsg} of + {#{keyPermission := PFkeyPermission}, + #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => + 'erlang_++'(PFkeyPermission, NFkeyPermission, + TrUserData)}; + {_, #{keyPermission := NFkeyPermission}} -> + S2#{keyPermission => NFkeyPermission}; + {#{keyPermission := PFkeyPermission}, _} -> + S2#{keyPermission => PFkeyPermission}; + {_, _} -> S2 + end. + + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> + verify_msg(Msg, MsgName, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + 'Etcd.ResponseHeader' -> + 'v_msg_Etcd.ResponseHeader'(Msg, [MsgName], TrUserData); + 'Etcd.RangeRequest' -> + 'v_msg_Etcd.RangeRequest'(Msg, [MsgName], TrUserData); + 'Etcd.RangeResponse' -> + 'v_msg_Etcd.RangeResponse'(Msg, [MsgName], TrUserData); + 'Etcd.PutRequest' -> + 'v_msg_Etcd.PutRequest'(Msg, [MsgName], TrUserData); + 'Etcd.PutResponse' -> + 'v_msg_Etcd.PutResponse'(Msg, [MsgName], TrUserData); + 'Etcd.DeleteRangeRequest' -> + 'v_msg_Etcd.DeleteRangeRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.DeleteRangeResponse' -> + 'v_msg_Etcd.DeleteRangeResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.RequestOp' -> + 'v_msg_Etcd.RequestOp'(Msg, [MsgName], TrUserData); + 'Etcd.ResponseOp' -> + 'v_msg_Etcd.ResponseOp'(Msg, [MsgName], TrUserData); + 'Etcd.Compare' -> + 'v_msg_Etcd.Compare'(Msg, [MsgName], TrUserData); + 'Etcd.TxnRequest' -> + 'v_msg_Etcd.TxnRequest'(Msg, [MsgName], TrUserData); + 'Etcd.TxnResponse' -> + 'v_msg_Etcd.TxnResponse'(Msg, [MsgName], TrUserData); + 'Etcd.CompactionRequest' -> + 'v_msg_Etcd.CompactionRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.CompactionResponse' -> + 'v_msg_Etcd.CompactionResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.HashRequest' -> + 'v_msg_Etcd.HashRequest'(Msg, [MsgName], TrUserData); + 'Etcd.HashKVRequest' -> + 'v_msg_Etcd.HashKVRequest'(Msg, [MsgName], TrUserData); + 'Etcd.HashKVResponse' -> + 'v_msg_Etcd.HashKVResponse'(Msg, [MsgName], TrUserData); + 'Etcd.HashResponse' -> + 'v_msg_Etcd.HashResponse'(Msg, [MsgName], TrUserData); + 'Etcd.SnapshotRequest' -> + 'v_msg_Etcd.SnapshotRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.SnapshotResponse' -> + 'v_msg_Etcd.SnapshotResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchRequest' -> + 'v_msg_Etcd.WatchRequest'(Msg, [MsgName], TrUserData); + 'Etcd.WatchCreateRequest' -> + 'v_msg_Etcd.WatchCreateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchCancelRequest' -> + 'v_msg_Etcd.WatchCancelRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchProgressRequest' -> + 'v_msg_Etcd.WatchProgressRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.WatchResponse' -> + 'v_msg_Etcd.WatchResponse'(Msg, [MsgName], TrUserData); + 'Etcd.LeaseGrantRequest' -> + 'v_msg_Etcd.LeaseGrantRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseGrantResponse' -> + 'v_msg_Etcd.LeaseGrantResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseRevokeRequest' -> + 'v_msg_Etcd.LeaseRevokeRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseRevokeResponse' -> + 'v_msg_Etcd.LeaseRevokeResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpoint' -> + 'v_msg_Etcd.LeaseCheckpoint'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpointRequest' -> + 'v_msg_Etcd.LeaseCheckpointRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseCheckpointResponse' -> + 'v_msg_Etcd.LeaseCheckpointResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseKeepAliveRequest' -> + 'v_msg_Etcd.LeaseKeepAliveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseKeepAliveResponse' -> + 'v_msg_Etcd.LeaseKeepAliveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseTimeToLiveRequest' -> + 'v_msg_Etcd.LeaseTimeToLiveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseTimeToLiveResponse' -> + 'v_msg_Etcd.LeaseTimeToLiveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseLeasesRequest' -> + 'v_msg_Etcd.LeaseLeasesRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaseStatus' -> + 'v_msg_Etcd.LeaseStatus'(Msg, [MsgName], TrUserData); + 'Etcd.LeaseLeasesResponse' -> + 'v_msg_Etcd.LeaseLeasesResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.Member' -> + 'v_msg_Etcd.Member'(Msg, [MsgName], TrUserData); + 'Etcd.MemberAddRequest' -> + 'v_msg_Etcd.MemberAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberAddResponse' -> + 'v_msg_Etcd.MemberAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberRemoveRequest' -> + 'v_msg_Etcd.MemberRemoveRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberRemoveResponse' -> + 'v_msg_Etcd.MemberRemoveResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberUpdateRequest' -> + 'v_msg_Etcd.MemberUpdateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberUpdateResponse' -> + 'v_msg_Etcd.MemberUpdateResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberListRequest' -> + 'v_msg_Etcd.MemberListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberListResponse' -> + 'v_msg_Etcd.MemberListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberPromoteRequest' -> + 'v_msg_Etcd.MemberPromoteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MemberPromoteResponse' -> + 'v_msg_Etcd.MemberPromoteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.DefragmentRequest' -> + 'v_msg_Etcd.DefragmentRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.DefragmentResponse' -> + 'v_msg_Etcd.DefragmentResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.MoveLeaderRequest' -> + 'v_msg_Etcd.MoveLeaderRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.MoveLeaderResponse' -> + 'v_msg_Etcd.MoveLeaderResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AlarmRequest' -> + 'v_msg_Etcd.AlarmRequest'(Msg, [MsgName], TrUserData); + 'Etcd.AlarmMember' -> + 'v_msg_Etcd.AlarmMember'(Msg, [MsgName], TrUserData); + 'Etcd.AlarmResponse' -> + 'v_msg_Etcd.AlarmResponse'(Msg, [MsgName], TrUserData); + 'Etcd.StatusRequest' -> + 'v_msg_Etcd.StatusRequest'(Msg, [MsgName], TrUserData); + 'Etcd.StatusResponse' -> + 'v_msg_Etcd.StatusResponse'(Msg, [MsgName], TrUserData); + 'Etcd.AuthEnableRequest' -> + 'v_msg_Etcd.AuthEnableRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthDisableRequest' -> + 'v_msg_Etcd.AuthDisableRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthenticateRequest' -> + 'v_msg_Etcd.AuthenticateRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserAddRequest' -> + 'v_msg_Etcd.AuthUserAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserGetRequest' -> + 'v_msg_Etcd.AuthUserGetRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserDeleteRequest' -> + 'v_msg_Etcd.AuthUserDeleteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserChangePasswordRequest' -> + 'v_msg_Etcd.AuthUserChangePasswordRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthUserGrantRoleRequest' -> + 'v_msg_Etcd.AuthUserGrantRoleRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserRevokeRoleRequest' -> + 'v_msg_Etcd.AuthUserRevokeRoleRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleAddRequest' -> + 'v_msg_Etcd.AuthRoleAddRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGetRequest' -> + 'v_msg_Etcd.AuthRoleGetRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserListRequest' -> + 'v_msg_Etcd.AuthUserListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleListRequest' -> + 'v_msg_Etcd.AuthRoleListRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleDeleteRequest' -> + 'v_msg_Etcd.AuthRoleDeleteRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGrantPermissionRequest' -> + 'v_msg_Etcd.AuthRoleGrantPermissionRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthRoleRevokePermissionRequest' -> + 'v_msg_Etcd.AuthRoleRevokePermissionRequest'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthEnableResponse' -> + 'v_msg_Etcd.AuthEnableResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthDisableResponse' -> + 'v_msg_Etcd.AuthDisableResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthenticateResponse' -> + 'v_msg_Etcd.AuthenticateResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserAddResponse' -> + 'v_msg_Etcd.AuthUserAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserGetResponse' -> + 'v_msg_Etcd.AuthUserGetResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserDeleteResponse' -> + 'v_msg_Etcd.AuthUserDeleteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserChangePasswordResponse' -> + 'v_msg_Etcd.AuthUserChangePasswordResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthUserGrantRoleResponse' -> + 'v_msg_Etcd.AuthUserGrantRoleResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserRevokeRoleResponse' -> + 'v_msg_Etcd.AuthUserRevokeRoleResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleAddResponse' -> + 'v_msg_Etcd.AuthRoleAddResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGetResponse' -> + 'v_msg_Etcd.AuthRoleGetResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleListResponse' -> + 'v_msg_Etcd.AuthRoleListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthUserListResponse' -> + 'v_msg_Etcd.AuthUserListResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleDeleteResponse' -> + 'v_msg_Etcd.AuthRoleDeleteResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.AuthRoleGrantPermissionResponse' -> + 'v_msg_Etcd.AuthRoleGrantPermissionResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.AuthRoleRevokePermissionResponse' -> + 'v_msg_Etcd.AuthRoleRevokePermissionResponse'(Msg, + [MsgName], TrUserData); + 'Etcd.HealthCheckRequest' -> + 'v_msg_Etcd.HealthCheckRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.HealthCheckResponse' -> + 'v_msg_Etcd.HealthCheckResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LockRequest' -> + 'v_msg_Etcd.LockRequest'(Msg, [MsgName], TrUserData); + 'Etcd.LockResponse' -> + 'v_msg_Etcd.LockResponse'(Msg, [MsgName], TrUserData); + 'Etcd.UnlockRequest' -> + 'v_msg_Etcd.UnlockRequest'(Msg, [MsgName], TrUserData); + 'Etcd.UnlockResponse' -> + 'v_msg_Etcd.UnlockResponse'(Msg, [MsgName], TrUserData); + 'Etcd.CampaignRequest' -> + 'v_msg_Etcd.CampaignRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.CampaignResponse' -> + 'v_msg_Etcd.CampaignResponse'(Msg, [MsgName], + TrUserData); + 'Etcd.LeaderKey' -> + 'v_msg_Etcd.LeaderKey'(Msg, [MsgName], TrUserData); + 'Etcd.LeaderRequest' -> + 'v_msg_Etcd.LeaderRequest'(Msg, [MsgName], TrUserData); + 'Etcd.LeaderResponse' -> + 'v_msg_Etcd.LeaderResponse'(Msg, [MsgName], TrUserData); + 'Etcd.ResignRequest' -> + 'v_msg_Etcd.ResignRequest'(Msg, [MsgName], TrUserData); + 'Etcd.ResignResponse' -> + 'v_msg_Etcd.ResignResponse'(Msg, [MsgName], TrUserData); + 'Etcd.ProclaimRequest' -> + 'v_msg_Etcd.ProclaimRequest'(Msg, [MsgName], + TrUserData); + 'Etcd.ProclaimResponse' -> + 'v_msg_Etcd.ProclaimResponse'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FileDescriptorSet' -> + 'v_msg_google.protobuf.FileDescriptorSet'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileDescriptorProto' -> + 'v_msg_google.protobuf.FileDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.DescriptorProto.ExtensionRange' -> + 'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto.ReservedRange' -> + 'v_msg_google.protobuf.DescriptorProto.ReservedRange'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.DescriptorProto' -> + 'v_msg_google.protobuf.DescriptorProto'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldDescriptorProto' -> + 'v_msg_google.protobuf.FieldDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.OneofDescriptorProto' -> + 'v_msg_google.protobuf.OneofDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumDescriptorProto' -> + 'v_msg_google.protobuf.EnumDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.EnumValueDescriptorProto' -> + 'v_msg_google.protobuf.EnumValueDescriptorProto'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.ServiceDescriptorProto' -> + 'v_msg_google.protobuf.ServiceDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.MethodDescriptorProto' -> + 'v_msg_google.protobuf.MethodDescriptorProto'(Msg, + [MsgName], TrUserData); + 'google.protobuf.FileOptions' -> + 'v_msg_google.protobuf.FileOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MessageOptions' -> + 'v_msg_google.protobuf.MessageOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.FieldOptions' -> + 'v_msg_google.protobuf.FieldOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumOptions' -> + 'v_msg_google.protobuf.EnumOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.EnumValueOptions' -> + 'v_msg_google.protobuf.EnumValueOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.ServiceOptions' -> + 'v_msg_google.protobuf.ServiceOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.MethodOptions' -> + 'v_msg_google.protobuf.MethodOptions'(Msg, [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption.NamePart' -> + 'v_msg_google.protobuf.UninterpretedOption.NamePart'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.UninterpretedOption' -> + 'v_msg_google.protobuf.UninterpretedOption'(Msg, + [MsgName], TrUserData); + 'google.protobuf.SourceCodeInfo.Location' -> + 'v_msg_google.protobuf.SourceCodeInfo.Location'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.SourceCodeInfo' -> + 'v_msg_google.protobuf.SourceCodeInfo'(Msg, [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo.Annotation' -> + 'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Msg, + [MsgName], + TrUserData); + 'google.protobuf.GeneratedCodeInfo' -> + 'v_msg_google.protobuf.GeneratedCodeInfo'(Msg, + [MsgName], TrUserData); + 'mvccpb.KeyValue' -> + 'v_msg_mvccpb.KeyValue'(Msg, [MsgName], TrUserData); + 'mvccpb.Event' -> + 'v_msg_mvccpb.Event'(Msg, [MsgName], TrUserData); + 'authpb.UserAddOptions' -> + 'v_msg_authpb.UserAddOptions'(Msg, [MsgName], + TrUserData); + 'authpb.User' -> + 'v_msg_authpb.User'(Msg, [MsgName], TrUserData); + 'authpb.Permission' -> + 'v_msg_authpb.Permission'(Msg, [MsgName], TrUserData); + 'authpb.Role' -> + 'v_msg_authpb.Role'(Msg, [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,'v_msg_Etcd.ResponseHeader'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResponseHeader'/3}). +'v_msg_Etcd.ResponseHeader'(#{} = M, Path, + TrUserData) -> + case M of + #{cluster_id := F1} -> + v_type_uint64(F1, [cluster_id | Path], TrUserData); + _ -> ok + end, + case M of + #{member_id := F2} -> + v_type_uint64(F2, [member_id | Path], TrUserData); + _ -> ok + end, + case M of + #{revision := F3} -> + v_type_int64(F3, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{raft_term := F4} -> + v_type_uint64(F4, [raft_term | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (cluster_id) -> ok; + (member_id) -> ok; + (revision) -> ok; + (raft_term) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResponseHeader'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResponseHeader'}, + M, Path); +'v_msg_Etcd.ResponseHeader'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResponseHeader'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RangeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RangeRequest'/3}). +'v_msg_Etcd.RangeRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{limit := F3} -> + v_type_int64(F3, [limit | Path], TrUserData); + _ -> ok + end, + case M of + #{revision := F4} -> + v_type_int64(F4, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{sort_order := F5} -> + 'v_enum_Etcd.RangeRequest.SortOrder'(F5, + [sort_order | Path], TrUserData); + _ -> ok + end, + case M of + #{sort_target := F6} -> + 'v_enum_Etcd.RangeRequest.SortTarget'(F6, + [sort_target | Path], + TrUserData); + _ -> ok + end, + case M of + #{serializable := F7} -> + v_type_bool(F7, [serializable | Path], TrUserData); + _ -> ok + end, + case M of + #{keys_only := F8} -> + v_type_bool(F8, [keys_only | Path], TrUserData); + _ -> ok + end, + case M of + #{count_only := F9} -> + v_type_bool(F9, [count_only | Path], TrUserData); + _ -> ok + end, + case M of + #{min_mod_revision := F10} -> + v_type_int64(F10, [min_mod_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{max_mod_revision := F11} -> + v_type_int64(F11, [max_mod_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{min_create_revision := F12} -> + v_type_int64(F12, [min_create_revision | Path], + TrUserData); + _ -> ok + end, + case M of + #{max_create_revision := F13} -> + v_type_int64(F13, [max_create_revision | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (limit) -> ok; + (revision) -> ok; + (sort_order) -> ok; + (sort_target) -> ok; + (serializable) -> ok; + (keys_only) -> ok; + (count_only) -> ok; + (min_mod_revision) -> ok; + (max_mod_revision) -> ok; + (min_create_revision) -> ok; + (max_create_revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RangeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RangeRequest'}, + M, Path); +'v_msg_Etcd.RangeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RangeRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RangeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RangeResponse'/3}). +'v_msg_Etcd.RangeResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{kvs := F2} -> + if is_list(F2) -> + _ = ['v_msg_mvccpb.KeyValue'(Elem, [kvs | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'mvccpb.KeyValue'}}, + F2, [kvs | Path]) + end; + _ -> ok + end, + case M of + #{more := F3} -> + v_type_bool(F3, [more | Path], TrUserData); + _ -> ok + end, + case M of + #{count := F4} -> + v_type_int64(F4, [count | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (kvs) -> ok; + (more) -> ok; + (count) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RangeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RangeResponse'}, + M, Path); +'v_msg_Etcd.RangeResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RangeResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.PutRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.PutRequest'/3}). +'v_msg_Etcd.PutRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + v_type_bytes(F2, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F3} -> + v_type_int64(F3, [lease | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F4} -> + v_type_bool(F4, [prev_kv | Path], TrUserData); + _ -> ok + end, + case M of + #{ignore_value := F5} -> + v_type_bool(F5, [ignore_value | Path], TrUserData); + _ -> ok + end, + case M of + #{ignore_lease := F6} -> + v_type_bool(F6, [ignore_lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (value) -> ok; + (lease) -> ok; + (prev_kv) -> ok; + (ignore_value) -> ok; + (ignore_lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.PutRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.PutRequest'}, + M, Path); +'v_msg_Etcd.PutRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.PutRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.PutResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.PutResponse'/3}). +'v_msg_Etcd.PutResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.PutResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.PutResponse'}, + M, Path); +'v_msg_Etcd.PutResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.PutResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DeleteRangeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DeleteRangeRequest'/3}). +'v_msg_Etcd.DeleteRangeRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + v_type_bool(F3, [prev_kv | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DeleteRangeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DeleteRangeRequest'}, + M, Path); +'v_msg_Etcd.DeleteRangeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DeleteRangeRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DeleteRangeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DeleteRangeResponse'/3}). +'v_msg_Etcd.DeleteRangeResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{deleted := F2} -> + v_type_int64(F2, [deleted | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kvs := F3} -> + if is_list(F3) -> + _ = ['v_msg_mvccpb.KeyValue'(Elem, [prev_kvs | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'mvccpb.KeyValue'}}, + F3, [prev_kvs | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (deleted) -> ok; + (prev_kvs) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DeleteRangeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DeleteRangeResponse'}, + M, Path); +'v_msg_Etcd.DeleteRangeResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.DeleteRangeResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.RequestOp'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.RequestOp'/3}). +'v_msg_Etcd.RequestOp'(#{} = M, Path, TrUserData) -> + case M of + #{request := {request_range, OF1}} -> + 'v_msg_Etcd.RangeRequest'(OF1, + [request_range, request | Path], + TrUserData); + #{request := {request_put, OF1}} -> + 'v_msg_Etcd.PutRequest'(OF1, + [request_put, request | Path], TrUserData); + #{request := {request_delete_range, OF1}} -> + 'v_msg_Etcd.DeleteRangeRequest'(OF1, + [request_delete_range, request + | Path], + TrUserData); + #{request := {request_txn, OF1}} -> + 'v_msg_Etcd.TxnRequest'(OF1, + [request_txn, request | Path], TrUserData); + #{request := F1} -> + mk_type_error(invalid_oneof, F1, [request | Path]); + _ -> ok + end, + lists:foreach(fun (request) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.RequestOp'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.RequestOp'}, + M, Path); +'v_msg_Etcd.RequestOp'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.RequestOp'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResponseOp'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResponseOp'/3}). +'v_msg_Etcd.ResponseOp'(#{} = M, Path, TrUserData) -> + case M of + #{response := {response_range, OF1}} -> + 'v_msg_Etcd.RangeResponse'(OF1, + [response_range, response | Path], + TrUserData); + #{response := {response_put, OF1}} -> + 'v_msg_Etcd.PutResponse'(OF1, + [response_put, response | Path], TrUserData); + #{response := {response_delete_range, OF1}} -> + 'v_msg_Etcd.DeleteRangeResponse'(OF1, + [response_delete_range, response + | Path], + TrUserData); + #{response := {response_txn, OF1}} -> + 'v_msg_Etcd.TxnResponse'(OF1, + [response_txn, response | Path], TrUserData); + #{response := F1} -> + mk_type_error(invalid_oneof, F1, [response | Path]); + _ -> ok + end, + lists:foreach(fun (response) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResponseOp'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResponseOp'}, + M, Path); +'v_msg_Etcd.ResponseOp'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResponseOp'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.Compare'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.Compare'/3}). +'v_msg_Etcd.Compare'(#{} = M, Path, TrUserData) -> + case M of + #{result := F1} -> + 'v_enum_Etcd.Compare.CompareResult'(F1, [result | Path], + TrUserData); + _ -> ok + end, + case M of + #{target := F2} -> + 'v_enum_Etcd.Compare.CompareTarget'(F2, [target | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F3} -> + v_type_bytes(F3, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{target_union := {version, OF4}} -> + v_type_int64(OF4, [version, target_union | Path], + TrUserData); + #{target_union := {create_revision, OF4}} -> + v_type_int64(OF4, + [create_revision, target_union | Path], TrUserData); + #{target_union := {mod_revision, OF4}} -> + v_type_int64(OF4, [mod_revision, target_union | Path], + TrUserData); + #{target_union := {value, OF4}} -> + v_type_bytes(OF4, [value, target_union | Path], + TrUserData); + #{target_union := {lease, OF4}} -> + v_type_int64(OF4, [lease, target_union | Path], + TrUserData); + #{target_union := F4} -> + mk_type_error(invalid_oneof, F4, [target_union | Path]); + _ -> ok + end, + case M of + #{range_end := F5} -> + v_type_bytes(F5, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (result) -> ok; + (target) -> ok; + (key) -> ok; + (target_union) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.Compare'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.Compare'}, + M, Path); +'v_msg_Etcd.Compare'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.Compare'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.TxnRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.TxnRequest'/3}). +'v_msg_Etcd.TxnRequest'(#{} = M, Path, TrUserData) -> + case M of + #{compare := F1} -> + if is_list(F1) -> + _ = ['v_msg_Etcd.Compare'(Elem, [compare | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Compare'}}, + F1, [compare | Path]) + end; + _ -> ok + end, + case M of + #{success := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.RequestOp'(Elem, [success | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.RequestOp'}}, + F2, [success | Path]) + end; + _ -> ok + end, + case M of + #{failure := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.RequestOp'(Elem, [failure | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.RequestOp'}}, + F3, [failure | Path]) + end; + _ -> ok + end, + lists:foreach(fun (compare) -> ok; + (success) -> ok; + (failure) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.TxnRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.TxnRequest'}, + M, Path); +'v_msg_Etcd.TxnRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.TxnRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.TxnResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.TxnResponse'/3}). +'v_msg_Etcd.TxnResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{succeeded := F2} -> + v_type_bool(F2, [succeeded | Path], TrUserData); + _ -> ok + end, + case M of + #{responses := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.ResponseOp'(Elem, [responses | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.ResponseOp'}}, + F3, [responses | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (succeeded) -> ok; + (responses) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.TxnResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.TxnResponse'}, + M, Path); +'v_msg_Etcd.TxnResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.TxnResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CompactionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CompactionRequest'/3}). +'v_msg_Etcd.CompactionRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{revision := F1} -> + v_type_int64(F1, [revision | Path], TrUserData); + _ -> ok + end, + case M of + #{physical := F2} -> + v_type_bool(F2, [physical | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (revision) -> ok; + (physical) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CompactionRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CompactionRequest'}, + M, Path); +'v_msg_Etcd.CompactionRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CompactionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CompactionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CompactionResponse'/3}). +'v_msg_Etcd.CompactionResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CompactionResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CompactionResponse'}, + M, Path); +'v_msg_Etcd.CompactionResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CompactionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashRequest'/3}). +'v_msg_Etcd.HashRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashRequest'}, + M, Path); +'v_msg_Etcd.HashRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashKVRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashKVRequest'/3}). +'v_msg_Etcd.HashKVRequest'(#{} = M, Path, TrUserData) -> + case M of + #{revision := F1} -> + v_type_int64(F1, [revision | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashKVRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashKVRequest'}, + M, Path); +'v_msg_Etcd.HashKVRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashKVRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashKVResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashKVResponse'/3}). +'v_msg_Etcd.HashKVResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{hash := F2} -> + v_type_uint32(F2, [hash | Path], TrUserData); + _ -> ok + end, + case M of + #{compact_revision := F3} -> + v_type_int64(F3, [compact_revision | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (hash) -> ok; + (compact_revision) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashKVResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashKVResponse'}, + M, Path); +'v_msg_Etcd.HashKVResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashKVResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HashResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HashResponse'/3}). +'v_msg_Etcd.HashResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{hash := F2} -> + v_type_uint32(F2, [hash | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (hash) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HashResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HashResponse'}, + M, Path); +'v_msg_Etcd.HashResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HashResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.SnapshotRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.SnapshotRequest'/3}). +'v_msg_Etcd.SnapshotRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.SnapshotRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.SnapshotRequest'}, + M, Path); +'v_msg_Etcd.SnapshotRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.SnapshotRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.SnapshotResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.SnapshotResponse'/3}). +'v_msg_Etcd.SnapshotResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{remaining_bytes := F2} -> + v_type_uint64(F2, [remaining_bytes | Path], TrUserData); + _ -> ok + end, + case M of + #{blob := F3} -> + v_type_bytes(F3, [blob | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (remaining_bytes) -> ok; + (blob) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.SnapshotResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.SnapshotResponse'}, + M, Path); +'v_msg_Etcd.SnapshotResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.SnapshotResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchRequest'/3}). +'v_msg_Etcd.WatchRequest'(#{} = M, Path, TrUserData) -> + case M of + #{request_union := {create_request, OF1}} -> + 'v_msg_Etcd.WatchCreateRequest'(OF1, + [create_request, request_union + | Path], + TrUserData); + #{request_union := {cancel_request, OF1}} -> + 'v_msg_Etcd.WatchCancelRequest'(OF1, + [cancel_request, request_union + | Path], + TrUserData); + #{request_union := {progress_request, OF1}} -> + 'v_msg_Etcd.WatchProgressRequest'(OF1, + [progress_request, request_union + | Path], + TrUserData); + #{request_union := F1} -> + mk_type_error(invalid_oneof, F1, + [request_union | Path]); + _ -> ok + end, + lists:foreach(fun (request_union) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchRequest'}, + M, Path); +'v_msg_Etcd.WatchRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchCreateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchCreateRequest'/3}). +'v_msg_Etcd.WatchCreateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F2} -> + v_type_bytes(F2, [range_end | Path], TrUserData); + _ -> ok + end, + case M of + #{start_revision := F3} -> + v_type_int64(F3, [start_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{progress_notify := F4} -> + v_type_bool(F4, [progress_notify | Path], TrUserData); + _ -> ok + end, + case M of + #{filters := F5} -> + if is_list(F5) -> + _ = ['v_enum_Etcd.WatchCreateRequest.FilterType'(Elem, + [filters + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {enum, 'Etcd.WatchCreateRequest.FilterType'}}, + F5, [filters | Path]) + end; + _ -> ok + end, + case M of + #{prev_kv := F6} -> + v_type_bool(F6, [prev_kv | Path], TrUserData); + _ -> ok + end, + case M of + #{watch_id := F7} -> + v_type_int64(F7, [watch_id | Path], TrUserData); + _ -> ok + end, + case M of + #{fragment := F8} -> + v_type_bool(F8, [fragment | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (range_end) -> ok; + (start_revision) -> ok; + (progress_notify) -> ok; + (filters) -> ok; + (prev_kv) -> ok; + (watch_id) -> ok; + (fragment) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchCreateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchCreateRequest'}, + M, Path); +'v_msg_Etcd.WatchCreateRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchCreateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchCancelRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchCancelRequest'/3}). +'v_msg_Etcd.WatchCancelRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{watch_id := F1} -> + v_type_int64(F1, [watch_id | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (watch_id) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchCancelRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchCancelRequest'}, + M, Path); +'v_msg_Etcd.WatchCancelRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchCancelRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchProgressRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchProgressRequest'/3}). +'v_msg_Etcd.WatchProgressRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchProgressRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchProgressRequest'}, + M, Path); +'v_msg_Etcd.WatchProgressRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.WatchProgressRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.WatchResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.WatchResponse'/3}). +'v_msg_Etcd.WatchResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{watch_id := F2} -> + v_type_int64(F2, [watch_id | Path], TrUserData); + _ -> ok + end, + case M of + #{created := F3} -> + v_type_bool(F3, [created | Path], TrUserData); + _ -> ok + end, + case M of + #{canceled := F4} -> + v_type_bool(F4, [canceled | Path], TrUserData); + _ -> ok + end, + case M of + #{compact_revision := F5} -> + v_type_int64(F5, [compact_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{cancel_reason := F6} -> + v_type_string(F6, [cancel_reason | Path], TrUserData); + _ -> ok + end, + case M of + #{fragment := F7} -> + v_type_bool(F7, [fragment | Path], TrUserData); + _ -> ok + end, + case M of + #{events := F8} -> + if is_list(F8) -> + _ = ['v_msg_mvccpb.Event'(Elem, [events | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'mvccpb.Event'}}, + F8, [events | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (watch_id) -> ok; + (created) -> ok; + (canceled) -> ok; + (compact_revision) -> ok; + (cancel_reason) -> ok; + (fragment) -> ok; + (events) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.WatchResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.WatchResponse'}, + M, Path); +'v_msg_Etcd.WatchResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.WatchResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseGrantRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseGrantRequest'/3}). +'v_msg_Etcd.LeaseGrantRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'TTL' := F1} -> + v_type_int64(F1, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('TTL') -> ok; + ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseGrantRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseGrantRequest'}, + M, Path); +'v_msg_Etcd.LeaseGrantRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseGrantRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseGrantResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseGrantResponse'/3}). +'v_msg_Etcd.LeaseGrantResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{error := F4} -> + v_type_string(F4, [error | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (error) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseGrantResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseGrantResponse'}, + M, Path); +'v_msg_Etcd.LeaseGrantResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseGrantResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseRevokeRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseRevokeRequest'/3}). +'v_msg_Etcd.LeaseRevokeRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseRevokeRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseRevokeRequest'}, + M, Path); +'v_msg_Etcd.LeaseRevokeRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseRevokeRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseRevokeResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseRevokeResponse'/3}). +'v_msg_Etcd.LeaseRevokeResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseRevokeResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseRevokeResponse'}, + M, Path); +'v_msg_Etcd.LeaseRevokeResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseRevokeResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpoint'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpoint'/3}). +'v_msg_Etcd.LeaseCheckpoint'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{remaining_TTL := F2} -> + v_type_int64(F2, [remaining_TTL | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (remaining_TTL) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpoint'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpoint'}, + M, Path); +'v_msg_Etcd.LeaseCheckpoint'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseCheckpoint'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpointRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpointRequest'/3}). +'v_msg_Etcd.LeaseCheckpointRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{checkpoints := F1} -> + if is_list(F1) -> + _ = ['v_msg_Etcd.LeaseCheckpoint'(Elem, + [checkpoints | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.LeaseCheckpoint'}}, + F1, [checkpoints | Path]) + end; + _ -> ok + end, + lists:foreach(fun (checkpoints) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpointRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpointRequest'}, + M, Path); +'v_msg_Etcd.LeaseCheckpointRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseCheckpointRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseCheckpointResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseCheckpointResponse'/3}). +'v_msg_Etcd.LeaseCheckpointResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseCheckpointResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseCheckpointResponse'}, + M, Path); +'v_msg_Etcd.LeaseCheckpointResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseCheckpointResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseKeepAliveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseKeepAliveRequest'/3}). +'v_msg_Etcd.LeaseKeepAliveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseKeepAliveRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseKeepAliveRequest'}, + M, Path); +'v_msg_Etcd.LeaseKeepAliveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseKeepAliveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseKeepAliveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseKeepAliveResponse'/3}). +'v_msg_Etcd.LeaseKeepAliveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseKeepAliveResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseKeepAliveResponse'}, + M, Path); +'v_msg_Etcd.LeaseKeepAliveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseKeepAliveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseTimeToLiveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseTimeToLiveRequest'/3}). +'v_msg_Etcd.LeaseTimeToLiveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{keys := F2} -> + v_type_bool(F2, [keys | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (keys) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseTimeToLiveRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseTimeToLiveRequest'}, + M, Path); +'v_msg_Etcd.LeaseTimeToLiveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseTimeToLiveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseTimeToLiveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseTimeToLiveResponse'/3}). +'v_msg_Etcd.LeaseTimeToLiveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{'ID' := F2} -> + v_type_int64(F2, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{'TTL' := F3} -> + v_type_int64(F3, ['TTL' | Path], TrUserData); + _ -> ok + end, + case M of + #{grantedTTL := F4} -> + v_type_int64(F4, [grantedTTL | Path], TrUserData); + _ -> ok + end, + case M of + #{keys := F5} -> + if is_list(F5) -> + _ = [v_type_bytes(Elem, [keys | Path], TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, bytes}, F5, + [keys | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + ('ID') -> ok; + ('TTL') -> ok; + (grantedTTL) -> ok; + (keys) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseTimeToLiveResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseTimeToLiveResponse'}, + M, Path); +'v_msg_Etcd.LeaseTimeToLiveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseTimeToLiveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseLeasesRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseLeasesRequest'/3}). +'v_msg_Etcd.LeaseLeasesRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseLeasesRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseLeasesRequest'}, + M, Path); +'v_msg_Etcd.LeaseLeasesRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseLeasesRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseStatus'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseStatus'/3}). +'v_msg_Etcd.LeaseStatus'(#{} = M, Path, TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_int64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseStatus'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseStatus'}, + M, Path); +'v_msg_Etcd.LeaseStatus'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaseStatus'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaseLeasesResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaseLeasesResponse'/3}). +'v_msg_Etcd.LeaseLeasesResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{leases := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.LeaseStatus'(Elem, [leases | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.LeaseStatus'}}, + F2, [leases | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (leases) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaseLeasesResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaseLeasesResponse'}, + M, Path); +'v_msg_Etcd.LeaseLeasesResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.LeaseLeasesResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.Member'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.Member'/3}). +'v_msg_Etcd.Member'(#{} = M, Path, TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{name := F2} -> + v_type_string(F2, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{peerURLs := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [peerURLs | Path]) + end; + _ -> ok + end, + case M of + #{clientURLs := F4} -> + if is_list(F4) -> + _ = [v_type_string(Elem, [clientURLs | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, string}, F4, + [clientURLs | Path]) + end; + _ -> ok + end, + case M of + #{isLearner := F5} -> + v_type_bool(F5, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (name) -> ok; + (peerURLs) -> ok; + (clientURLs) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.Member'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.Member'}, + M, Path); +'v_msg_Etcd.Member'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.Member'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberAddRequest'/3}). +'v_msg_Etcd.MemberAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{peerURLs := F1} -> + if is_list(F1) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, string}, F1, + [peerURLs | Path]) + end; + _ -> ok + end, + case M of + #{isLearner := F2} -> + v_type_bool(F2, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (peerURLs) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberAddRequest'}, + M, Path); +'v_msg_Etcd.MemberAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberAddResponse'/3}). +'v_msg_Etcd.MemberAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{member := F2} -> + 'v_msg_Etcd.Member'(F2, [member | Path], TrUserData); + _ -> ok + end, + case M of + #{members := F3} -> + if is_list(F3) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F3, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (member) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberAddResponse'}, + M, Path); +'v_msg_Etcd.MemberAddResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberRemoveRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberRemoveRequest'/3}). +'v_msg_Etcd.MemberRemoveRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberRemoveRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberRemoveRequest'}, + M, Path); +'v_msg_Etcd.MemberRemoveRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberRemoveRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberRemoveResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberRemoveResponse'/3}). +'v_msg_Etcd.MemberRemoveResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberRemoveResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberRemoveResponse'}, + M, Path); +'v_msg_Etcd.MemberRemoveResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberRemoveResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberUpdateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberUpdateRequest'/3}). +'v_msg_Etcd.MemberUpdateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + case M of + #{peerURLs := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [peerURLs | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [peerURLs | Path]) + end; + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (peerURLs) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberUpdateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberUpdateRequest'}, + M, Path); +'v_msg_Etcd.MemberUpdateRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberUpdateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberUpdateResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberUpdateResponse'/3}). +'v_msg_Etcd.MemberUpdateResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberUpdateResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberUpdateResponse'}, + M, Path); +'v_msg_Etcd.MemberUpdateResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberUpdateResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberListRequest'/3}). +'v_msg_Etcd.MemberListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberListRequest'}, + M, Path); +'v_msg_Etcd.MemberListRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberListResponse'/3}). +'v_msg_Etcd.MemberListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberListResponse'}, + M, Path); +'v_msg_Etcd.MemberListResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MemberListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberPromoteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberPromoteRequest'/3}). +'v_msg_Etcd.MemberPromoteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{'ID' := F1} -> + v_type_uint64(F1, ['ID' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun ('ID') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberPromoteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberPromoteRequest'}, + M, Path); +'v_msg_Etcd.MemberPromoteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberPromoteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MemberPromoteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MemberPromoteResponse'/3}). +'v_msg_Etcd.MemberPromoteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{members := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.Member'(Elem, [members | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, {msg, 'Etcd.Member'}}, + F2, [members | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (members) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MemberPromoteResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MemberPromoteResponse'}, + M, Path); +'v_msg_Etcd.MemberPromoteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.MemberPromoteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DefragmentRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DefragmentRequest'/3}). +'v_msg_Etcd.DefragmentRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DefragmentRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DefragmentRequest'}, + M, Path); +'v_msg_Etcd.DefragmentRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DefragmentRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.DefragmentResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.DefragmentResponse'/3}). +'v_msg_Etcd.DefragmentResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.DefragmentResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.DefragmentResponse'}, + M, Path); +'v_msg_Etcd.DefragmentResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.DefragmentResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MoveLeaderRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MoveLeaderRequest'/3}). +'v_msg_Etcd.MoveLeaderRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{targetID := F1} -> + v_type_uint64(F1, [targetID | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (targetID) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MoveLeaderRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MoveLeaderRequest'}, + M, Path); +'v_msg_Etcd.MoveLeaderRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MoveLeaderRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.MoveLeaderResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.MoveLeaderResponse'/3}). +'v_msg_Etcd.MoveLeaderResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.MoveLeaderResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.MoveLeaderResponse'}, + M, Path); +'v_msg_Etcd.MoveLeaderResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.MoveLeaderResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmRequest'/3}). +'v_msg_Etcd.AlarmRequest'(#{} = M, Path, TrUserData) -> + case M of + #{action := F1} -> + 'v_enum_Etcd.AlarmRequest.AlarmAction'(F1, + [action | Path], TrUserData); + _ -> ok + end, + case M of + #{memberID := F2} -> + v_type_uint64(F2, [memberID | Path], TrUserData); + _ -> ok + end, + case M of + #{alarm := F3} -> + 'v_enum_Etcd.AlarmType'(F3, [alarm | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (action) -> ok; + (memberID) -> ok; + (alarm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmRequest'}, + M, Path); +'v_msg_Etcd.AlarmRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmMember'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmMember'/3}). +'v_msg_Etcd.AlarmMember'(#{} = M, Path, TrUserData) -> + case M of + #{memberID := F1} -> + v_type_uint64(F1, [memberID | Path], TrUserData); + _ -> ok + end, + case M of + #{alarm := F2} -> + 'v_enum_Etcd.AlarmType'(F2, [alarm | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (memberID) -> ok; + (alarm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmMember'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmMember'}, + M, Path); +'v_msg_Etcd.AlarmMember'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmMember'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AlarmResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AlarmResponse'/3}). +'v_msg_Etcd.AlarmResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{alarms := F2} -> + if is_list(F2) -> + _ = ['v_msg_Etcd.AlarmMember'(Elem, [alarms | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'Etcd.AlarmMember'}}, + F2, [alarms | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (alarms) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AlarmResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AlarmResponse'}, + M, Path); +'v_msg_Etcd.AlarmResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AlarmResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.StatusRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.StatusRequest'/3}). +'v_msg_Etcd.StatusRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.StatusRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.StatusRequest'}, + M, Path); +'v_msg_Etcd.StatusRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.StatusRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.StatusResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.StatusResponse'/3}). +'v_msg_Etcd.StatusResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{version := F2} -> + v_type_string(F2, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{dbSize := F3} -> + v_type_int64(F3, [dbSize | Path], TrUserData); + _ -> ok + end, + case M of + #{leader := F4} -> + v_type_uint64(F4, [leader | Path], TrUserData); + _ -> ok + end, + case M of + #{raftIndex := F5} -> + v_type_uint64(F5, [raftIndex | Path], TrUserData); + _ -> ok + end, + case M of + #{raftTerm := F6} -> + v_type_uint64(F6, [raftTerm | Path], TrUserData); + _ -> ok + end, + case M of + #{raftAppliedIndex := F7} -> + v_type_uint64(F7, [raftAppliedIndex | Path], + TrUserData); + _ -> ok + end, + case M of + #{errors := F8} -> + if is_list(F8) -> + _ = [v_type_string(Elem, [errors | Path], TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, string}, F8, + [errors | Path]) + end; + _ -> ok + end, + case M of + #{dbSizeInUse := F9} -> + v_type_int64(F9, [dbSizeInUse | Path], TrUserData); + _ -> ok + end, + case M of + #{isLearner := F10} -> + v_type_bool(F10, [isLearner | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (version) -> ok; + (dbSize) -> ok; + (leader) -> ok; + (raftIndex) -> ok; + (raftTerm) -> ok; + (raftAppliedIndex) -> ok; + (errors) -> ok; + (dbSizeInUse) -> ok; + (isLearner) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.StatusResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.StatusResponse'}, + M, Path); +'v_msg_Etcd.StatusResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.StatusResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthEnableRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthEnableRequest'/3}). +'v_msg_Etcd.AuthEnableRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthEnableRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthEnableRequest'}, + M, Path); +'v_msg_Etcd.AuthEnableRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthEnableRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthDisableRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthDisableRequest'/3}). +'v_msg_Etcd.AuthDisableRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthDisableRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthDisableRequest'}, + M, Path); +'v_msg_Etcd.AuthDisableRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthDisableRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthenticateRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthenticateRequest'/3}). +'v_msg_Etcd.AuthenticateRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthenticateRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthenticateRequest'}, + M, Path); +'v_msg_Etcd.AuthenticateRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthenticateRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserAddRequest'/3}). +'v_msg_Etcd.AuthUserAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_authpb.UserAddOptions'(F3, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserAddRequest'}, + M, Path); +'v_msg_Etcd.AuthUserAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthUserAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGetRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGetRequest'/3}). +'v_msg_Etcd.AuthUserGetRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGetRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGetRequest'}, + M, Path); +'v_msg_Etcd.AuthUserGetRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthUserGetRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserDeleteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserDeleteRequest'/3}). +'v_msg_Etcd.AuthUserDeleteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserDeleteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserDeleteRequest'}, + M, Path); +'v_msg_Etcd.AuthUserDeleteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserDeleteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserChangePasswordRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserChangePasswordRequest'/3}). +'v_msg_Etcd.AuthUserChangePasswordRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_string(F2, [password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserChangePasswordRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserChangePasswordRequest'}, + M, Path); +'v_msg_Etcd.AuthUserChangePasswordRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserChangePasswordRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGrantRoleRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGrantRoleRequest'/3}). +'v_msg_Etcd.AuthUserGrantRoleRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{user := F1} -> + v_type_string(F1, [user | Path], TrUserData); + _ -> ok + end, + case M of + #{role := F2} -> + v_type_string(F2, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (user) -> ok; + (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGrantRoleRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGrantRoleRequest'}, + M, Path); +'v_msg_Etcd.AuthUserGrantRoleRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGrantRoleRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserRevokeRoleRequest'/3}). +'v_msg_Etcd.AuthUserRevokeRoleRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{role := F2} -> + v_type_string(F2, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserRevokeRoleRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserRevokeRoleRequest'}, + M, Path); +'v_msg_Etcd.AuthUserRevokeRoleRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserRevokeRoleRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleAddRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleAddRequest'/3}). +'v_msg_Etcd.AuthRoleAddRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleAddRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleAddRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleAddRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthRoleAddRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGetRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGetRequest'/3}). +'v_msg_Etcd.AuthRoleGetRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGetRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGetRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleGetRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthRoleGetRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserListRequest'/3}). +'v_msg_Etcd.AuthUserListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserListRequest'}, + M, Path); +'v_msg_Etcd.AuthUserListRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleListRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleListRequest'/3}). +'v_msg_Etcd.AuthRoleListRequest'(#{} = M, Path, _) -> + lists:foreach(fun (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleListRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleListRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleListRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleListRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleDeleteRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleDeleteRequest'/3}). +'v_msg_Etcd.AuthRoleDeleteRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleDeleteRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleDeleteRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleDeleteRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleDeleteRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGrantPermissionRequest'/3}). +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{perm := F2} -> + 'v_msg_authpb.Permission'(F2, [perm | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (perm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGrantPermissionRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleGrantPermissionRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGrantPermissionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleRevokePermissionRequest'/3}). +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(#{} = M, + Path, TrUserData) -> + case M of + #{role := F1} -> + v_type_string(F1, [role | Path], TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (role) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleRevokePermissionRequest'}, + M, Path); +'v_msg_Etcd.AuthRoleRevokePermissionRequest'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleRevokePermissionRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthEnableResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthEnableResponse'/3}). +'v_msg_Etcd.AuthEnableResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthEnableResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthEnableResponse'}, + M, Path); +'v_msg_Etcd.AuthEnableResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.AuthEnableResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthDisableResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthDisableResponse'/3}). +'v_msg_Etcd.AuthDisableResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthDisableResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthDisableResponse'}, + M, Path); +'v_msg_Etcd.AuthDisableResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthDisableResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthenticateResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthenticateResponse'/3}). +'v_msg_Etcd.AuthenticateResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{token := F2} -> + v_type_string(F2, [token | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (token) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthenticateResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthenticateResponse'}, + M, Path); +'v_msg_Etcd.AuthenticateResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthenticateResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserAddResponse'/3}). +'v_msg_Etcd.AuthUserAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserAddResponse'}, + M, Path); +'v_msg_Etcd.AuthUserAddResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGetResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGetResponse'/3}). +'v_msg_Etcd.AuthUserGetResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{roles := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [roles | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (roles) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGetResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGetResponse'}, + M, Path); +'v_msg_Etcd.AuthUserGetResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGetResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserDeleteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserDeleteResponse'/3}). +'v_msg_Etcd.AuthUserDeleteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserDeleteResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserDeleteResponse'}, + M, Path); +'v_msg_Etcd.AuthUserDeleteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserDeleteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserChangePasswordResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserChangePasswordResponse'/3}). +'v_msg_Etcd.AuthUserChangePasswordResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserChangePasswordResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserChangePasswordResponse'}, + M, Path); +'v_msg_Etcd.AuthUserChangePasswordResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserChangePasswordResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserGrantRoleResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserGrantRoleResponse'/3}). +'v_msg_Etcd.AuthUserGrantRoleResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserGrantRoleResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserGrantRoleResponse'}, + M, Path); +'v_msg_Etcd.AuthUserGrantRoleResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserGrantRoleResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserRevokeRoleResponse'/3}). +'v_msg_Etcd.AuthUserRevokeRoleResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserRevokeRoleResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserRevokeRoleResponse'}, + M, Path); +'v_msg_Etcd.AuthUserRevokeRoleResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserRevokeRoleResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleAddResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleAddResponse'/3}). +'v_msg_Etcd.AuthRoleAddResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleAddResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleAddResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleAddResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleAddResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGetResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGetResponse'/3}). +'v_msg_Etcd.AuthRoleGetResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{perm := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, [perm | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [perm | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (perm) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGetResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGetResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleGetResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGetResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleListResponse'/3}). +'v_msg_Etcd.AuthRoleListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{roles := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [roles | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (roles) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleListResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleListResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthUserListResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthUserListResponse'/3}). +'v_msg_Etcd.AuthUserListResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{users := F2} -> + if is_list(F2) -> + _ = [v_type_string(Elem, [users | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, string}, F2, + [users | Path]) + end; + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (users) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthUserListResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthUserListResponse'}, + M, Path); +'v_msg_Etcd.AuthUserListResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthUserListResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleDeleteResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleDeleteResponse'/3}). +'v_msg_Etcd.AuthRoleDeleteResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleDeleteResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleDeleteResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleDeleteResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleDeleteResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleGrantPermissionResponse'/3}). +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleGrantPermissionResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleGrantPermissionResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleGrantPermissionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.AuthRoleRevokePermissionResponse'/3}). +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(#{} = M, + Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.AuthRoleRevokePermissionResponse'}, + M, Path); +'v_msg_Etcd.AuthRoleRevokePermissionResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.AuthRoleRevokePermissionResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HealthCheckRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HealthCheckRequest'/3}). +'v_msg_Etcd.HealthCheckRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{service := F1} -> + v_type_string(F1, [service | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (service) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HealthCheckRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HealthCheckRequest'}, + M, Path); +'v_msg_Etcd.HealthCheckRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.HealthCheckRequest'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.HealthCheckResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.HealthCheckResponse'/3}). +'v_msg_Etcd.HealthCheckResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{status := F1} -> + 'v_enum_Etcd.HealthCheckResponse.ServingStatus'(F1, + [status | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (status) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.HealthCheckResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.HealthCheckResponse'}, + M, Path); +'v_msg_Etcd.HealthCheckResponse'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'Etcd.HealthCheckResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LockRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LockRequest'/3}). +'v_msg_Etcd.LockRequest'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F2} -> + v_type_int64(F2, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LockRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LockRequest'}, + M, Path); +'v_msg_Etcd.LockRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LockRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LockResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LockResponse'/3}). +'v_msg_Etcd.LockResponse'(#{} = M, Path, TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (key) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LockResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LockResponse'}, + M, Path); +'v_msg_Etcd.LockResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LockResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.UnlockRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.UnlockRequest'/3}). +'v_msg_Etcd.UnlockRequest'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.UnlockRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.UnlockRequest'}, + M, Path); +'v_msg_Etcd.UnlockRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.UnlockRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.UnlockResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.UnlockResponse'/3}). +'v_msg_Etcd.UnlockResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.UnlockResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.UnlockResponse'}, + M, Path); +'v_msg_Etcd.UnlockResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.UnlockResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CampaignRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CampaignRequest'/3}). +'v_msg_Etcd.CampaignRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F2} -> + v_type_int64(F2, [lease | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F3} -> + v_type_bytes(F3, [value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (lease) -> ok; + (value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CampaignRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CampaignRequest'}, + M, Path); +'v_msg_Etcd.CampaignRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CampaignRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.CampaignResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.CampaignResponse'/3}). +'v_msg_Etcd.CampaignResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{leader := F2} -> + 'v_msg_Etcd.LeaderKey'(F2, [leader | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (leader) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.CampaignResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.CampaignResponse'}, + M, Path); +'v_msg_Etcd.CampaignResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.CampaignResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderKey'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderKey'/3}). +'v_msg_Etcd.LeaderKey'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{rev := F3} -> + v_type_int64(F3, [rev | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F4} -> + v_type_int64(F4, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (key) -> ok; + (rev) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderKey'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderKey'}, + M, Path); +'v_msg_Etcd.LeaderKey'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderKey'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderRequest'/3}). +'v_msg_Etcd.LeaderRequest'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderRequest'}, + M, Path); +'v_msg_Etcd.LeaderRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.LeaderResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.LeaderResponse'/3}). +'v_msg_Etcd.LeaderResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.LeaderResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.LeaderResponse'}, + M, Path); +'v_msg_Etcd.LeaderResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.LeaderResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResignRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResignRequest'/3}). +'v_msg_Etcd.ResignRequest'(#{} = M, Path, TrUserData) -> + case M of + #{leader := F1} -> + 'v_msg_Etcd.LeaderKey'(F1, [leader | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (leader) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResignRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResignRequest'}, + M, Path); +'v_msg_Etcd.ResignRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResignRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ResignResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ResignResponse'/3}). +'v_msg_Etcd.ResignResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ResignResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ResignResponse'}, + M, Path); +'v_msg_Etcd.ResignResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ResignResponse'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ProclaimRequest'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ProclaimRequest'/3}). +'v_msg_Etcd.ProclaimRequest'(#{} = M, Path, + TrUserData) -> + case M of + #{leader := F1} -> + 'v_msg_Etcd.LeaderKey'(F1, [leader | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + v_type_bytes(F2, [value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (leader) -> ok; + (value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ProclaimRequest'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ProclaimRequest'}, + M, Path); +'v_msg_Etcd.ProclaimRequest'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ProclaimRequest'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_Etcd.ProclaimResponse'/3}). +-dialyzer({nowarn_function,'v_msg_Etcd.ProclaimResponse'/3}). +'v_msg_Etcd.ProclaimResponse'(#{} = M, Path, + TrUserData) -> + case M of + #{header := F1} -> + 'v_msg_Etcd.ResponseHeader'(F1, [header | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (header) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_Etcd.ProclaimResponse'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'Etcd.ProclaimResponse'}, + M, Path); +'v_msg_Etcd.ProclaimResponse'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'Etcd.ProclaimResponse'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorSet'/3}). +'v_msg_google.protobuf.FileDescriptorSet'(#{} = M, Path, + TrUserData) -> + case M of + #{file := F1} -> + if is_list(F1) -> + _ = ['v_msg_google.protobuf.FileDescriptorProto'(Elem, + [file | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FileDescriptorProto'}}, + F1, [file | Path]) + end; + _ -> ok + end, + lists:foreach(fun (file) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorSet'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorSet'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorSet'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorSet'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileDescriptorProto'/3}). +'v_msg_google.protobuf.FileDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{package := F2} -> + v_type_string(F2, [package | Path], TrUserData); + _ -> ok + end, + case M of + #{dependency := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [dependency | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [dependency | Path]) + end; + _ -> ok + end, + case M of + #{public_dependency := F4} -> + if is_list(F4) -> + _ = [v_type_int32(Elem, [public_dependency | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F4, + [public_dependency | Path]) + end; + _ -> ok + end, + case M of + #{weak_dependency := F5} -> + if is_list(F5) -> + _ = [v_type_int32(Elem, [weak_dependency | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F5, + [weak_dependency | Path]) + end; + _ -> ok + end, + case M of + #{message_type := F6} -> + if is_list(F6) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [message_type + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F6, [message_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F7, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{service := F8} -> + if is_list(F8) -> + _ = + ['v_msg_google.protobuf.ServiceDescriptorProto'(Elem, + [service + | Path], + TrUserData) + || Elem <- F8], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.ServiceDescriptorProto'}}, + F8, [service | Path]) + end; + _ -> ok + end, + case M of + #{extension := F9} -> + if is_list(F9) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F9, [extension | Path]) + end; + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FileOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{source_code_info := F11} -> + 'v_msg_google.protobuf.SourceCodeInfo'(F11, + [source_code_info | Path], + TrUserData); + _ -> ok + end, + case M of + #{syntax := F12} -> + v_type_string(F12, [syntax | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (package) -> ok; + (dependency) -> ok; + (public_dependency) -> ok; + (weak_dependency) -> ok; + (message_type) -> ok; + (enum_type) -> ok; + (service) -> ok; + (extension) -> ok; + (options) -> ok; + (source_code_info) -> ok; + (syntax) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FileDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ExtensionRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ExtensionRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ExtensionRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto.ReservedRange'/3}). +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(#{} = + M, + Path, TrUserData) -> + case M of + #{start := F1} -> + v_type_int32(F1, [start | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F2} -> + v_type_int32(F2, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (start) -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto.ReservedRange'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto.ReservedRange'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto.ReservedRange'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.DescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.DescriptorProto'/3}). +'v_msg_google.protobuf.DescriptorProto'(#{} = M, Path, + TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{field := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [field + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F2, [field | Path]) + end; + _ -> ok + end, + case M of + #{extension := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.FieldDescriptorProto'(Elem, + [extension + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.FieldDescriptorProto'}}, + F3, [extension | Path]) + end; + _ -> ok + end, + case M of + #{nested_type := F4} -> + if is_list(F4) -> + _ = ['v_msg_google.protobuf.DescriptorProto'(Elem, + [nested_type + | Path], + TrUserData) + || Elem <- F4], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.DescriptorProto'}}, + F4, [nested_type | Path]) + end; + _ -> ok + end, + case M of + #{enum_type := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.EnumDescriptorProto'(Elem, + [enum_type + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.EnumDescriptorProto'}}, + F5, [enum_type | Path]) + end; + _ -> ok + end, + case M of + #{extension_range := F6} -> + if is_list(F6) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ExtensionRange'(Elem, + [extension_range + | Path], + TrUserData) + || Elem <- F6], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}}, + F6, [extension_range | Path]) + end; + _ -> ok + end, + case M of + #{oneof_decl := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.OneofDescriptorProto'(Elem, + [oneof_decl + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.OneofDescriptorProto'}}, + F7, [oneof_decl | Path]) + end; + _ -> ok + end, + case M of + #{options := F8} -> + 'v_msg_google.protobuf.MessageOptions'(F8, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{reserved_range := F9} -> + if is_list(F9) -> + _ = + ['v_msg_google.protobuf.DescriptorProto.ReservedRange'(Elem, + [reserved_range + | Path], + TrUserData) + || Elem <- F9], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.DescriptorProto.ReservedRange'}}, + F9, [reserved_range | Path]) + end; + _ -> ok + end, + case M of + #{reserved_name := F10} -> + if is_list(F10) -> + _ = [v_type_string(Elem, [reserved_name | Path], + TrUserData) + || Elem <- F10], + ok; + true -> + mk_type_error({invalid_list_of, string}, F10, + [reserved_name | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (field) -> ok; + (extension) -> ok; + (nested_type) -> ok; + (enum_type) -> ok; + (extension_range) -> ok; + (oneof_decl) -> ok; + (options) -> ok; + (reserved_range) -> ok; + (reserved_name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.DescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.DescriptorProto'}, + M, Path); +'v_msg_google.protobuf.DescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.DescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldDescriptorProto'/3}). +'v_msg_google.protobuf.FieldDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{label := F3} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Label'(F3, + [label | Path], + TrUserData); + _ -> ok + end, + case M of + #{type := F4} -> + 'v_enum_google.protobuf.FieldDescriptorProto.Type'(F4, + [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{type_name := F5} -> + v_type_string(F5, [type_name | Path], TrUserData); + _ -> ok + end, + case M of + #{extendee := F6} -> + v_type_string(F6, [extendee | Path], TrUserData); + _ -> ok + end, + case M of + #{default_value := F7} -> + v_type_string(F7, [default_value | Path], TrUserData); + _ -> ok + end, + case M of + #{oneof_index := F8} -> + v_type_int32(F8, [oneof_index | Path], TrUserData); + _ -> ok + end, + case M of + #{json_name := F9} -> + v_type_string(F9, [json_name | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F10} -> + 'v_msg_google.protobuf.FieldOptions'(F10, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (label) -> ok; + (type) -> ok; + (type_name) -> ok; + (extendee) -> ok; + (default_value) -> ok; + (oneof_index) -> ok; + (json_name) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.FieldDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.OneofDescriptorProto'/3}). +'v_msg_google.protobuf.OneofDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.OneofDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.OneofDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.OneofDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.OneofDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumDescriptorProto'/3}). +'v_msg_google.protobuf.EnumDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F2} -> + if is_list(F2) -> + _ = + ['v_msg_google.protobuf.EnumValueDescriptorProto'(Elem, + [value + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.EnumValueDescriptorProto'}}, + F2, [value | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (value) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueDescriptorProto'/3}). +'v_msg_google.protobuf.EnumValueDescriptorProto'(#{} = + M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{number := F2} -> + v_type_int32(F2, [number | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.EnumValueOptions'(F3, + [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (number) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueDescriptorProto'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.EnumValueDescriptorProto'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceDescriptorProto'/3}). +'v_msg_google.protobuf.ServiceDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{method := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.MethodDescriptorProto'(Elem, + [method + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.MethodDescriptorProto'}}, + F2, [method | Path]) + end; + _ -> ok + end, + case M of + #{options := F3} -> + 'v_msg_google.protobuf.ServiceOptions'(F3, + [options | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (method) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.ServiceDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodDescriptorProto'/3}). +'v_msg_google.protobuf.MethodDescriptorProto'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_string(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{input_type := F2} -> + v_type_string(F2, [input_type | Path], TrUserData); + _ -> ok + end, + case M of + #{output_type := F3} -> + v_type_string(F3, [output_type | Path], TrUserData); + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_google.protobuf.MethodOptions'(F4, + [options | Path], TrUserData); + _ -> ok + end, + case M of + #{client_streaming := F5} -> + v_type_bool(F5, [client_streaming | Path], TrUserData); + _ -> ok + end, + case M of + #{server_streaming := F6} -> + v_type_bool(F6, [server_streaming | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (input_type) -> ok; + (output_type) -> ok; + (options) -> ok; + (client_streaming) -> ok; + (server_streaming) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodDescriptorProto'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodDescriptorProto'}, + M, Path); +'v_msg_google.protobuf.MethodDescriptorProto'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodDescriptorProto'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FileOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FileOptions'/3}). +'v_msg_google.protobuf.FileOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{java_package := F1} -> + v_type_string(F1, [java_package | Path], TrUserData); + _ -> ok + end, + case M of + #{java_outer_classname := F2} -> + v_type_string(F2, [java_outer_classname | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_multiple_files := F3} -> + v_type_bool(F3, [java_multiple_files | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generate_equals_and_hash := F4} -> + v_type_bool(F4, [java_generate_equals_and_hash | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_string_check_utf8 := F5} -> + v_type_bool(F5, [java_string_check_utf8 | Path], + TrUserData); + _ -> ok + end, + case M of + #{optimize_for := F6} -> + 'v_enum_google.protobuf.FileOptions.OptimizeMode'(F6, + [optimize_for + | Path], + TrUserData); + _ -> ok + end, + case M of + #{go_package := F7} -> + v_type_string(F7, [go_package | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_generic_services := F8} -> + v_type_bool(F8, [cc_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{java_generic_services := F9} -> + v_type_bool(F9, [java_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{py_generic_services := F10} -> + v_type_bool(F10, [py_generic_services | Path], + TrUserData); + _ -> ok + end, + case M of + #{deprecated := F11} -> + v_type_bool(F11, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{cc_enable_arenas := F12} -> + v_type_bool(F12, [cc_enable_arenas | Path], TrUserData); + _ -> ok + end, + case M of + #{objc_class_prefix := F13} -> + v_type_string(F13, [objc_class_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{csharp_namespace := F14} -> + v_type_string(F14, [csharp_namespace | Path], + TrUserData); + _ -> ok + end, + case M of + #{javanano_use_deprecated_package := F15} -> + v_type_bool(F15, + [javanano_use_deprecated_package | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F16} -> + if is_list(F16) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F16], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F16, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters_all := F17} -> + v_type_bool(F17, [goproto_getters_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_prefix_all := F18} -> + v_type_bool(F18, [goproto_enum_prefix_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer_all := F19} -> + v_type_bool(F19, [goproto_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{verbose_equal_all := F20} -> + v_type_bool(F20, [verbose_equal_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{face_all := F21} -> + v_type_bool(F21, [face_all | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring_all := F22} -> + v_type_bool(F22, [gostring_all | Path], TrUserData); + _ -> ok + end, + case M of + #{populate_all := F23} -> + v_type_bool(F23, [populate_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer_all := F24} -> + v_type_bool(F24, [stringer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone_all := F25} -> + v_type_bool(F25, [onlyone_all | Path], TrUserData); + _ -> ok + end, + case M of + #{equal_all := F26} -> + v_type_bool(F26, [equal_all | Path], TrUserData); + _ -> ok + end, + case M of + #{description_all := F27} -> + v_type_bool(F27, [description_all | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen_all := F28} -> + v_type_bool(F28, [testgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen_all := F29} -> + v_type_bool(F29, [benchgen_all | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler_all := F30} -> + v_type_bool(F30, [marshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler_all := F31} -> + v_type_bool(F31, [unmarshaler_all | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler_all := F32} -> + v_type_bool(F32, [stable_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{sizer_all := F33} -> + v_type_bool(F33, [sizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer_all := F34} -> + v_type_bool(F34, [goproto_enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer_all := F35} -> + v_type_bool(F35, [enum_stringer_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler_all := F36} -> + v_type_bool(F36, [unsafe_marshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler_all := F37} -> + v_type_bool(F37, [unsafe_unmarshaler_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map_all := F38} -> + v_type_bool(F38, [goproto_extensions_map_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized_all := F39} -> + v_type_bool(F39, [goproto_unrecognized_all | Path], + TrUserData); + _ -> ok + end, + case M of + #{gogoproto_import := F40} -> + v_type_bool(F40, [gogoproto_import | Path], TrUserData); + _ -> ok + end, + case M of + #{protosizer_all := F41} -> + v_type_bool(F41, [protosizer_all | Path], TrUserData); + _ -> ok + end, + case M of + #{compare_all := F42} -> + v_type_bool(F42, [compare_all | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (java_package) -> ok; + (java_outer_classname) -> ok; + (java_multiple_files) -> ok; + (java_generate_equals_and_hash) -> ok; + (java_string_check_utf8) -> ok; + (optimize_for) -> ok; + (go_package) -> ok; + (cc_generic_services) -> ok; + (java_generic_services) -> ok; + (py_generic_services) -> ok; + (deprecated) -> ok; + (cc_enable_arenas) -> ok; + (objc_class_prefix) -> ok; + (csharp_namespace) -> ok; + (javanano_use_deprecated_package) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters_all) -> ok; + (goproto_enum_prefix_all) -> ok; + (goproto_stringer_all) -> ok; + (verbose_equal_all) -> ok; + (face_all) -> ok; + (gostring_all) -> ok; + (populate_all) -> ok; + (stringer_all) -> ok; + (onlyone_all) -> ok; + (equal_all) -> ok; + (description_all) -> ok; + (testgen_all) -> ok; + (benchgen_all) -> ok; + (marshaler_all) -> ok; + (unmarshaler_all) -> ok; + (stable_marshaler_all) -> ok; + (sizer_all) -> ok; + (goproto_enum_stringer_all) -> ok; + (enum_stringer_all) -> ok; + (unsafe_marshaler_all) -> ok; + (unsafe_unmarshaler_all) -> ok; + (goproto_extensions_map_all) -> ok; + (goproto_unrecognized_all) -> ok; + (gogoproto_import) -> ok; + (protosizer_all) -> ok; + (compare_all) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FileOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FileOptions'}, + M, Path); +'v_msg_google.protobuf.FileOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FileOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MessageOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MessageOptions'/3}). +'v_msg_google.protobuf.MessageOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{message_set_wire_format := F1} -> + v_type_bool(F1, [message_set_wire_format | Path], + TrUserData); + _ -> ok + end, + case M of + #{no_standard_descriptor_accessor := F2} -> + v_type_bool(F2, + [no_standard_descriptor_accessor | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F3} -> + v_type_bool(F3, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{map_entry := F4} -> + v_type_bool(F4, [map_entry | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F5} -> + if is_list(F5) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F5, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_getters := F6} -> + v_type_bool(F6, [goproto_getters | Path], TrUserData); + _ -> ok + end, + case M of + #{goproto_stringer := F7} -> + v_type_bool(F7, [goproto_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{verbose_equal := F8} -> + v_type_bool(F8, [verbose_equal | Path], TrUserData); + _ -> ok + end, + case M of + #{face := F9} -> + v_type_bool(F9, [face | Path], TrUserData); + _ -> ok + end, + case M of + #{gostring := F10} -> + v_type_bool(F10, [gostring | Path], TrUserData); + _ -> ok + end, + case M of + #{populate := F11} -> + v_type_bool(F11, [populate | Path], TrUserData); + _ -> ok + end, + case M of + #{stringer := F12} -> + v_type_bool(F12, [stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{onlyone := F13} -> + v_type_bool(F13, [onlyone | Path], TrUserData); + _ -> ok + end, + case M of + #{equal := F14} -> + v_type_bool(F14, [equal | Path], TrUserData); + _ -> ok + end, + case M of + #{description := F15} -> + v_type_bool(F15, [description | Path], TrUserData); + _ -> ok + end, + case M of + #{testgen := F16} -> + v_type_bool(F16, [testgen | Path], TrUserData); + _ -> ok + end, + case M of + #{benchgen := F17} -> + v_type_bool(F17, [benchgen | Path], TrUserData); + _ -> ok + end, + case M of + #{marshaler := F18} -> + v_type_bool(F18, [marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unmarshaler := F19} -> + v_type_bool(F19, [unmarshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{stable_marshaler := F20} -> + v_type_bool(F20, [stable_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{sizer := F21} -> + v_type_bool(F21, [sizer | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_marshaler := F22} -> + v_type_bool(F22, [unsafe_marshaler | Path], TrUserData); + _ -> ok + end, + case M of + #{unsafe_unmarshaler := F23} -> + v_type_bool(F23, [unsafe_unmarshaler | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_extensions_map := F24} -> + v_type_bool(F24, [goproto_extensions_map | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_unrecognized := F25} -> + v_type_bool(F25, [goproto_unrecognized | Path], + TrUserData); + _ -> ok + end, + case M of + #{protosizer := F26} -> + v_type_bool(F26, [protosizer | Path], TrUserData); + _ -> ok + end, + case M of + #{compare := F27} -> + v_type_bool(F27, [compare | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (message_set_wire_format) -> ok; + (no_standard_descriptor_accessor) -> ok; + (deprecated) -> ok; + (map_entry) -> ok; + (uninterpreted_option) -> ok; + (goproto_getters) -> ok; + (goproto_stringer) -> ok; + (verbose_equal) -> ok; + (face) -> ok; + (gostring) -> ok; + (populate) -> ok; + (stringer) -> ok; + (onlyone) -> ok; + (equal) -> ok; + (description) -> ok; + (testgen) -> ok; + (benchgen) -> ok; + (marshaler) -> ok; + (unmarshaler) -> ok; + (stable_marshaler) -> ok; + (sizer) -> ok; + (unsafe_marshaler) -> ok; + (unsafe_unmarshaler) -> ok; + (goproto_extensions_map) -> ok; + (goproto_unrecognized) -> ok; + (protosizer) -> ok; + (compare) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MessageOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MessageOptions'}, + M, Path); +'v_msg_google.protobuf.MessageOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MessageOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.FieldOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.FieldOptions'/3}). +'v_msg_google.protobuf.FieldOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{ctype := F1} -> + 'v_enum_google.protobuf.FieldOptions.CType'(F1, + [ctype | Path], + TrUserData); + _ -> ok + end, + case M of + #{packed := F2} -> + v_type_bool(F2, [packed | Path], TrUserData); + _ -> ok + end, + case M of + #{jstype := F3} -> + 'v_enum_google.protobuf.FieldOptions.JSType'(F3, + [jstype | Path], + TrUserData); + _ -> ok + end, + case M of + #{lazy := F4} -> + v_type_bool(F4, [lazy | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F5} -> + v_type_bool(F5, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{weak := F6} -> + v_type_bool(F6, [weak | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F7} -> + if is_list(F7) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F7], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F7, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{nullable := F8} -> + v_type_bool(F8, [nullable | Path], TrUserData); + _ -> ok + end, + case M of + #{embed := F9} -> + v_type_bool(F9, [embed | Path], TrUserData); + _ -> ok + end, + case M of + #{customtype := F10} -> + v_type_string(F10, [customtype | Path], TrUserData); + _ -> ok + end, + case M of + #{customname := F11} -> + v_type_string(F11, [customname | Path], TrUserData); + _ -> ok + end, + case M of + #{jsontag := F12} -> + v_type_string(F12, [jsontag | Path], TrUserData); + _ -> ok + end, + case M of + #{moretags := F13} -> + v_type_string(F13, [moretags | Path], TrUserData); + _ -> ok + end, + case M of + #{casttype := F14} -> + v_type_string(F14, [casttype | Path], TrUserData); + _ -> ok + end, + case M of + #{castkey := F15} -> + v_type_string(F15, [castkey | Path], TrUserData); + _ -> ok + end, + case M of + #{castvalue := F16} -> + v_type_string(F16, [castvalue | Path], TrUserData); + _ -> ok + end, + case M of + #{stdtime := F17} -> + v_type_bool(F17, [stdtime | Path], TrUserData); + _ -> ok + end, + case M of + #{stdduration := F18} -> + v_type_bool(F18, [stdduration | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (ctype) -> ok; + (packed) -> ok; + (jstype) -> ok; + (lazy) -> ok; + (deprecated) -> ok; + (weak) -> ok; + (uninterpreted_option) -> ok; + (nullable) -> ok; + (embed) -> ok; + (customtype) -> ok; + (customname) -> ok; + (jsontag) -> ok; + (moretags) -> ok; + (casttype) -> ok; + (castkey) -> ok; + (castvalue) -> ok; + (stdtime) -> ok; + (stdduration) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.FieldOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.FieldOptions'}, + M, Path); +'v_msg_google.protobuf.FieldOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.FieldOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumOptions'/3}). +'v_msg_google.protobuf.EnumOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{allow_alias := F1} -> + v_type_bool(F1, [allow_alias | Path], TrUserData); + _ -> ok + end, + case M of + #{deprecated := F2} -> + v_type_bool(F2, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F3} -> + if is_list(F3) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F3, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{goproto_enum_prefix := F4} -> + v_type_bool(F4, [goproto_enum_prefix | Path], + TrUserData); + _ -> ok + end, + case M of + #{goproto_enum_stringer := F5} -> + v_type_bool(F5, [goproto_enum_stringer | Path], + TrUserData); + _ -> ok + end, + case M of + #{enum_stringer := F6} -> + v_type_bool(F6, [enum_stringer | Path], TrUserData); + _ -> ok + end, + case M of + #{enum_customname := F7} -> + v_type_string(F7, [enum_customname | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (allow_alias) -> ok; + (deprecated) -> ok; + (uninterpreted_option) -> ok; + (goproto_enum_prefix) -> ok; + (goproto_enum_stringer) -> ok; + (enum_stringer) -> ok; + (enum_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumOptions'}, + M, Path); +'v_msg_google.protobuf.EnumOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.EnumValueOptions'/3}). +'v_msg_google.protobuf.EnumValueOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + case M of + #{enumvalue_customname := F3} -> + v_type_string(F3, [enumvalue_customname | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (enumvalue_customname) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.EnumValueOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.EnumValueOptions'}, + M, Path); +'v_msg_google.protobuf.EnumValueOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.EnumValueOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.ServiceOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.ServiceOptions'/3}). +'v_msg_google.protobuf.ServiceOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.ServiceOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.ServiceOptions'}, + M, Path); +'v_msg_google.protobuf.ServiceOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.ServiceOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.MethodOptions'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.MethodOptions'/3}). +'v_msg_google.protobuf.MethodOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{deprecated := F1} -> + v_type_bool(F1, [deprecated | Path], TrUserData); + _ -> ok + end, + case M of + #{uninterpreted_option := F2} -> + if is_list(F2) -> + _ = ['v_msg_google.protobuf.UninterpretedOption'(Elem, + [uninterpreted_option + | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'google.protobuf.UninterpretedOption'}}, + F2, [uninterpreted_option | Path]) + end; + _ -> ok + end, + lists:foreach(fun (deprecated) -> ok; + (uninterpreted_option) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.MethodOptions'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.MethodOptions'}, + M, Path); +'v_msg_google.protobuf.MethodOptions'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.MethodOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption.NamePart'/3}). +'v_msg_google.protobuf.UninterpretedOption.NamePart'(#{name_part + := F1, + is_extension := F2} = + M, + Path, TrUserData) -> + v_type_string(F1, [name_part | Path], TrUserData), + v_type_bool(F2, [is_extension | Path], TrUserData), + lists:foreach(fun (name_part) -> ok; + (is_extension) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption.NamePart'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, + [name_part, is_extension] -- maps:keys(M), + 'google.protobuf.UninterpretedOption.NamePart'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption.NamePart'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption.NamePart'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.UninterpretedOption'/3}). +'v_msg_google.protobuf.UninterpretedOption'(#{} = M, + Path, TrUserData) -> + case M of + #{name := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.UninterpretedOption.NamePart'(Elem, + [name + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.UninterpretedOption.NamePart'}}, + F1, [name | Path]) + end; + _ -> ok + end, + case M of + #{identifier_value := F2} -> + v_type_string(F2, [identifier_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{positive_int_value := F3} -> + v_type_uint64(F3, [positive_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{negative_int_value := F4} -> + v_type_int64(F4, [negative_int_value | Path], + TrUserData); + _ -> ok + end, + case M of + #{double_value := F5} -> + v_type_double(F5, [double_value | Path], TrUserData); + _ -> ok + end, + case M of + #{string_value := F6} -> + v_type_bytes(F6, [string_value | Path], TrUserData); + _ -> ok + end, + case M of + #{aggregate_value := F7} -> + v_type_string(F7, [aggregate_value | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (identifier_value) -> ok; + (positive_int_value) -> ok; + (negative_int_value) -> ok; + (double_value) -> ok; + (string_value) -> ok; + (aggregate_value) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.UninterpretedOption'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.UninterpretedOption'}, + M, Path); +'v_msg_google.protobuf.UninterpretedOption'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.UninterpretedOption'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo.Location'/3}). +'v_msg_google.protobuf.SourceCodeInfo.Location'(#{} = M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{span := F2} -> + if is_list(F2) -> + _ = [v_type_int32(Elem, [span | Path], TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F2, + [span | Path]) + end; + _ -> ok + end, + case M of + #{leading_comments := F3} -> + v_type_string(F3, [leading_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{trailing_comments := F4} -> + v_type_string(F4, [trailing_comments | Path], + TrUserData); + _ -> ok + end, + case M of + #{leading_detached_comments := F5} -> + if is_list(F5) -> + _ = [v_type_string(Elem, + [leading_detached_comments | Path], + TrUserData) + || Elem <- F5], + ok; + true -> + mk_type_error({invalid_list_of, string}, F5, + [leading_detached_comments | Path]) + end; + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (span) -> ok; + (leading_comments) -> ok; + (trailing_comments) -> ok; + (leading_detached_comments) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo.Location'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo.Location'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo.Location'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo.Location'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.SourceCodeInfo'/3}). +'v_msg_google.protobuf.SourceCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{location := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.SourceCodeInfo.Location'(Elem, + [location + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.SourceCodeInfo.Location'}}, + F1, [location | Path]) + end; + _ -> ok + end, + lists:foreach(fun (location) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.SourceCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.SourceCodeInfo'}, + M, Path); +'v_msg_google.protobuf.SourceCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.SourceCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(#{} = + M, + Path, TrUserData) -> + case M of + #{path := F1} -> + if is_list(F1) -> + _ = [v_type_int32(Elem, [path | Path], TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, int32}, F1, + [path | Path]) + end; + _ -> ok + end, + case M of + #{source_file := F2} -> + v_type_string(F2, [source_file | Path], TrUserData); + _ -> ok + end, + case M of + #{'begin' := F3} -> + v_type_int32(F3, ['begin' | Path], TrUserData); + _ -> ok + end, + case M of + #{'end' := F4} -> + v_type_int32(F4, ['end' | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (path) -> ok; + (source_file) -> ok; + ('begin') -> ok; + ('end') -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(M, + Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(X, + Path, _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +-dialyzer({nowarn_function,'v_msg_google.protobuf.GeneratedCodeInfo'/3}). +'v_msg_google.protobuf.GeneratedCodeInfo'(#{} = M, Path, + TrUserData) -> + case M of + #{annotation := F1} -> + if is_list(F1) -> + _ = + ['v_msg_google.protobuf.GeneratedCodeInfo.Annotation'(Elem, + [annotation + | Path], + TrUserData) + || Elem <- F1], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, + 'google.protobuf.GeneratedCodeInfo.Annotation'}}, + F1, [annotation | Path]) + end; + _ -> ok + end, + lists:foreach(fun (annotation) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_google.protobuf.GeneratedCodeInfo'(M, Path, + _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'google.protobuf.GeneratedCodeInfo'}, + M, Path); +'v_msg_google.protobuf.GeneratedCodeInfo'(X, Path, + _TrUserData) -> + mk_type_error({expected_msg, + 'google.protobuf.GeneratedCodeInfo'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.KeyValue'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.KeyValue'/3}). +'v_msg_mvccpb.KeyValue'(#{} = M, Path, TrUserData) -> + case M of + #{key := F1} -> + v_type_bytes(F1, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{create_revision := F2} -> + v_type_int64(F2, [create_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{mod_revision := F3} -> + v_type_int64(F3, [mod_revision | Path], TrUserData); + _ -> ok + end, + case M of + #{version := F4} -> + v_type_int64(F4, [version | Path], TrUserData); + _ -> ok + end, + case M of + #{value := F5} -> + v_type_bytes(F5, [value | Path], TrUserData); + _ -> ok + end, + case M of + #{lease := F6} -> + v_type_int64(F6, [lease | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (key) -> ok; + (create_revision) -> ok; + (mod_revision) -> ok; + (version) -> ok; + (value) -> ok; + (lease) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.KeyValue'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.KeyValue'}, + M, Path); +'v_msg_mvccpb.KeyValue'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.KeyValue'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_mvccpb.Event'/3}). +-dialyzer({nowarn_function,'v_msg_mvccpb.Event'/3}). +'v_msg_mvccpb.Event'(#{} = M, Path, TrUserData) -> + case M of + #{type := F1} -> + 'v_enum_mvccpb.Event.EventType'(F1, [type | Path], + TrUserData); + _ -> ok + end, + case M of + #{kv := F2} -> + 'v_msg_mvccpb.KeyValue'(F2, [kv | Path], TrUserData); + _ -> ok + end, + case M of + #{prev_kv := F3} -> + 'v_msg_mvccpb.KeyValue'(F3, [prev_kv | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (type) -> ok; + (kv) -> ok; + (prev_kv) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_mvccpb.Event'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'mvccpb.Event'}, + M, Path); +'v_msg_mvccpb.Event'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'mvccpb.Event'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.UserAddOptions'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.UserAddOptions'/3}). +'v_msg_authpb.UserAddOptions'(#{} = M, Path, + TrUserData) -> + case M of + #{no_password := F1} -> + v_type_bool(F1, [no_password | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (no_password) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.UserAddOptions'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.UserAddOptions'}, + M, Path); +'v_msg_authpb.UserAddOptions'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.UserAddOptions'}, + X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.User'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.User'/3}). +'v_msg_authpb.User'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{password := F2} -> + v_type_bytes(F2, [password | Path], TrUserData); + _ -> ok + end, + case M of + #{roles := F3} -> + if is_list(F3) -> + _ = [v_type_string(Elem, [roles | Path], TrUserData) + || Elem <- F3], + ok; + true -> + mk_type_error({invalid_list_of, string}, F3, + [roles | Path]) + end; + _ -> ok + end, + case M of + #{options := F4} -> + 'v_msg_authpb.UserAddOptions'(F4, [options | Path], + TrUserData); + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (password) -> ok; + (roles) -> ok; + (options) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.User'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.User'}, + M, Path); +'v_msg_authpb.User'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.User'}, X, Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Permission'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Permission'/3}). +'v_msg_authpb.Permission'(#{} = M, Path, TrUserData) -> + case M of + #{permType := F1} -> + 'v_enum_authpb.Permission.Type'(F1, [permType | Path], + TrUserData); + _ -> ok + end, + case M of + #{key := F2} -> + v_type_bytes(F2, [key | Path], TrUserData); + _ -> ok + end, + case M of + #{range_end := F3} -> + v_type_bytes(F3, [range_end | Path], TrUserData); + _ -> ok + end, + lists:foreach(fun (permType) -> ok; + (key) -> ok; + (range_end) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Permission'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Permission'}, + M, Path); +'v_msg_authpb.Permission'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Permission'}, X, + Path). + +-compile({nowarn_unused_function,'v_msg_authpb.Role'/3}). +-dialyzer({nowarn_function,'v_msg_authpb.Role'/3}). +'v_msg_authpb.Role'(#{} = M, Path, TrUserData) -> + case M of + #{name := F1} -> + v_type_bytes(F1, [name | Path], TrUserData); + _ -> ok + end, + case M of + #{keyPermission := F2} -> + if is_list(F2) -> + _ = ['v_msg_authpb.Permission'(Elem, + [keyPermission | Path], + TrUserData) + || Elem <- F2], + ok; + true -> + mk_type_error({invalid_list_of, + {msg, 'authpb.Permission'}}, + F2, [keyPermission | Path]) + end; + _ -> ok + end, + lists:foreach(fun (name) -> ok; + (keyPermission) -> ok; + (OtherKey) -> + mk_type_error({extraneous_key, OtherKey}, M, Path) + end, + maps:keys(M)), + ok; +'v_msg_authpb.Role'(M, Path, _TrUserData) + when is_map(M) -> + mk_type_error({missing_fields, [] -- maps:keys(M), + 'authpb.Role'}, + M, Path); +'v_msg_authpb.Role'(X, Path, _TrUserData) -> + mk_type_error({expected_msg, 'authpb.Role'}, X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.RangeRequest.SortOrder'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.RangeRequest.SortOrder'/3}). +'v_enum_Etcd.RangeRequest.SortOrder'('NONE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'('ASCEND', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'('DESCEND', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortOrder'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.RangeRequest.SortOrder'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.RangeRequest.SortOrder'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.RangeRequest.SortTarget'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.RangeRequest.SortTarget'/3}). +'v_enum_Etcd.RangeRequest.SortTarget'('KEY', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('VERSION', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('CREATE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('MOD', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'('VALUE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.RangeRequest.SortTarget'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.RangeRequest.SortTarget'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.RangeRequest.SortTarget'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.Compare.CompareResult'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.Compare.CompareResult'/3}). +'v_enum_Etcd.Compare.CompareResult'('EQUAL', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('GREATER', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('LESS', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'('NOT_EQUAL', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareResult'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.Compare.CompareResult'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.Compare.CompareResult'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.Compare.CompareTarget'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.Compare.CompareTarget'/3}). +'v_enum_Etcd.Compare.CompareTarget'('VERSION', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('CREATE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('MOD', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('VALUE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'('LEASE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.Compare.CompareTarget'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.Compare.CompareTarget'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.Compare.CompareTarget'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.WatchCreateRequest.FilterType'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.WatchCreateRequest.FilterType'/3}). +'v_enum_Etcd.WatchCreateRequest.FilterType'('NOPUT', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.WatchCreateRequest.FilterType'('NODELETE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.WatchCreateRequest.FilterType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.WatchCreateRequest.FilterType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.WatchCreateRequest.FilterType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.AlarmType'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.AlarmType'/3}). +'v_enum_Etcd.AlarmType'('NONE', _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'('NOSPACE', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'('CORRUPT', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.AlarmType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'Etcd.AlarmType'}, X, + Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.AlarmRequest.AlarmAction'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.AlarmRequest.AlarmAction'/3}). +'v_enum_Etcd.AlarmRequest.AlarmAction'('GET', _Path, + _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'('ACTIVATE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.AlarmRequest.AlarmAction'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.AlarmRequest.AlarmAction'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.AlarmRequest.AlarmAction'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_Etcd.HealthCheckResponse.ServingStatus'/3}). +-dialyzer({nowarn_function,'v_enum_Etcd.HealthCheckResponse.ServingStatus'/3}). +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN', + _Path, _TrUserData) -> + ok; +'v_enum_Etcd.HealthCheckResponse.ServingStatus'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_Etcd.HealthCheckResponse.ServingStatus'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'Etcd.HealthCheckResponse.ServingStatus'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Type'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Type'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Type'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Type'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldDescriptorProto.Label'/3}). +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldDescriptorProto.Label'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldDescriptorProto.Label'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldDescriptorProto.Label'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FileOptions.OptimizeMode'/3}). +'v_enum_google.protobuf.FileOptions.OptimizeMode'('SPEED', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FileOptions.OptimizeMode'(V, + Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FileOptions.OptimizeMode'(X, + Path, _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FileOptions.OptimizeMode'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.CType'/3}). +'v_enum_google.protobuf.FieldOptions.CType'('STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('CORD', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'('STRING_PIECE', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.CType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.CType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.CType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +-dialyzer({nowarn_function,'v_enum_google.protobuf.FieldOptions.JSType'/3}). +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NORMAL', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_STRING', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'('JS_NUMBER', + _Path, _TrUserData) -> + ok; +'v_enum_google.protobuf.FieldOptions.JSType'(V, Path, + TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_google.protobuf.FieldOptions.JSType'(X, Path, + _TrUserData) -> + mk_type_error({invalid_enum, + 'google.protobuf.FieldOptions.JSType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_mvccpb.Event.EventType'/3}). +-dialyzer({nowarn_function,'v_enum_mvccpb.Event.EventType'/3}). +'v_enum_mvccpb.Event.EventType'('PUT', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'('DELETE', _Path, + _TrUserData) -> + ok; +'v_enum_mvccpb.Event.EventType'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_mvccpb.Event.EventType'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'mvccpb.Event.EventType'}, + X, Path). + +-compile({nowarn_unused_function,'v_enum_authpb.Permission.Type'/3}). +-dialyzer({nowarn_function,'v_enum_authpb.Permission.Type'/3}). +'v_enum_authpb.Permission.Type'('READ', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('WRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'('READWRITE', _Path, + _TrUserData) -> + ok; +'v_enum_authpb.Permission.Type'(V, Path, TrUserData) + when is_integer(V) -> + v_type_sint32(V, Path, TrUserData); +'v_enum_authpb.Permission.Type'(X, Path, _TrUserData) -> + mk_type_error({invalid_enum, 'authpb.Permission.Type'}, + X, Path). + +-compile({nowarn_unused_function,v_type_sint32/3}). +-dialyzer({nowarn_function,v_type_sint32/3}). +v_type_sint32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_sint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, sint32, signed, 32}, + N, Path); +v_type_sint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, sint32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) + when -2147483648 =< N, N =< 2147483647 -> + ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int32, signed, 32}, + N, Path); +v_type_int32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int32, signed, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_int64/3}). +-dialyzer({nowarn_function,v_type_int64/3}). +v_type_int64(N, _Path, _TrUserData) + when -9223372036854775808 =< N, + N =< 9223372036854775807 -> + ok; +v_type_int64(N, Path, _TrUserData) when is_integer(N) -> + mk_type_error({value_out_of_range, int64, signed, 64}, + N, Path); +v_type_int64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, int64, signed, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint32/3}). +-dialyzer({nowarn_function,v_type_uint32/3}). +v_type_uint32(N, _Path, _TrUserData) + when 0 =< N, N =< 4294967295 -> + ok; +v_type_uint32(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint32, unsigned, + 32}, + N, Path); +v_type_uint32(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint32, unsigned, 32}, X, + Path). + +-compile({nowarn_unused_function,v_type_uint64/3}). +-dialyzer({nowarn_function,v_type_uint64/3}). +v_type_uint64(N, _Path, _TrUserData) + when 0 =< N, N =< 18446744073709551615 -> + ok; +v_type_uint64(N, Path, _TrUserData) + when is_integer(N) -> + mk_type_error({value_out_of_range, uint64, unsigned, + 64}, + N, Path); +v_type_uint64(X, Path, _TrUserData) -> + mk_type_error({bad_integer, uint64, unsigned, 64}, X, + Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> + mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_double/3}). +-dialyzer({nowarn_function,v_type_double/3}). +v_type_double(N, _Path, _TrUserData) when is_float(N) -> + ok; +v_type_double(N, _Path, _TrUserData) + when is_integer(N) -> + ok; +v_type_double(infinity, _Path, _TrUserData) -> ok; +v_type_double('-infinity', _Path, _TrUserData) -> ok; +v_type_double(nan, _Path, _TrUserData) -> ok; +v_type_double(X, Path, _TrUserData) -> + mk_type_error(bad_double_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) + when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> + mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> + mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> + mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> + ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> + ok; +v_type_bytes(X, Path, _TrUserData) -> + mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, + {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> + list_to_atom(lists:append(lists:join(".", + lists:map(fun atom_to_list/1, + lists:reverse(PathR))))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. + + +get_msg_defs() -> + [{{enum, 'Etcd.RangeRequest.SortOrder'}, + [{'NONE', 0}, {'ASCEND', 1}, {'DESCEND', 2}]}, + {{enum, 'Etcd.RangeRequest.SortTarget'}, + [{'KEY', 0}, {'VERSION', 1}, {'CREATE', 2}, {'MOD', 3}, + {'VALUE', 4}]}, + {{enum, 'Etcd.Compare.CompareResult'}, + [{'EQUAL', 0}, {'GREATER', 1}, {'LESS', 2}, + {'NOT_EQUAL', 3}]}, + {{enum, 'Etcd.Compare.CompareTarget'}, + [{'VERSION', 0}, {'CREATE', 1}, {'MOD', 2}, + {'VALUE', 3}, {'LEASE', 4}]}, + {{enum, 'Etcd.WatchCreateRequest.FilterType'}, + [{'NOPUT', 0}, {'NODELETE', 1}]}, + {{enum, 'Etcd.AlarmType'}, + [{'NONE', 0}, {'NOSPACE', 1}, {'CORRUPT', 2}]}, + {{enum, 'Etcd.AlarmRequest.AlarmAction'}, + [{'GET', 0}, {'ACTIVATE', 1}, {'DEACTIVATE', 2}]}, + {{enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Type'}, + [{'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}]}, + {{enum, 'google.protobuf.FieldDescriptorProto.Label'}, + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]}, + {{enum, 'google.protobuf.FileOptions.OptimizeMode'}, + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]}, + {{enum, 'google.protobuf.FieldOptions.CType'}, + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]}, + {{enum, 'google.protobuf.FieldOptions.JSType'}, + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]}, + {{enum, 'mvccpb.Event.EventType'}, + [{'PUT', 0}, {'DELETE', 1}]}, + {{enum, 'authpb.Permission.Type'}, + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]}, + {{msg, 'Etcd.ResponseHeader'}, + [#{name => cluster_id, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => member_id, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => revision, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => raft_term, fnum => 4, rnum => 5, + type => uint64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.RangeRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => limit, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => revision, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => sort_order, fnum => 5, rnum => 6, + type => {enum, 'Etcd.RangeRequest.SortOrder'}, + occurrence => optional, opts => []}, + #{name => sort_target, fnum => 6, rnum => 7, + type => {enum, 'Etcd.RangeRequest.SortTarget'}, + occurrence => optional, opts => []}, + #{name => serializable, fnum => 7, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => keys_only, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}, + #{name => count_only, fnum => 9, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => min_mod_revision, fnum => 10, rnum => 11, + type => int64, occurrence => optional, opts => []}, + #{name => max_mod_revision, fnum => 11, rnum => 12, + type => int64, occurrence => optional, opts => []}, + #{name => min_create_revision, fnum => 12, rnum => 13, + type => int64, occurrence => optional, opts => []}, + #{name => max_create_revision, fnum => 13, rnum => 14, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.RangeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kvs, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}, + #{name => more, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => count, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.PutRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => ignore_value, fnum => 5, rnum => 6, + type => bool, occurrence => optional, opts => []}, + #{name => ignore_lease, fnum => 6, rnum => 7, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.PutResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.DeleteRangeRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.DeleteRangeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => deleted, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kvs, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.RequestOp'}, + [#{name => request, rnum => 2, + fields => + [#{name => request_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutRequest'}, + occurrence => optional, opts => []}, + #{name => request_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnRequest'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.ResponseOp'}, + [#{name => response, rnum => 2, + fields => + [#{name => response_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutResponse'}, + occurrence => optional, opts => []}, + #{name => response_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnResponse'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.Compare'}, + [#{name => result, fnum => 1, rnum => 2, + type => {enum, 'Etcd.Compare.CompareResult'}, + occurrence => optional, opts => []}, + #{name => target, fnum => 2, rnum => 3, + type => {enum, 'Etcd.Compare.CompareTarget'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}, + #{name => target_union, rnum => 5, + fields => + [#{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 6, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => value, fnum => 7, rnum => 5, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 8, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + #{name => range_end, fnum => 64, rnum => 6, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.TxnRequest'}, + [#{name => compare, fnum => 1, rnum => 2, + type => {msg, 'Etcd.Compare'}, occurrence => repeated, + opts => []}, + #{name => success, fnum => 2, rnum => 3, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}, + #{name => failure, fnum => 3, rnum => 4, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.TxnResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => succeeded, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => responses, fnum => 3, rnum => 4, + type => {msg, 'Etcd.ResponseOp'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.CompactionRequest'}, + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}, + #{name => physical, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CompactionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashRequest'}, []}, + {{msg, 'Etcd.HashKVRequest'}, + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashKVResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HashResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.SnapshotRequest'}, []}, + {{msg, 'Etcd.SnapshotResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => remaining_bytes, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => blob, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchRequest'}, + [#{name => request_union, rnum => 2, + fields => + [#{name => create_request, fnum => 1, rnum => 2, + type => {msg, 'Etcd.WatchCreateRequest'}, + occurrence => optional, opts => []}, + #{name => cancel_request, fnum => 2, rnum => 2, + type => {msg, 'Etcd.WatchCancelRequest'}, + occurrence => optional, opts => []}, + #{name => progress_request, fnum => 3, rnum => 2, + type => {msg, 'Etcd.WatchProgressRequest'}, + occurrence => optional, opts => []}]}]}, + {{msg, 'Etcd.WatchCreateRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => start_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => progress_notify, fnum => 4, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => filters, fnum => 5, rnum => 6, + type => {enum, 'Etcd.WatchCreateRequest.FilterType'}, + occurrence => repeated, opts => [packed]}, + #{name => prev_kv, fnum => 6, rnum => 7, type => bool, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 7, rnum => 8, type => int64, + occurrence => optional, opts => []}, + #{name => fragment, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchCancelRequest'}, + [#{name => watch_id, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.WatchProgressRequest'}, []}, + {{msg, 'Etcd.WatchResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => created, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => canceled, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 5, rnum => 6, + type => int64, occurrence => optional, opts => []}, + #{name => cancel_reason, fnum => 6, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => fragment, fnum => 7, rnum => 8, type => bool, + occurrence => optional, opts => []}, + #{name => events, fnum => 11, rnum => 9, + type => {msg, 'mvccpb.Event'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.LeaseGrantRequest'}, + [#{name => 'TTL', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseGrantResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => error, fnum => 4, rnum => 5, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseRevokeRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseRevokeResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpoint'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => remaining_TTL, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpointRequest'}, + [#{name => checkpoints, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaseCheckpoint'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.LeaseCheckpointResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseKeepAliveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseKeepAliveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseTimeToLiveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => keys, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseTimeToLiveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => grantedTTL, fnum => 4, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => keys, fnum => 5, rnum => 6, type => bytes, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.LeaseLeasesRequest'}, []}, + {{msg, 'Etcd.LeaseStatus'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaseLeasesResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leases, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaseStatus'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.Member'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => name, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => clientURLs, fnum => 4, rnum => 5, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 5, rnum => 6, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberAddRequest'}, + [#{name => peerURLs, fnum => 1, rnum => 2, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => member, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => optional, + opts => []}, + #{name => members, fnum => 3, rnum => 4, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberRemoveRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberRemoveResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberUpdateRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 2, rnum => 3, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.MemberUpdateResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberListRequest'}, []}, + {{msg, 'Etcd.MemberListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.MemberPromoteRequest'}, + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MemberPromoteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]}, + {{msg, 'Etcd.DefragmentRequest'}, []}, + {{msg, 'Etcd.DefragmentResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MoveLeaderRequest'}, + [#{name => targetID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.MoveLeaderResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmRequest'}, + [#{name => action, fnum => 1, rnum => 2, + type => {enum, 'Etcd.AlarmRequest.AlarmAction'}, + occurrence => optional, opts => []}, + #{name => memberID, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 3, rnum => 4, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmMember'}, + [#{name => memberID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 2, rnum => 3, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AlarmResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => alarms, fnum => 2, rnum => 3, + type => {msg, 'Etcd.AlarmMember'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.StatusRequest'}, []}, + {{msg, 'Etcd.StatusResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => version, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dbSize, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => leader, fnum => 4, rnum => 5, type => uint64, + occurrence => optional, opts => []}, + #{name => raftIndex, fnum => 5, rnum => 6, + type => uint64, occurrence => optional, opts => []}, + #{name => raftTerm, fnum => 6, rnum => 7, + type => uint64, occurrence => optional, opts => []}, + #{name => raftAppliedIndex, fnum => 7, rnum => 8, + type => uint64, occurrence => optional, opts => []}, + #{name => errors, fnum => 8, rnum => 9, type => string, + occurrence => repeated, opts => []}, + #{name => dbSizeInUse, fnum => 9, rnum => 10, + type => int64, occurrence => optional, opts => []}, + #{name => isLearner, fnum => 10, rnum => 11, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthEnableRequest'}, []}, + {{msg, 'Etcd.AuthDisableRequest'}, []}, + {{msg, 'Etcd.AuthenticateRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserAddRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGetRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserDeleteRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserChangePasswordRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGrantRoleRequest'}, + [#{name => user, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserRevokeRoleRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleAddRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGetRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserListRequest'}, []}, + {{msg, 'Etcd.AuthRoleListRequest'}, []}, + {{msg, 'Etcd.AuthRoleDeleteRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGrantPermissionRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleRevokePermissionRequest'}, + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthEnableResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthDisableResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthenticateResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => token, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGetResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthUserDeleteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserChangePasswordResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserGrantRoleResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthUserRevokeRoleResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleAddResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGetResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthRoleListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthUserListResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => users, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]}, + {{msg, 'Etcd.AuthRoleDeleteResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleGrantPermissionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.AuthRoleRevokePermissionResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HealthCheckRequest'}, + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'Etcd.HealthCheckResponse'}, + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LockRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LockResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.UnlockRequest'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.UnlockResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CampaignRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.CampaignResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leader, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]}, + {{msg, 'Etcd.LeaderKey'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => rev, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => lease, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaderRequest'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.LeaderResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ResignRequest'}, + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]}, + {{msg, 'Etcd.ResignResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ProclaimRequest'}, + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]}, + {{msg, 'Etcd.ProclaimResponse'}, + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorSet'}, + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FileDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]}, + {{msg, + 'google.protobuf.DescriptorProto.ExtensionRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.DescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.FieldDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.OneofDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.ServiceDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MethodDescriptorProto'}, + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]}, + {{msg, 'google.protobuf.FileOptions'}, + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.MessageOptions'}, + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.FieldOptions'}, + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumOptions'}, + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.EnumValueOptions'}, + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]}, + {{msg, 'google.protobuf.ServiceOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.MethodOptions'}, + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption.NamePart'}, + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]}, + {{msg, 'google.protobuf.UninterpretedOption'}, + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo.Location'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]}, + {{msg, 'google.protobuf.SourceCodeInfo'}, + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]}, + {{msg, 'google.protobuf.GeneratedCodeInfo'}, + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]}, + {{msg, 'mvccpb.KeyValue'}, + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]}, + {{msg, 'mvccpb.Event'}, + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.UserAddOptions'}, + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]}, + {{msg, 'authpb.User'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]}, + {{msg, 'authpb.Permission'}, + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]}, + {{msg, 'authpb.Role'}, + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]}]. + + +get_msg_names() -> + ['Etcd.ResponseHeader', 'Etcd.RangeRequest', + 'Etcd.RangeResponse', 'Etcd.PutRequest', + 'Etcd.PutResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.RequestOp', + 'Etcd.ResponseOp', 'Etcd.Compare', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.CompactionRequest', + 'Etcd.CompactionResponse', 'Etcd.HashRequest', + 'Etcd.HashKVRequest', 'Etcd.HashKVResponse', + 'Etcd.HashResponse', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.WatchRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchCancelRequest', + 'Etcd.WatchProgressRequest', 'Etcd.WatchResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseStatus', + 'Etcd.LeaseLeasesResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.MoveLeaderRequest', + 'Etcd.MoveLeaderResponse', 'Etcd.AlarmRequest', + 'Etcd.AlarmMember', 'Etcd.AlarmResponse', + 'Etcd.StatusRequest', 'Etcd.StatusResponse', + 'Etcd.AuthEnableRequest', 'Etcd.AuthDisableRequest', + 'Etcd.AuthenticateRequest', 'Etcd.AuthUserAddRequest', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthRoleAddRequest', 'Etcd.AuthRoleGetRequest', + 'Etcd.AuthUserListRequest', 'Etcd.AuthRoleListRequest', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthDisableResponse', + 'Etcd.AuthenticateResponse', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthRoleAddResponse', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleListResponse', + 'Etcd.AuthUserListResponse', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.HealthCheckRequest', 'Etcd.HealthCheckResponse', + 'Etcd.LockRequest', 'Etcd.LockResponse', + 'Etcd.UnlockRequest', 'Etcd.UnlockResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.LeaderKey', 'Etcd.LeaderRequest', + 'Etcd.LeaderResponse', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ProclaimRequest', + 'Etcd.ProclaimResponse', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo', 'mvccpb.KeyValue', + 'mvccpb.Event', 'authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role']. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> + ['Etcd.ResponseHeader', 'Etcd.RangeRequest', + 'Etcd.RangeResponse', 'Etcd.PutRequest', + 'Etcd.PutResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.RequestOp', + 'Etcd.ResponseOp', 'Etcd.Compare', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.CompactionRequest', + 'Etcd.CompactionResponse', 'Etcd.HashRequest', + 'Etcd.HashKVRequest', 'Etcd.HashKVResponse', + 'Etcd.HashResponse', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.WatchRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchCancelRequest', + 'Etcd.WatchProgressRequest', 'Etcd.WatchResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseStatus', + 'Etcd.LeaseLeasesResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.MoveLeaderRequest', + 'Etcd.MoveLeaderResponse', 'Etcd.AlarmRequest', + 'Etcd.AlarmMember', 'Etcd.AlarmResponse', + 'Etcd.StatusRequest', 'Etcd.StatusResponse', + 'Etcd.AuthEnableRequest', 'Etcd.AuthDisableRequest', + 'Etcd.AuthenticateRequest', 'Etcd.AuthUserAddRequest', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthRoleAddRequest', 'Etcd.AuthRoleGetRequest', + 'Etcd.AuthUserListRequest', 'Etcd.AuthRoleListRequest', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthDisableResponse', + 'Etcd.AuthenticateResponse', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthRoleAddResponse', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleListResponse', + 'Etcd.AuthUserListResponse', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.HealthCheckRequest', 'Etcd.HealthCheckResponse', + 'Etcd.LockRequest', 'Etcd.LockResponse', + 'Etcd.UnlockRequest', 'Etcd.UnlockResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.LeaderKey', 'Etcd.LeaderRequest', + 'Etcd.LeaderResponse', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ProclaimRequest', + 'Etcd.ProclaimResponse', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.DescriptorProto', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.FileOptions', + 'google.protobuf.MessageOptions', + 'google.protobuf.FieldOptions', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.ServiceOptions', + 'google.protobuf.MethodOptions', + 'google.protobuf.UninterpretedOption.NamePart', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.GeneratedCodeInfo', 'mvccpb.KeyValue', + 'mvccpb.Event', 'authpb.UserAddOptions', 'authpb.User', + 'authpb.Permission', 'authpb.Role']. + + +get_enum_names() -> + ['Etcd.RangeRequest.SortOrder', + 'Etcd.RangeRequest.SortTarget', + 'Etcd.Compare.CompareResult', + 'Etcd.Compare.CompareTarget', + 'Etcd.WatchCreateRequest.FilterType', 'Etcd.AlarmType', + 'Etcd.AlarmRequest.AlarmAction', + 'Etcd.HealthCheckResponse.ServingStatus', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FileOptions.OptimizeMode', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'mvccpb.Event.EventType', 'authpb.Permission.Type']. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +fetch_enum_def(EnumName) -> + case find_enum_def(EnumName) of + Es when is_list(Es) -> Es; + error -> erlang:error({no_such_enum, EnumName}) + end. + + +find_msg_def('Etcd.ResponseHeader') -> + [#{name => cluster_id, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => member_id, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => revision, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => raft_term, fnum => 4, rnum => 5, + type => uint64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.RangeRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => limit, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => revision, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => sort_order, fnum => 5, rnum => 6, + type => {enum, 'Etcd.RangeRequest.SortOrder'}, + occurrence => optional, opts => []}, + #{name => sort_target, fnum => 6, rnum => 7, + type => {enum, 'Etcd.RangeRequest.SortTarget'}, + occurrence => optional, opts => []}, + #{name => serializable, fnum => 7, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => keys_only, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}, + #{name => count_only, fnum => 9, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => min_mod_revision, fnum => 10, rnum => 11, + type => int64, occurrence => optional, opts => []}, + #{name => max_mod_revision, fnum => 11, rnum => 12, + type => int64, occurrence => optional, opts => []}, + #{name => min_create_revision, fnum => 12, rnum => 13, + type => int64, occurrence => optional, opts => []}, + #{name => max_create_revision, fnum => 13, rnum => 14, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.RangeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kvs, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}, + #{name => more, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => count, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.PutRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => ignore_value, fnum => 5, rnum => 6, + type => bool, occurrence => optional, opts => []}, + #{name => ignore_lease, fnum => 6, rnum => 7, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('Etcd.PutResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.DeleteRangeRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.DeleteRangeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => deleted, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => prev_kvs, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.RequestOp') -> + [#{name => request, rnum => 2, + fields => + [#{name => request_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutRequest'}, + occurrence => optional, opts => []}, + #{name => request_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeRequest'}, + occurrence => optional, opts => []}, + #{name => request_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnRequest'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.ResponseOp') -> + [#{name => response, rnum => 2, + fields => + [#{name => response_range, fnum => 1, rnum => 2, + type => {msg, 'Etcd.RangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_put, fnum => 2, rnum => 2, + type => {msg, 'Etcd.PutResponse'}, + occurrence => optional, opts => []}, + #{name => response_delete_range, fnum => 3, rnum => 2, + type => {msg, 'Etcd.DeleteRangeResponse'}, + occurrence => optional, opts => []}, + #{name => response_txn, fnum => 4, rnum => 2, + type => {msg, 'Etcd.TxnResponse'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.Compare') -> + [#{name => result, fnum => 1, rnum => 2, + type => {enum, 'Etcd.Compare.CompareResult'}, + occurrence => optional, opts => []}, + #{name => target, fnum => 2, rnum => 3, + type => {enum, 'Etcd.Compare.CompareTarget'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}, + #{name => target_union, rnum => 5, + fields => + [#{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 6, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => value, fnum => 7, rnum => 5, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 8, rnum => 5, type => int64, + occurrence => optional, opts => []}]}, + #{name => range_end, fnum => 64, rnum => 6, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('Etcd.TxnRequest') -> + [#{name => compare, fnum => 1, rnum => 2, + type => {msg, 'Etcd.Compare'}, occurrence => repeated, + opts => []}, + #{name => success, fnum => 2, rnum => 3, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}, + #{name => failure, fnum => 3, rnum => 4, + type => {msg, 'Etcd.RequestOp'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.TxnResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => succeeded, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => responses, fnum => 3, rnum => 4, + type => {msg, 'Etcd.ResponseOp'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.CompactionRequest') -> + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}, + #{name => physical, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CompactionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashRequest') -> []; +find_msg_def('Etcd.HashKVRequest') -> + [#{name => revision, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashKVResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HashResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => hash, fnum => 2, rnum => 3, type => uint32, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.SnapshotRequest') -> []; +find_msg_def('Etcd.SnapshotResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => remaining_bytes, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => blob, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchRequest') -> + [#{name => request_union, rnum => 2, + fields => + [#{name => create_request, fnum => 1, rnum => 2, + type => {msg, 'Etcd.WatchCreateRequest'}, + occurrence => optional, opts => []}, + #{name => cancel_request, fnum => 2, rnum => 2, + type => {msg, 'Etcd.WatchCancelRequest'}, + occurrence => optional, opts => []}, + #{name => progress_request, fnum => 3, rnum => 2, + type => {msg, 'Etcd.WatchProgressRequest'}, + occurrence => optional, opts => []}]}]; +find_msg_def('Etcd.WatchCreateRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 2, rnum => 3, + type => bytes, occurrence => optional, opts => []}, + #{name => start_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => progress_notify, fnum => 4, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => filters, fnum => 5, rnum => 6, + type => {enum, 'Etcd.WatchCreateRequest.FilterType'}, + occurrence => repeated, opts => [packed]}, + #{name => prev_kv, fnum => 6, rnum => 7, type => bool, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 7, rnum => 8, type => int64, + occurrence => optional, opts => []}, + #{name => fragment, fnum => 8, rnum => 9, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchCancelRequest') -> + [#{name => watch_id, fnum => 1, rnum => 2, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.WatchProgressRequest') -> []; +find_msg_def('Etcd.WatchResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => watch_id, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => created, fnum => 3, rnum => 4, type => bool, + occurrence => optional, opts => []}, + #{name => canceled, fnum => 4, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => compact_revision, fnum => 5, rnum => 6, + type => int64, occurrence => optional, opts => []}, + #{name => cancel_reason, fnum => 6, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => fragment, fnum => 7, rnum => 8, type => bool, + occurrence => optional, opts => []}, + #{name => events, fnum => 11, rnum => 9, + type => {msg, 'mvccpb.Event'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.LeaseGrantRequest') -> + [#{name => 'TTL', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseGrantResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => error, fnum => 4, rnum => 5, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseRevokeRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseRevokeResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseCheckpoint') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => remaining_TTL, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseCheckpointRequest') -> + [#{name => checkpoints, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaseCheckpoint'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.LeaseCheckpointResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseKeepAliveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseKeepAliveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseTimeToLiveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}, + #{name => keys, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseTimeToLiveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => 'ID', fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => 'TTL', fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => grantedTTL, fnum => 4, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => keys, fnum => 5, rnum => 6, type => bytes, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.LeaseLeasesRequest') -> []; +find_msg_def('Etcd.LeaseStatus') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaseLeasesResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leases, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaseStatus'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.Member') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => name, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => clientURLs, fnum => 4, rnum => 5, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 5, rnum => 6, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberAddRequest') -> + [#{name => peerURLs, fnum => 1, rnum => 2, + type => string, occurrence => repeated, opts => []}, + #{name => isLearner, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => member, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => optional, + opts => []}, + #{name => members, fnum => 3, rnum => 4, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberRemoveRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberRemoveResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberUpdateRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}, + #{name => peerURLs, fnum => 2, rnum => 3, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('Etcd.MemberUpdateResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberListRequest') -> []; +find_msg_def('Etcd.MemberListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.MemberPromoteRequest') -> + [#{name => 'ID', fnum => 1, rnum => 2, type => uint64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MemberPromoteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => members, fnum => 2, rnum => 3, + type => {msg, 'Etcd.Member'}, occurrence => repeated, + opts => []}]; +find_msg_def('Etcd.DefragmentRequest') -> []; +find_msg_def('Etcd.DefragmentResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.MoveLeaderRequest') -> + [#{name => targetID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}]; +find_msg_def('Etcd.MoveLeaderResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmRequest') -> + [#{name => action, fnum => 1, rnum => 2, + type => {enum, 'Etcd.AlarmRequest.AlarmAction'}, + occurrence => optional, opts => []}, + #{name => memberID, fnum => 2, rnum => 3, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 3, rnum => 4, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmMember') -> + [#{name => memberID, fnum => 1, rnum => 2, + type => uint64, occurrence => optional, opts => []}, + #{name => alarm, fnum => 2, rnum => 3, + type => {enum, 'Etcd.AlarmType'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AlarmResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => alarms, fnum => 2, rnum => 3, + type => {msg, 'Etcd.AlarmMember'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.StatusRequest') -> []; +find_msg_def('Etcd.StatusResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => version, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dbSize, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => leader, fnum => 4, rnum => 5, type => uint64, + occurrence => optional, opts => []}, + #{name => raftIndex, fnum => 5, rnum => 6, + type => uint64, occurrence => optional, opts => []}, + #{name => raftTerm, fnum => 6, rnum => 7, + type => uint64, occurrence => optional, opts => []}, + #{name => raftAppliedIndex, fnum => 7, rnum => 8, + type => uint64, occurrence => optional, opts => []}, + #{name => errors, fnum => 8, rnum => 9, type => string, + occurrence => repeated, opts => []}, + #{name => dbSizeInUse, fnum => 9, rnum => 10, + type => int64, occurrence => optional, opts => []}, + #{name => isLearner, fnum => 10, rnum => 11, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthEnableRequest') -> []; +find_msg_def('Etcd.AuthDisableRequest') -> []; +find_msg_def('Etcd.AuthenticateRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserAddRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGetRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserDeleteRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserChangePasswordRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGrantRoleRequest') -> + [#{name => user, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserRevokeRoleRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => role, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleAddRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGetRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserListRequest') -> []; +find_msg_def('Etcd.AuthRoleListRequest') -> []; +find_msg_def('Etcd.AuthRoleDeleteRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGrantPermissionRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleRevokePermissionRequest') -> + [#{name => role, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthEnableResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthDisableResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthenticateResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => token, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGetResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthUserDeleteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserChangePasswordResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserGrantRoleResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthUserRevokeRoleResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleAddResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGetResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => perm, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthRoleListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => roles, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthUserListResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => users, fnum => 2, rnum => 3, type => string, + occurrence => repeated, opts => []}]; +find_msg_def('Etcd.AuthRoleDeleteResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleGrantPermissionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.AuthRoleRevokePermissionResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.HealthCheckRequest') -> + [#{name => service, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}]; +find_msg_def('Etcd.HealthCheckResponse') -> + [#{name => status, fnum => 1, rnum => 2, + type => + {enum, 'Etcd.HealthCheckResponse.ServingStatus'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LockRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LockResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.UnlockRequest') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.UnlockResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CampaignRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 2, rnum => 3, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 3, rnum => 4, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.CampaignResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => leader, fnum => 2, rnum => 3, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]; +find_msg_def('Etcd.LeaderKey') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => rev, fnum => 3, rnum => 4, type => int64, + occurrence => optional, opts => []}, + #{name => lease, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaderRequest') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.LeaderResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ResignRequest') -> + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}]; +find_msg_def('Etcd.ResignResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ProclaimRequest') -> + [#{name => leader, fnum => 1, rnum => 2, + type => {msg, 'Etcd.LeaderKey'}, occurrence => optional, + opts => []}, + #{name => value, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}]; +find_msg_def('Etcd.ProclaimResponse') -> + [#{name => header, fnum => 1, rnum => 2, + type => {msg, 'Etcd.ResponseHeader'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorSet') -> + [#{name => file, fnum => 1, rnum => 2, + type => {msg, 'google.protobuf.FileDescriptorProto'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FileDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => package, fnum => 2, rnum => 3, type => string, + occurrence => optional, opts => []}, + #{name => dependency, fnum => 3, rnum => 4, + type => string, occurrence => repeated, opts => []}, + #{name => public_dependency, fnum => 10, rnum => 5, + type => int32, occurrence => repeated, opts => []}, + #{name => weak_dependency, fnum => 11, rnum => 6, + type => int32, occurrence => repeated, opts => []}, + #{name => message_type, fnum => 4, rnum => 7, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 5, rnum => 8, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => service, fnum => 6, rnum => 9, + type => {msg, 'google.protobuf.ServiceDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 7, rnum => 10, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FileOptions'}, + occurrence => optional, opts => []}, + #{name => source_code_info, fnum => 9, rnum => 12, + type => {msg, 'google.protobuf.SourceCodeInfo'}, + occurrence => optional, opts => []}, + #{name => syntax, fnum => 12, rnum => 13, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ExtensionRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto.ReservedRange') -> + [#{name => start, fnum => 1, rnum => 2, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.DescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => field, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension, fnum => 6, rnum => 4, + type => {msg, 'google.protobuf.FieldDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => nested_type, fnum => 3, rnum => 5, + type => {msg, 'google.protobuf.DescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => enum_type, fnum => 4, rnum => 6, + type => {msg, 'google.protobuf.EnumDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => extension_range, fnum => 5, rnum => 7, + type => + {msg, 'google.protobuf.DescriptorProto.ExtensionRange'}, + occurrence => repeated, opts => []}, + #{name => oneof_decl, fnum => 8, rnum => 8, + type => {msg, 'google.protobuf.OneofDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 7, rnum => 9, + type => {msg, 'google.protobuf.MessageOptions'}, + occurrence => optional, opts => []}, + #{name => reserved_range, fnum => 9, rnum => 10, + type => + {msg, 'google.protobuf.DescriptorProto.ReservedRange'}, + occurrence => repeated, opts => []}, + #{name => reserved_name, fnum => 10, rnum => 11, + type => string, occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.FieldDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 3, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => label, fnum => 4, rnum => 4, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Label'}, + occurrence => optional, opts => []}, + #{name => type, fnum => 5, rnum => 5, + type => + {enum, 'google.protobuf.FieldDescriptorProto.Type'}, + occurrence => optional, opts => []}, + #{name => type_name, fnum => 6, rnum => 6, + type => string, occurrence => optional, opts => []}, + #{name => extendee, fnum => 2, rnum => 7, + type => string, occurrence => optional, opts => []}, + #{name => default_value, fnum => 7, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => oneof_index, fnum => 9, rnum => 9, + type => int32, occurrence => optional, opts => []}, + #{name => json_name, fnum => 10, rnum => 10, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 8, rnum => 11, + type => {msg, 'google.protobuf.FieldOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.OneofDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => value, fnum => 2, rnum => 3, + type => + {msg, 'google.protobuf.EnumValueDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => number, fnum => 2, rnum => 3, type => int32, + occurrence => optional, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.EnumValueOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.ServiceDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => method, fnum => 2, rnum => 3, + type => {msg, 'google.protobuf.MethodDescriptorProto'}, + occurrence => repeated, opts => []}, + #{name => options, fnum => 3, rnum => 4, + type => {msg, 'google.protobuf.ServiceOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MethodDescriptorProto') -> + [#{name => name, fnum => 1, rnum => 2, type => string, + occurrence => optional, opts => []}, + #{name => input_type, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => output_type, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'google.protobuf.MethodOptions'}, + occurrence => optional, opts => []}, + #{name => client_streaming, fnum => 5, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => server_streaming, fnum => 6, rnum => 7, + type => bool, occurrence => optional, + opts => [{default, false}]}]; +find_msg_def('google.protobuf.FileOptions') -> + [#{name => java_package, fnum => 1, rnum => 2, + type => string, occurrence => optional, opts => []}, + #{name => java_outer_classname, fnum => 8, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => java_multiple_files, fnum => 10, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generate_equals_and_hash, fnum => 20, + rnum => 5, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_string_check_utf8, fnum => 27, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => optimize_for, fnum => 9, rnum => 7, + type => + {enum, 'google.protobuf.FileOptions.OptimizeMode'}, + occurrence => optional, opts => [{default, 'SPEED'}]}, + #{name => go_package, fnum => 11, rnum => 8, + type => string, occurrence => optional, opts => []}, + #{name => cc_generic_services, fnum => 16, rnum => 9, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => java_generic_services, fnum => 17, rnum => 10, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => py_generic_services, fnum => 18, rnum => 11, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 23, rnum => 12, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => cc_enable_arenas, fnum => 31, rnum => 13, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => objc_class_prefix, fnum => 36, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => csharp_namespace, fnum => 37, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => javanano_use_deprecated_package, fnum => 38, + rnum => 16, type => bool, occurrence => optional, + opts => [deprecated]}, + #{name => uninterpreted_option, fnum => 999, rnum => 17, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters_all, fnum => 63001, + rnum => 18, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_enum_prefix_all, fnum => 63002, + rnum => 19, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_stringer_all, fnum => 63003, + rnum => 20, type => bool, occurrence => optional, + opts => []}, + #{name => verbose_equal_all, fnum => 63004, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => face_all, fnum => 63005, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => gostring_all, fnum => 63006, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => populate_all, fnum => 63007, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => stringer_all, fnum => 63008, rnum => 25, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone_all, fnum => 63009, rnum => 26, + type => bool, occurrence => optional, opts => []}, + #{name => equal_all, fnum => 63013, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => description_all, fnum => 63014, rnum => 28, + type => bool, occurrence => optional, opts => []}, + #{name => testgen_all, fnum => 63015, rnum => 29, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen_all, fnum => 63016, rnum => 30, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler_all, fnum => 63017, rnum => 31, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler_all, fnum => 63018, rnum => 32, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler_all, fnum => 63019, + rnum => 33, type => bool, occurrence => optional, + opts => []}, + #{name => sizer_all, fnum => 63020, rnum => 34, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer_all, fnum => 63021, + rnum => 35, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer_all, fnum => 63022, rnum => 36, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler_all, fnum => 63023, + rnum => 37, type => bool, occurrence => optional, + opts => []}, + #{name => unsafe_unmarshaler_all, fnum => 63024, + rnum => 38, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_extensions_map_all, fnum => 63025, + rnum => 39, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized_all, fnum => 63026, + rnum => 40, type => bool, occurrence => optional, + opts => []}, + #{name => gogoproto_import, fnum => 63027, rnum => 41, + type => bool, occurrence => optional, opts => []}, + #{name => protosizer_all, fnum => 63028, rnum => 42, + type => bool, occurrence => optional, opts => []}, + #{name => compare_all, fnum => 63029, rnum => 43, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.MessageOptions') -> + [#{name => message_set_wire_format, fnum => 1, + rnum => 2, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => no_standard_descriptor_accessor, fnum => 2, + rnum => 3, type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 4, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => map_entry, fnum => 7, rnum => 5, type => bool, + occurrence => optional, opts => []}, + #{name => uninterpreted_option, fnum => 999, rnum => 6, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_getters, fnum => 64001, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_stringer, fnum => 64003, rnum => 8, + type => bool, occurrence => optional, opts => []}, + #{name => verbose_equal, fnum => 64004, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => face, fnum => 64005, rnum => 10, type => bool, + occurrence => optional, opts => []}, + #{name => gostring, fnum => 64006, rnum => 11, + type => bool, occurrence => optional, opts => []}, + #{name => populate, fnum => 64007, rnum => 12, + type => bool, occurrence => optional, opts => []}, + #{name => stringer, fnum => 67008, rnum => 13, + type => bool, occurrence => optional, opts => []}, + #{name => onlyone, fnum => 64009, rnum => 14, + type => bool, occurrence => optional, opts => []}, + #{name => equal, fnum => 64013, rnum => 15, + type => bool, occurrence => optional, opts => []}, + #{name => description, fnum => 64014, rnum => 16, + type => bool, occurrence => optional, opts => []}, + #{name => testgen, fnum => 64015, rnum => 17, + type => bool, occurrence => optional, opts => []}, + #{name => benchgen, fnum => 64016, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => marshaler, fnum => 64017, rnum => 19, + type => bool, occurrence => optional, opts => []}, + #{name => unmarshaler, fnum => 64018, rnum => 20, + type => bool, occurrence => optional, opts => []}, + #{name => stable_marshaler, fnum => 64019, rnum => 21, + type => bool, occurrence => optional, opts => []}, + #{name => sizer, fnum => 64020, rnum => 22, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_marshaler, fnum => 64023, rnum => 23, + type => bool, occurrence => optional, opts => []}, + #{name => unsafe_unmarshaler, fnum => 64024, rnum => 24, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_extensions_map, fnum => 64025, + rnum => 25, type => bool, occurrence => optional, + opts => []}, + #{name => goproto_unrecognized, fnum => 64026, + rnum => 26, type => bool, occurrence => optional, + opts => []}, + #{name => protosizer, fnum => 64028, rnum => 27, + type => bool, occurrence => optional, opts => []}, + #{name => compare, fnum => 64029, rnum => 28, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.FieldOptions') -> + [#{name => ctype, fnum => 1, rnum => 2, + type => {enum, 'google.protobuf.FieldOptions.CType'}, + occurrence => optional, opts => [{default, 'STRING'}]}, + #{name => packed, fnum => 2, rnum => 3, type => bool, + occurrence => optional, opts => []}, + #{name => jstype, fnum => 6, rnum => 4, + type => {enum, 'google.protobuf.FieldOptions.JSType'}, + occurrence => optional, + opts => [{default, 'JS_NORMAL'}]}, + #{name => lazy, fnum => 5, rnum => 5, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => deprecated, fnum => 3, rnum => 6, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => weak, fnum => 10, rnum => 7, type => bool, + occurrence => optional, opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 8, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => nullable, fnum => 65001, rnum => 9, + type => bool, occurrence => optional, opts => []}, + #{name => embed, fnum => 65002, rnum => 10, + type => bool, occurrence => optional, opts => []}, + #{name => customtype, fnum => 65003, rnum => 11, + type => string, occurrence => optional, opts => []}, + #{name => customname, fnum => 65004, rnum => 12, + type => string, occurrence => optional, opts => []}, + #{name => jsontag, fnum => 65005, rnum => 13, + type => string, occurrence => optional, opts => []}, + #{name => moretags, fnum => 65006, rnum => 14, + type => string, occurrence => optional, opts => []}, + #{name => casttype, fnum => 65007, rnum => 15, + type => string, occurrence => optional, opts => []}, + #{name => castkey, fnum => 65008, rnum => 16, + type => string, occurrence => optional, opts => []}, + #{name => castvalue, fnum => 65009, rnum => 17, + type => string, occurrence => optional, opts => []}, + #{name => stdtime, fnum => 65010, rnum => 18, + type => bool, occurrence => optional, opts => []}, + #{name => stdduration, fnum => 65011, rnum => 19, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumOptions') -> + [#{name => allow_alias, fnum => 2, rnum => 2, + type => bool, occurrence => optional, opts => []}, + #{name => deprecated, fnum => 3, rnum => 3, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 4, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => goproto_enum_prefix, fnum => 62001, rnum => 5, + type => bool, occurrence => optional, opts => []}, + #{name => goproto_enum_stringer, fnum => 62021, + rnum => 6, type => bool, occurrence => optional, + opts => []}, + #{name => enum_stringer, fnum => 62022, rnum => 7, + type => bool, occurrence => optional, opts => []}, + #{name => enum_customname, fnum => 62023, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.EnumValueOptions') -> + [#{name => deprecated, fnum => 1, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}, + #{name => enumvalue_customname, fnum => 66001, + rnum => 4, type => string, occurrence => optional, + opts => []}]; +find_msg_def('google.protobuf.ServiceOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.MethodOptions') -> + [#{name => deprecated, fnum => 33, rnum => 2, + type => bool, occurrence => optional, + opts => [{default, false}]}, + #{name => uninterpreted_option, fnum => 999, rnum => 3, + type => {msg, 'google.protobuf.UninterpretedOption'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption.NamePart') -> + [#{name => name_part, fnum => 1, rnum => 2, + type => string, occurrence => required, opts => []}, + #{name => is_extension, fnum => 2, rnum => 3, + type => bool, occurrence => required, opts => []}]; +find_msg_def('google.protobuf.UninterpretedOption') -> + [#{name => name, fnum => 2, rnum => 2, + type => + {msg, 'google.protobuf.UninterpretedOption.NamePart'}, + occurrence => repeated, opts => []}, + #{name => identifier_value, fnum => 3, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => positive_int_value, fnum => 4, rnum => 4, + type => uint64, occurrence => optional, opts => []}, + #{name => negative_int_value, fnum => 5, rnum => 5, + type => int64, occurrence => optional, opts => []}, + #{name => double_value, fnum => 6, rnum => 6, + type => double, occurrence => optional, opts => []}, + #{name => string_value, fnum => 7, rnum => 7, + type => bytes, occurrence => optional, opts => []}, + #{name => aggregate_value, fnum => 8, rnum => 8, + type => string, occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo.Location') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => span, fnum => 2, rnum => 3, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => leading_comments, fnum => 3, rnum => 4, + type => string, occurrence => optional, opts => []}, + #{name => trailing_comments, fnum => 4, rnum => 5, + type => string, occurrence => optional, opts => []}, + #{name => leading_detached_comments, fnum => 6, + rnum => 6, type => string, occurrence => repeated, + opts => []}]; +find_msg_def('google.protobuf.SourceCodeInfo') -> + [#{name => location, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.SourceCodeInfo.Location'}, + occurrence => repeated, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo.Annotation') -> + [#{name => path, fnum => 1, rnum => 2, type => int32, + occurrence => repeated, opts => [packed]}, + #{name => source_file, fnum => 2, rnum => 3, + type => string, occurrence => optional, opts => []}, + #{name => 'begin', fnum => 3, rnum => 4, type => int32, + occurrence => optional, opts => []}, + #{name => 'end', fnum => 4, rnum => 5, type => int32, + occurrence => optional, opts => []}]; +find_msg_def('google.protobuf.GeneratedCodeInfo') -> + [#{name => annotation, fnum => 1, rnum => 2, + type => + {msg, 'google.protobuf.GeneratedCodeInfo.Annotation'}, + occurrence => repeated, opts => []}]; +find_msg_def('mvccpb.KeyValue') -> + [#{name => key, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => create_revision, fnum => 2, rnum => 3, + type => int64, occurrence => optional, opts => []}, + #{name => mod_revision, fnum => 3, rnum => 4, + type => int64, occurrence => optional, opts => []}, + #{name => version, fnum => 4, rnum => 5, type => int64, + occurrence => optional, opts => []}, + #{name => value, fnum => 5, rnum => 6, type => bytes, + occurrence => optional, opts => []}, + #{name => lease, fnum => 6, rnum => 7, type => int64, + occurrence => optional, opts => []}]; +find_msg_def('mvccpb.Event') -> + [#{name => type, fnum => 1, rnum => 2, + type => {enum, 'mvccpb.Event.EventType'}, + occurrence => optional, opts => []}, + #{name => kv, fnum => 2, rnum => 3, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}, + #{name => prev_kv, fnum => 3, rnum => 4, + type => {msg, 'mvccpb.KeyValue'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.UserAddOptions') -> + [#{name => no_password, fnum => 1, rnum => 2, + type => bool, occurrence => optional, opts => []}]; +find_msg_def('authpb.User') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => password, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => roles, fnum => 3, rnum => 4, type => string, + occurrence => repeated, opts => []}, + #{name => options, fnum => 4, rnum => 5, + type => {msg, 'authpb.UserAddOptions'}, + occurrence => optional, opts => []}]; +find_msg_def('authpb.Permission') -> + [#{name => permType, fnum => 1, rnum => 2, + type => {enum, 'authpb.Permission.Type'}, + occurrence => optional, opts => []}, + #{name => key, fnum => 2, rnum => 3, type => bytes, + occurrence => optional, opts => []}, + #{name => range_end, fnum => 3, rnum => 4, + type => bytes, occurrence => optional, opts => []}]; +find_msg_def('authpb.Role') -> + [#{name => name, fnum => 1, rnum => 2, type => bytes, + occurrence => optional, opts => []}, + #{name => keyPermission, fnum => 2, rnum => 3, + type => {msg, 'authpb.Permission'}, + occurrence => repeated, opts => []}]; +find_msg_def(_) -> error. + + +find_enum_def('Etcd.RangeRequest.SortOrder') -> + [{'NONE', 0}, {'ASCEND', 1}, {'DESCEND', 2}]; +find_enum_def('Etcd.RangeRequest.SortTarget') -> + [{'KEY', 0}, {'VERSION', 1}, {'CREATE', 2}, {'MOD', 3}, + {'VALUE', 4}]; +find_enum_def('Etcd.Compare.CompareResult') -> + [{'EQUAL', 0}, {'GREATER', 1}, {'LESS', 2}, + {'NOT_EQUAL', 3}]; +find_enum_def('Etcd.Compare.CompareTarget') -> + [{'VERSION', 0}, {'CREATE', 1}, {'MOD', 2}, + {'VALUE', 3}, {'LEASE', 4}]; +find_enum_def('Etcd.WatchCreateRequest.FilterType') -> + [{'NOPUT', 0}, {'NODELETE', 1}]; +find_enum_def('Etcd.AlarmType') -> + [{'NONE', 0}, {'NOSPACE', 1}, {'CORRUPT', 2}]; +find_enum_def('Etcd.AlarmRequest.AlarmAction') -> + [{'GET', 0}, {'ACTIVATE', 1}, {'DEACTIVATE', 2}]; +find_enum_def('Etcd.HealthCheckResponse.ServingStatus') -> + [{'UNKNOWN', 0}, {'SERVING', 1}, {'NOT_SERVING', 2}, + {'SERVICE_UNKNOWN', 3}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Type') -> + [{'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}]; +find_enum_def('google.protobuf.FieldDescriptorProto.Label') -> + [{'LABEL_OPTIONAL', 1}, {'LABEL_REQUIRED', 2}, + {'LABEL_REPEATED', 3}]; +find_enum_def('google.protobuf.FileOptions.OptimizeMode') -> + [{'SPEED', 1}, {'CODE_SIZE', 2}, {'LITE_RUNTIME', 3}]; +find_enum_def('google.protobuf.FieldOptions.CType') -> + [{'STRING', 0}, {'CORD', 1}, {'STRING_PIECE', 2}]; +find_enum_def('google.protobuf.FieldOptions.JSType') -> + [{'JS_NORMAL', 0}, {'JS_STRING', 1}, {'JS_NUMBER', 2}]; +find_enum_def('mvccpb.Event.EventType') -> + [{'PUT', 0}, {'DELETE', 1}]; +find_enum_def('authpb.Permission.Type') -> + [{'READ', 0}, {'WRITE', 1}, {'READWRITE', 2}]; +find_enum_def(_) -> error. + + +enum_symbol_by_value('Etcd.RangeRequest.SortOrder', + Value) -> + 'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(Value); +enum_symbol_by_value('Etcd.RangeRequest.SortTarget', + Value) -> + 'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(Value); +enum_symbol_by_value('Etcd.Compare.CompareResult', + Value) -> + 'enum_symbol_by_value_Etcd.Compare.CompareResult'(Value); +enum_symbol_by_value('Etcd.Compare.CompareTarget', + Value) -> + 'enum_symbol_by_value_Etcd.Compare.CompareTarget'(Value); +enum_symbol_by_value('Etcd.WatchCreateRequest.FilterType', + Value) -> + 'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(Value); +enum_symbol_by_value('Etcd.AlarmType', Value) -> + 'enum_symbol_by_value_Etcd.AlarmType'(Value); +enum_symbol_by_value('Etcd.AlarmRequest.AlarmAction', + Value) -> + 'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(Value); +enum_symbol_by_value('Etcd.HealthCheckResponse.ServingStatus', + Value) -> + 'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Type', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(Value); +enum_symbol_by_value('google.protobuf.FieldDescriptorProto.Label', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(Value); +enum_symbol_by_value('google.protobuf.FileOptions.OptimizeMode', + Value) -> + 'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.CType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(Value); +enum_symbol_by_value('google.protobuf.FieldOptions.JSType', + Value) -> + 'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(Value); +enum_symbol_by_value('mvccpb.Event.EventType', Value) -> + 'enum_symbol_by_value_mvccpb.Event.EventType'(Value); +enum_symbol_by_value('authpb.Permission.Type', Value) -> + 'enum_symbol_by_value_authpb.Permission.Type'(Value). + + +enum_value_by_symbol('Etcd.RangeRequest.SortOrder', + Sym) -> + 'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'(Sym); +enum_value_by_symbol('Etcd.RangeRequest.SortTarget', + Sym) -> + 'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'(Sym); +enum_value_by_symbol('Etcd.Compare.CompareResult', + Sym) -> + 'enum_value_by_symbol_Etcd.Compare.CompareResult'(Sym); +enum_value_by_symbol('Etcd.Compare.CompareTarget', + Sym) -> + 'enum_value_by_symbol_Etcd.Compare.CompareTarget'(Sym); +enum_value_by_symbol('Etcd.WatchCreateRequest.FilterType', + Sym) -> + 'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'(Sym); +enum_value_by_symbol('Etcd.AlarmType', Sym) -> + 'enum_value_by_symbol_Etcd.AlarmType'(Sym); +enum_value_by_symbol('Etcd.AlarmRequest.AlarmAction', + Sym) -> + 'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'(Sym); +enum_value_by_symbol('Etcd.HealthCheckResponse.ServingStatus', + Sym) -> + 'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Type', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'(Sym); +enum_value_by_symbol('google.protobuf.FieldDescriptorProto.Label', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'(Sym); +enum_value_by_symbol('google.protobuf.FileOptions.OptimizeMode', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.CType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.CType'(Sym); +enum_value_by_symbol('google.protobuf.FieldOptions.JSType', + Sym) -> + 'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'(Sym); +enum_value_by_symbol('mvccpb.Event.EventType', Sym) -> + 'enum_value_by_symbol_mvccpb.Event.EventType'(Sym); +enum_value_by_symbol('authpb.Permission.Type', Sym) -> + 'enum_value_by_symbol_authpb.Permission.Type'(Sym). + + +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(0) -> + 'NONE'; +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(1) -> + 'ASCEND'; +'enum_symbol_by_value_Etcd.RangeRequest.SortOrder'(2) -> + 'DESCEND'. + + +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('NONE') -> + 0; +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('ASCEND') -> + 1; +'enum_value_by_symbol_Etcd.RangeRequest.SortOrder'('DESCEND') -> + 2. + +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(0) -> + 'KEY'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(1) -> + 'VERSION'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(2) -> + 'CREATE'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(3) -> + 'MOD'; +'enum_symbol_by_value_Etcd.RangeRequest.SortTarget'(4) -> + 'VALUE'. + + +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('KEY') -> + 0; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('VERSION') -> + 1; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('CREATE') -> + 2; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('MOD') -> + 3; +'enum_value_by_symbol_Etcd.RangeRequest.SortTarget'('VALUE') -> + 4. + +'enum_symbol_by_value_Etcd.Compare.CompareResult'(0) -> + 'EQUAL'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(1) -> + 'GREATER'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(2) -> + 'LESS'; +'enum_symbol_by_value_Etcd.Compare.CompareResult'(3) -> + 'NOT_EQUAL'. + + +'enum_value_by_symbol_Etcd.Compare.CompareResult'('EQUAL') -> + 0; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('GREATER') -> + 1; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('LESS') -> + 2; +'enum_value_by_symbol_Etcd.Compare.CompareResult'('NOT_EQUAL') -> + 3. + +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(0) -> + 'VERSION'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(1) -> + 'CREATE'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(2) -> + 'MOD'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(3) -> + 'VALUE'; +'enum_symbol_by_value_Etcd.Compare.CompareTarget'(4) -> + 'LEASE'. + + +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('VERSION') -> + 0; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('CREATE') -> + 1; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('MOD') -> + 2; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('VALUE') -> + 3; +'enum_value_by_symbol_Etcd.Compare.CompareTarget'('LEASE') -> + 4. + +'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(0) -> + 'NOPUT'; +'enum_symbol_by_value_Etcd.WatchCreateRequest.FilterType'(1) -> + 'NODELETE'. + + +'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'('NOPUT') -> + 0; +'enum_value_by_symbol_Etcd.WatchCreateRequest.FilterType'('NODELETE') -> + 1. + +'enum_symbol_by_value_Etcd.AlarmType'(0) -> 'NONE'; +'enum_symbol_by_value_Etcd.AlarmType'(1) -> 'NOSPACE'; +'enum_symbol_by_value_Etcd.AlarmType'(2) -> 'CORRUPT'. + + +'enum_value_by_symbol_Etcd.AlarmType'('NONE') -> 0; +'enum_value_by_symbol_Etcd.AlarmType'('NOSPACE') -> 1; +'enum_value_by_symbol_Etcd.AlarmType'('CORRUPT') -> 2. + +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(0) -> + 'GET'; +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(1) -> + 'ACTIVATE'; +'enum_symbol_by_value_Etcd.AlarmRequest.AlarmAction'(2) -> + 'DEACTIVATE'. + + +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('GET') -> + 0; +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('ACTIVATE') -> + 1; +'enum_value_by_symbol_Etcd.AlarmRequest.AlarmAction'('DEACTIVATE') -> + 2. + +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(0) -> + 'UNKNOWN'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(1) -> + 'SERVING'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(2) -> + 'NOT_SERVING'; +'enum_symbol_by_value_Etcd.HealthCheckResponse.ServingStatus'(3) -> + 'SERVICE_UNKNOWN'. + + +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('UNKNOWN') -> + 0; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('SERVING') -> + 1; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('NOT_SERVING') -> + 2; +'enum_value_by_symbol_Etcd.HealthCheckResponse.ServingStatus'('SERVICE_UNKNOWN') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(1) -> + 'TYPE_DOUBLE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(2) -> + 'TYPE_FLOAT'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(3) -> + 'TYPE_INT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(4) -> + 'TYPE_UINT64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(5) -> + 'TYPE_INT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(6) -> + 'TYPE_FIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(7) -> + 'TYPE_FIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(8) -> + 'TYPE_BOOL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(9) -> + 'TYPE_STRING'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(10) -> + 'TYPE_GROUP'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(11) -> + 'TYPE_MESSAGE'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(12) -> + 'TYPE_BYTES'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(13) -> + 'TYPE_UINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(14) -> + 'TYPE_ENUM'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(15) -> + 'TYPE_SFIXED32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(16) -> + 'TYPE_SFIXED64'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(17) -> + 'TYPE_SINT32'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Type'(18) -> + 'TYPE_SINT64'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_DOUBLE') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FLOAT') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT64') -> + 3; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT64') -> + 4; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_INT32') -> + 5; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED64') -> + 6; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_FIXED32') -> + 7; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BOOL') -> + 8; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_STRING') -> + 9; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_GROUP') -> + 10; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_MESSAGE') -> + 11; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_BYTES') -> + 12; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_UINT32') -> + 13; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_ENUM') -> + 14; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED32') -> + 15; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SFIXED64') -> + 16; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT32') -> + 17; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Type'('TYPE_SINT64') -> + 18. + +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(1) -> + 'LABEL_OPTIONAL'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(2) -> + 'LABEL_REQUIRED'; +'enum_symbol_by_value_google.protobuf.FieldDescriptorProto.Label'(3) -> + 'LABEL_REPEATED'. + + +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_OPTIONAL') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REQUIRED') -> + 2; +'enum_value_by_symbol_google.protobuf.FieldDescriptorProto.Label'('LABEL_REPEATED') -> + 3. + +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(1) -> + 'SPEED'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(2) -> + 'CODE_SIZE'; +'enum_symbol_by_value_google.protobuf.FileOptions.OptimizeMode'(3) -> + 'LITE_RUNTIME'. + + +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('SPEED') -> + 1; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('CODE_SIZE') -> + 2; +'enum_value_by_symbol_google.protobuf.FileOptions.OptimizeMode'('LITE_RUNTIME') -> + 3. + +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(0) -> + 'STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(1) -> + 'CORD'; +'enum_symbol_by_value_google.protobuf.FieldOptions.CType'(2) -> + 'STRING_PIECE'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('CORD') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.CType'('STRING_PIECE') -> + 2. + +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(0) -> + 'JS_NORMAL'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(1) -> + 'JS_STRING'; +'enum_symbol_by_value_google.protobuf.FieldOptions.JSType'(2) -> + 'JS_NUMBER'. + + +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NORMAL') -> + 0; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_STRING') -> + 1; +'enum_value_by_symbol_google.protobuf.FieldOptions.JSType'('JS_NUMBER') -> + 2. + +'enum_symbol_by_value_mvccpb.Event.EventType'(0) -> + 'PUT'; +'enum_symbol_by_value_mvccpb.Event.EventType'(1) -> + 'DELETE'. + + +'enum_value_by_symbol_mvccpb.Event.EventType'('PUT') -> + 0; +'enum_value_by_symbol_mvccpb.Event.EventType'('DELETE') -> + 1. + +'enum_symbol_by_value_authpb.Permission.Type'(0) -> + 'READ'; +'enum_symbol_by_value_authpb.Permission.Type'(1) -> + 'WRITE'; +'enum_symbol_by_value_authpb.Permission.Type'(2) -> + 'READWRITE'. + + +'enum_value_by_symbol_authpb.Permission.Type'('READ') -> + 0; +'enum_value_by_symbol_authpb.Permission.Type'('WRITE') -> + 1; +'enum_value_by_symbol_authpb.Permission.Type'('READWRITE') -> + 2. + + +get_service_names() -> + ['Etcd.KV', 'Etcd.Watch', 'Etcd.Lease', 'Etcd.Cluster', + 'Etcd.Maintenance', 'Etcd.Auth', 'Etcd.Health', + 'Etcd.Lock', 'Etcd.Election']. + + +get_service_def('Etcd.KV') -> + {{service, 'Etcd.KV'}, + [#{name => 'Range', input => 'Etcd.RangeRequest', + output => 'Etcd.RangeResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Put', input => 'Etcd.PutRequest', + output => 'Etcd.PutResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'DeleteRange', + input => 'Etcd.DeleteRangeRequest', + output => 'Etcd.DeleteRangeResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Txn', input => 'Etcd.TxnRequest', + output => 'Etcd.TxnResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Compact', input => 'Etcd.CompactionRequest', + output => 'Etcd.CompactionResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Watch') -> + {{service, 'Etcd.Watch'}, + [#{name => 'Watch', input => 'Etcd.WatchRequest', + output => 'Etcd.WatchResponse', input_stream => true, + output_stream => true, opts => []}]}; +get_service_def('Etcd.Lease') -> + {{service, 'Etcd.Lease'}, + [#{name => 'LeaseGrant', + input => 'Etcd.LeaseGrantRequest', + output => 'Etcd.LeaseGrantResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseRevoke', + input => 'Etcd.LeaseRevokeRequest', + output => 'Etcd.LeaseRevokeResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseKeepAlive', + input => 'Etcd.LeaseKeepAliveRequest', + output => 'Etcd.LeaseKeepAliveResponse', + input_stream => true, output_stream => true, + opts => []}, + #{name => 'LeaseTimeToLive', + input => 'Etcd.LeaseTimeToLiveRequest', + output => 'Etcd.LeaseTimeToLiveResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'LeaseLeases', + input => 'Etcd.LeaseLeasesRequest', + output => 'Etcd.LeaseLeasesResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Cluster') -> + {{service, 'Etcd.Cluster'}, + [#{name => 'MemberAdd', + input => 'Etcd.MemberAddRequest', + output => 'Etcd.MemberAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberRemove', + input => 'Etcd.MemberRemoveRequest', + output => 'Etcd.MemberRemoveResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberUpdate', + input => 'Etcd.MemberUpdateRequest', + output => 'Etcd.MemberUpdateResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberList', + input => 'Etcd.MemberListRequest', + output => 'Etcd.MemberListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'MemberPromote', + input => 'Etcd.MemberPromoteRequest', + output => 'Etcd.MemberPromoteResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Maintenance') -> + {{service, 'Etcd.Maintenance'}, + [#{name => 'Alarm', input => 'Etcd.AlarmRequest', + output => 'Etcd.AlarmResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Status', input => 'Etcd.StatusRequest', + output => 'Etcd.StatusResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Defragment', + input => 'Etcd.DefragmentRequest', + output => 'Etcd.DefragmentResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Hash', input => 'Etcd.HashRequest', + output => 'Etcd.HashResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'HashKV', input => 'Etcd.HashKVRequest', + output => 'Etcd.HashKVResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Snapshot', input => 'Etcd.SnapshotRequest', + output => 'Etcd.SnapshotResponse', + input_stream => false, output_stream => true, + opts => []}, + #{name => 'MoveLeader', + input => 'Etcd.MoveLeaderRequest', + output => 'Etcd.MoveLeaderResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Auth') -> + {{service, 'Etcd.Auth'}, + [#{name => 'AuthEnable', + input => 'Etcd.AuthEnableRequest', + output => 'Etcd.AuthEnableResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'AuthDisable', + input => 'Etcd.AuthDisableRequest', + output => 'Etcd.AuthDisableResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Authenticate', + input => 'Etcd.AuthenticateRequest', + output => 'Etcd.AuthenticateResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserAdd', input => 'Etcd.AuthUserAddRequest', + output => 'Etcd.AuthUserAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserGet', input => 'Etcd.AuthUserGetRequest', + output => 'Etcd.AuthUserGetResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserList', + input => 'Etcd.AuthUserListRequest', + output => 'Etcd.AuthUserListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserDelete', + input => 'Etcd.AuthUserDeleteRequest', + output => 'Etcd.AuthUserDeleteResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserChangePassword', + input => 'Etcd.AuthUserChangePasswordRequest', + output => 'Etcd.AuthUserChangePasswordResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserGrantRole', + input => 'Etcd.AuthUserGrantRoleRequest', + output => 'Etcd.AuthUserGrantRoleResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'UserRevokeRole', + input => 'Etcd.AuthUserRevokeRoleRequest', + output => 'Etcd.AuthUserRevokeRoleResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleAdd', input => 'Etcd.AuthRoleAddRequest', + output => 'Etcd.AuthRoleAddResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleGet', input => 'Etcd.AuthRoleGetRequest', + output => 'Etcd.AuthRoleGetResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleList', + input => 'Etcd.AuthRoleListRequest', + output => 'Etcd.AuthRoleListResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleDelete', + input => 'Etcd.AuthRoleDeleteRequest', + output => 'Etcd.AuthRoleDeleteResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleGrantPermission', + input => 'Etcd.AuthRoleGrantPermissionRequest', + output => 'Etcd.AuthRoleGrantPermissionResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'RoleRevokePermission', + input => 'Etcd.AuthRoleRevokePermissionRequest', + output => 'Etcd.AuthRoleRevokePermissionResponse', + input_stream => false, output_stream => false, + opts => []}]}; +get_service_def('Etcd.Health') -> + {{service, 'Etcd.Health'}, + [#{name => 'Check', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Watch', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}]}; +get_service_def('Etcd.Lock') -> + {{service, 'Etcd.Lock'}, + [#{name => 'Lock', input => 'Etcd.LockRequest', + output => 'Etcd.LockResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Unlock', input => 'Etcd.UnlockRequest', + output => 'Etcd.UnlockResponse', input_stream => false, + output_stream => false, opts => []}]}; +get_service_def('Etcd.Election') -> + {{service, 'Etcd.Election'}, + [#{name => 'Campaign', input => 'Etcd.CampaignRequest', + output => 'Etcd.CampaignResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Proclaim', input => 'Etcd.ProclaimRequest', + output => 'Etcd.ProclaimResponse', + input_stream => false, output_stream => false, + opts => []}, + #{name => 'Leader', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => false, + output_stream => false, opts => []}, + #{name => 'Observe', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => true, + output_stream => true, opts => []}, + #{name => 'Resign', input => 'Etcd.ResignRequest', + output => 'Etcd.ResignResponse', input_stream => false, + output_stream => false, opts => []}]}; +get_service_def(_) -> error. + + +get_rpc_names('Etcd.KV') -> + ['Range', 'Put', 'DeleteRange', 'Txn', 'Compact']; +get_rpc_names('Etcd.Watch') -> ['Watch']; +get_rpc_names('Etcd.Lease') -> + ['LeaseGrant', 'LeaseRevoke', 'LeaseKeepAlive', + 'LeaseTimeToLive', 'LeaseLeases']; +get_rpc_names('Etcd.Cluster') -> + ['MemberAdd', 'MemberRemove', 'MemberUpdate', + 'MemberList', 'MemberPromote']; +get_rpc_names('Etcd.Maintenance') -> + ['Alarm', 'Status', 'Defragment', 'Hash', 'HashKV', + 'Snapshot', 'MoveLeader']; +get_rpc_names('Etcd.Auth') -> + ['AuthEnable', 'AuthDisable', 'Authenticate', 'UserAdd', + 'UserGet', 'UserList', 'UserDelete', + 'UserChangePassword', 'UserGrantRole', 'UserRevokeRole', + 'RoleAdd', 'RoleGet', 'RoleList', 'RoleDelete', + 'RoleGrantPermission', 'RoleRevokePermission']; +get_rpc_names('Etcd.Health') -> ['Check', 'Watch']; +get_rpc_names('Etcd.Lock') -> ['Lock', 'Unlock']; +get_rpc_names('Etcd.Election') -> + ['Campaign', 'Proclaim', 'Leader', 'Observe', 'Resign']; +get_rpc_names(_) -> error. + + +find_rpc_def('Etcd.KV', RpcName) -> + 'find_rpc_def_Etcd.KV'(RpcName); +find_rpc_def('Etcd.Watch', RpcName) -> + 'find_rpc_def_Etcd.Watch'(RpcName); +find_rpc_def('Etcd.Lease', RpcName) -> + 'find_rpc_def_Etcd.Lease'(RpcName); +find_rpc_def('Etcd.Cluster', RpcName) -> + 'find_rpc_def_Etcd.Cluster'(RpcName); +find_rpc_def('Etcd.Maintenance', RpcName) -> + 'find_rpc_def_Etcd.Maintenance'(RpcName); +find_rpc_def('Etcd.Auth', RpcName) -> + 'find_rpc_def_Etcd.Auth'(RpcName); +find_rpc_def('Etcd.Health', RpcName) -> + 'find_rpc_def_Etcd.Health'(RpcName); +find_rpc_def('Etcd.Lock', RpcName) -> + 'find_rpc_def_Etcd.Lock'(RpcName); +find_rpc_def('Etcd.Election', RpcName) -> + 'find_rpc_def_Etcd.Election'(RpcName); +find_rpc_def(_, _) -> error. + + +'find_rpc_def_Etcd.KV'('Range') -> + #{name => 'Range', input => 'Etcd.RangeRequest', + output => 'Etcd.RangeResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('Put') -> + #{name => 'Put', input => 'Etcd.PutRequest', + output => 'Etcd.PutResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('DeleteRange') -> + #{name => 'DeleteRange', + input => 'Etcd.DeleteRangeRequest', + output => 'Etcd.DeleteRangeResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.KV'('Txn') -> + #{name => 'Txn', input => 'Etcd.TxnRequest', + output => 'Etcd.TxnResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.KV'('Compact') -> + #{name => 'Compact', input => 'Etcd.CompactionRequest', + output => 'Etcd.CompactionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.KV'(_) -> error. + +'find_rpc_def_Etcd.Watch'('Watch') -> + #{name => 'Watch', input => 'Etcd.WatchRequest', + output => 'Etcd.WatchResponse', input_stream => true, + output_stream => true, opts => []}; +'find_rpc_def_Etcd.Watch'(_) -> error. + +'find_rpc_def_Etcd.Lease'('LeaseGrant') -> + #{name => 'LeaseGrant', + input => 'Etcd.LeaseGrantRequest', + output => 'Etcd.LeaseGrantResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseRevoke') -> + #{name => 'LeaseRevoke', + input => 'Etcd.LeaseRevokeRequest', + output => 'Etcd.LeaseRevokeResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseKeepAlive') -> + #{name => 'LeaseKeepAlive', + input => 'Etcd.LeaseKeepAliveRequest', + output => 'Etcd.LeaseKeepAliveResponse', + input_stream => true, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseTimeToLive') -> + #{name => 'LeaseTimeToLive', + input => 'Etcd.LeaseTimeToLiveRequest', + output => 'Etcd.LeaseTimeToLiveResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'('LeaseLeases') -> + #{name => 'LeaseLeases', + input => 'Etcd.LeaseLeasesRequest', + output => 'Etcd.LeaseLeasesResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Lease'(_) -> error. + +'find_rpc_def_Etcd.Cluster'('MemberAdd') -> + #{name => 'MemberAdd', input => 'Etcd.MemberAddRequest', + output => 'Etcd.MemberAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberRemove') -> + #{name => 'MemberRemove', + input => 'Etcd.MemberRemoveRequest', + output => 'Etcd.MemberRemoveResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberUpdate') -> + #{name => 'MemberUpdate', + input => 'Etcd.MemberUpdateRequest', + output => 'Etcd.MemberUpdateResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberList') -> + #{name => 'MemberList', + input => 'Etcd.MemberListRequest', + output => 'Etcd.MemberListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'('MemberPromote') -> + #{name => 'MemberPromote', + input => 'Etcd.MemberPromoteRequest', + output => 'Etcd.MemberPromoteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Cluster'(_) -> error. + +'find_rpc_def_Etcd.Maintenance'('Alarm') -> + #{name => 'Alarm', input => 'Etcd.AlarmRequest', + output => 'Etcd.AlarmResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Status') -> + #{name => 'Status', input => 'Etcd.StatusRequest', + output => 'Etcd.StatusResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Defragment') -> + #{name => 'Defragment', + input => 'Etcd.DefragmentRequest', + output => 'Etcd.DefragmentResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Maintenance'('Hash') -> + #{name => 'Hash', input => 'Etcd.HashRequest', + output => 'Etcd.HashResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('HashKV') -> + #{name => 'HashKV', input => 'Etcd.HashKVRequest', + output => 'Etcd.HashKVResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Maintenance'('Snapshot') -> + #{name => 'Snapshot', input => 'Etcd.SnapshotRequest', + output => 'Etcd.SnapshotResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Maintenance'('MoveLeader') -> + #{name => 'MoveLeader', + input => 'Etcd.MoveLeaderRequest', + output => 'Etcd.MoveLeaderResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Maintenance'(_) -> error. + +'find_rpc_def_Etcd.Auth'('AuthEnable') -> + #{name => 'AuthEnable', + input => 'Etcd.AuthEnableRequest', + output => 'Etcd.AuthEnableResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('AuthDisable') -> + #{name => 'AuthDisable', + input => 'Etcd.AuthDisableRequest', + output => 'Etcd.AuthDisableResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('Authenticate') -> + #{name => 'Authenticate', + input => 'Etcd.AuthenticateRequest', + output => 'Etcd.AuthenticateResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserAdd') -> + #{name => 'UserAdd', input => 'Etcd.AuthUserAddRequest', + output => 'Etcd.AuthUserAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserGet') -> + #{name => 'UserGet', input => 'Etcd.AuthUserGetRequest', + output => 'Etcd.AuthUserGetResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserList') -> + #{name => 'UserList', + input => 'Etcd.AuthUserListRequest', + output => 'Etcd.AuthUserListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserDelete') -> + #{name => 'UserDelete', + input => 'Etcd.AuthUserDeleteRequest', + output => 'Etcd.AuthUserDeleteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserChangePassword') -> + #{name => 'UserChangePassword', + input => 'Etcd.AuthUserChangePasswordRequest', + output => 'Etcd.AuthUserChangePasswordResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserGrantRole') -> + #{name => 'UserGrantRole', + input => 'Etcd.AuthUserGrantRoleRequest', + output => 'Etcd.AuthUserGrantRoleResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('UserRevokeRole') -> + #{name => 'UserRevokeRole', + input => 'Etcd.AuthUserRevokeRoleRequest', + output => 'Etcd.AuthUserRevokeRoleResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleAdd') -> + #{name => 'RoleAdd', input => 'Etcd.AuthRoleAddRequest', + output => 'Etcd.AuthRoleAddResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleGet') -> + #{name => 'RoleGet', input => 'Etcd.AuthRoleGetRequest', + output => 'Etcd.AuthRoleGetResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleList') -> + #{name => 'RoleList', + input => 'Etcd.AuthRoleListRequest', + output => 'Etcd.AuthRoleListResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleDelete') -> + #{name => 'RoleDelete', + input => 'Etcd.AuthRoleDeleteRequest', + output => 'Etcd.AuthRoleDeleteResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleGrantPermission') -> + #{name => 'RoleGrantPermission', + input => 'Etcd.AuthRoleGrantPermissionRequest', + output => 'Etcd.AuthRoleGrantPermissionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'('RoleRevokePermission') -> + #{name => 'RoleRevokePermission', + input => 'Etcd.AuthRoleRevokePermissionRequest', + output => 'Etcd.AuthRoleRevokePermissionResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Auth'(_) -> error. + +'find_rpc_def_Etcd.Health'('Check') -> + #{name => 'Check', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Health'('Watch') -> + #{name => 'Watch', input => 'Etcd.HealthCheckRequest', + output => 'Etcd.HealthCheckResponse', + input_stream => false, output_stream => true, + opts => []}; +'find_rpc_def_Etcd.Health'(_) -> error. + +'find_rpc_def_Etcd.Lock'('Lock') -> + #{name => 'Lock', input => 'Etcd.LockRequest', + output => 'Etcd.LockResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Lock'('Unlock') -> + #{name => 'Unlock', input => 'Etcd.UnlockRequest', + output => 'Etcd.UnlockResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Lock'(_) -> error. + +'find_rpc_def_Etcd.Election'('Campaign') -> + #{name => 'Campaign', input => 'Etcd.CampaignRequest', + output => 'Etcd.CampaignResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Election'('Proclaim') -> + #{name => 'Proclaim', input => 'Etcd.ProclaimRequest', + output => 'Etcd.ProclaimResponse', + input_stream => false, output_stream => false, + opts => []}; +'find_rpc_def_Etcd.Election'('Leader') -> + #{name => 'Leader', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Election'('Observe') -> + #{name => 'Observe', input => 'Etcd.LeaderRequest', + output => 'Etcd.LeaderResponse', input_stream => true, + output_stream => true, opts => []}; +'find_rpc_def_Etcd.Election'('Resign') -> + #{name => 'Resign', input => 'Etcd.ResignRequest', + output => 'Etcd.ResignResponse', input_stream => false, + output_stream => false, opts => []}; +'find_rpc_def_Etcd.Election'(_) -> error. + + +fetch_rpc_def(ServiceName, RpcName) -> + case find_rpc_def(ServiceName, RpcName) of + Def when is_map(Def) -> Def; + error -> + erlang:error({no_such_rpc, ServiceName, RpcName}) + end. + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +fqbin_to_service_name(<<"Etcd.KV">>) -> 'Etcd.KV'; +fqbin_to_service_name(<<"Etcd.Watch">>) -> 'Etcd.Watch'; +fqbin_to_service_name(<<"Etcd.Lease">>) -> 'Etcd.Lease'; +fqbin_to_service_name(<<"Etcd.Cluster">>) -> 'Etcd.Cluster'; +fqbin_to_service_name(<<"Etcd.Maintenance">>) -> 'Etcd.Maintenance'; +fqbin_to_service_name(<<"Etcd.Auth">>) -> 'Etcd.Auth'; +fqbin_to_service_name(<<"Etcd.Health">>) -> 'Etcd.Health'; +fqbin_to_service_name(<<"Etcd.Lock">>) -> 'Etcd.Lock'; +fqbin_to_service_name(<<"Etcd.Election">>) -> 'Etcd.Election'; +fqbin_to_service_name(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +service_name_to_fqbin('Etcd.KV') -> <<"Etcd.KV">>; +service_name_to_fqbin('Etcd.Watch') -> <<"Etcd.Watch">>; +service_name_to_fqbin('Etcd.Lease') -> <<"Etcd.Lease">>; +service_name_to_fqbin('Etcd.Cluster') -> <<"Etcd.Cluster">>; +service_name_to_fqbin('Etcd.Maintenance') -> <<"Etcd.Maintenance">>; +service_name_to_fqbin('Etcd.Auth') -> <<"Etcd.Auth">>; +service_name_to_fqbin('Etcd.Health') -> <<"Etcd.Health">>; +service_name_to_fqbin('Etcd.Lock') -> <<"Etcd.Lock">>; +service_name_to_fqbin('Etcd.Election') -> <<"Etcd.Election">>; +service_name_to_fqbin(X) -> + error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Range">>) -> + {'Etcd.KV', 'Range'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Put">>) -> + {'Etcd.KV', 'Put'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"DeleteRange">>) -> + {'Etcd.KV', 'DeleteRange'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Txn">>) -> + {'Etcd.KV', 'Txn'}; +fqbins_to_service_and_rpc_name(<<"Etcd.KV">>, <<"Compact">>) -> + {'Etcd.KV', 'Compact'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Watch">>, <<"Watch">>) -> + {'Etcd.Watch', 'Watch'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseGrant">>) -> + {'Etcd.Lease', 'LeaseGrant'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseRevoke">>) -> + {'Etcd.Lease', 'LeaseRevoke'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseKeepAlive">>) -> + {'Etcd.Lease', 'LeaseKeepAlive'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseTimeToLive">>) -> + {'Etcd.Lease', 'LeaseTimeToLive'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lease">>, <<"LeaseLeases">>) -> + {'Etcd.Lease', 'LeaseLeases'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberAdd">>) -> + {'Etcd.Cluster', 'MemberAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberRemove">>) -> + {'Etcd.Cluster', 'MemberRemove'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberUpdate">>) -> + {'Etcd.Cluster', 'MemberUpdate'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberList">>) -> + {'Etcd.Cluster', 'MemberList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Cluster">>, <<"MemberPromote">>) -> + {'Etcd.Cluster', 'MemberPromote'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Alarm">>) -> + {'Etcd.Maintenance', 'Alarm'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Status">>) -> + {'Etcd.Maintenance', 'Status'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Defragment">>) -> + {'Etcd.Maintenance', 'Defragment'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Hash">>) -> + {'Etcd.Maintenance', 'Hash'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"HashKV">>) -> + {'Etcd.Maintenance', 'HashKV'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"Snapshot">>) -> + {'Etcd.Maintenance', 'Snapshot'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Maintenance">>, <<"MoveLeader">>) -> + {'Etcd.Maintenance', 'MoveLeader'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"AuthEnable">>) -> + {'Etcd.Auth', 'AuthEnable'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"AuthDisable">>) -> + {'Etcd.Auth', 'AuthDisable'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"Authenticate">>) -> + {'Etcd.Auth', 'Authenticate'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserAdd">>) -> + {'Etcd.Auth', 'UserAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserGet">>) -> + {'Etcd.Auth', 'UserGet'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserList">>) -> + {'Etcd.Auth', 'UserList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserDelete">>) -> + {'Etcd.Auth', 'UserDelete'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserChangePassword">>) -> + {'Etcd.Auth', 'UserChangePassword'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserGrantRole">>) -> + {'Etcd.Auth', 'UserGrantRole'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"UserRevokeRole">>) -> + {'Etcd.Auth', 'UserRevokeRole'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleAdd">>) -> + {'Etcd.Auth', 'RoleAdd'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleGet">>) -> + {'Etcd.Auth', 'RoleGet'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleList">>) -> + {'Etcd.Auth', 'RoleList'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleDelete">>) -> + {'Etcd.Auth', 'RoleDelete'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleGrantPermission">>) -> + {'Etcd.Auth', 'RoleGrantPermission'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Auth">>, <<"RoleRevokePermission">>) -> + {'Etcd.Auth', 'RoleRevokePermission'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Health">>, <<"Check">>) -> + {'Etcd.Health', 'Check'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Health">>, <<"Watch">>) -> + {'Etcd.Health', 'Watch'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lock">>, <<"Lock">>) -> + {'Etcd.Lock', 'Lock'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Lock">>, <<"Unlock">>) -> + {'Etcd.Lock', 'Unlock'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Campaign">>) -> + {'Etcd.Election', 'Campaign'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Proclaim">>) -> + {'Etcd.Election', 'Proclaim'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Leader">>) -> + {'Etcd.Election', 'Leader'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Observe">>) -> + {'Etcd.Election', 'Observe'}; +fqbins_to_service_and_rpc_name(<<"Etcd.Election">>, <<"Resign">>) -> + {'Etcd.Election', 'Resign'}; +fqbins_to_service_and_rpc_name(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +service_and_rpc_name_to_fqbins('Etcd.KV', 'Range') -> + {<<"Etcd.KV">>, <<"Range">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Put') -> + {<<"Etcd.KV">>, <<"Put">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', + 'DeleteRange') -> + {<<"Etcd.KV">>, <<"DeleteRange">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Txn') -> + {<<"Etcd.KV">>, <<"Txn">>}; +service_and_rpc_name_to_fqbins('Etcd.KV', 'Compact') -> + {<<"Etcd.KV">>, <<"Compact">>}; +service_and_rpc_name_to_fqbins('Etcd.Watch', 'Watch') -> + {<<"Etcd.Watch">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseGrant') -> + {<<"Etcd.Lease">>, <<"LeaseGrant">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseRevoke') -> + {<<"Etcd.Lease">>, <<"LeaseRevoke">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseKeepAlive') -> + {<<"Etcd.Lease">>, <<"LeaseKeepAlive">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseTimeToLive') -> + {<<"Etcd.Lease">>, <<"LeaseTimeToLive">>}; +service_and_rpc_name_to_fqbins('Etcd.Lease', + 'LeaseLeases') -> + {<<"Etcd.Lease">>, <<"LeaseLeases">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberAdd') -> + {<<"Etcd.Cluster">>, <<"MemberAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberRemove') -> + {<<"Etcd.Cluster">>, <<"MemberRemove">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberUpdate') -> + {<<"Etcd.Cluster">>, <<"MemberUpdate">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberList') -> + {<<"Etcd.Cluster">>, <<"MemberList">>}; +service_and_rpc_name_to_fqbins('Etcd.Cluster', + 'MemberPromote') -> + {<<"Etcd.Cluster">>, <<"MemberPromote">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Alarm') -> + {<<"Etcd.Maintenance">>, <<"Alarm">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Status') -> + {<<"Etcd.Maintenance">>, <<"Status">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Defragment') -> + {<<"Etcd.Maintenance">>, <<"Defragment">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Hash') -> + {<<"Etcd.Maintenance">>, <<"Hash">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'HashKV') -> + {<<"Etcd.Maintenance">>, <<"HashKV">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'Snapshot') -> + {<<"Etcd.Maintenance">>, <<"Snapshot">>}; +service_and_rpc_name_to_fqbins('Etcd.Maintenance', + 'MoveLeader') -> + {<<"Etcd.Maintenance">>, <<"MoveLeader">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'AuthEnable') -> + {<<"Etcd.Auth">>, <<"AuthEnable">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'AuthDisable') -> + {<<"Etcd.Auth">>, <<"AuthDisable">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'Authenticate') -> + {<<"Etcd.Auth">>, <<"Authenticate">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserAdd') -> + {<<"Etcd.Auth">>, <<"UserAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserGet') -> + {<<"Etcd.Auth">>, <<"UserGet">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserList') -> + {<<"Etcd.Auth">>, <<"UserList">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserDelete') -> + {<<"Etcd.Auth">>, <<"UserDelete">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserChangePassword') -> + {<<"Etcd.Auth">>, <<"UserChangePassword">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserGrantRole') -> + {<<"Etcd.Auth">>, <<"UserGrantRole">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'UserRevokeRole') -> + {<<"Etcd.Auth">>, <<"UserRevokeRole">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleAdd') -> + {<<"Etcd.Auth">>, <<"RoleAdd">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleGet') -> + {<<"Etcd.Auth">>, <<"RoleGet">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleList') -> + {<<"Etcd.Auth">>, <<"RoleList">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleDelete') -> + {<<"Etcd.Auth">>, <<"RoleDelete">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleGrantPermission') -> + {<<"Etcd.Auth">>, <<"RoleGrantPermission">>}; +service_and_rpc_name_to_fqbins('Etcd.Auth', + 'RoleRevokePermission') -> + {<<"Etcd.Auth">>, <<"RoleRevokePermission">>}; +service_and_rpc_name_to_fqbins('Etcd.Health', + 'Check') -> + {<<"Etcd.Health">>, <<"Check">>}; +service_and_rpc_name_to_fqbins('Etcd.Health', + 'Watch') -> + {<<"Etcd.Health">>, <<"Watch">>}; +service_and_rpc_name_to_fqbins('Etcd.Lock', 'Lock') -> + {<<"Etcd.Lock">>, <<"Lock">>}; +service_and_rpc_name_to_fqbins('Etcd.Lock', 'Unlock') -> + {<<"Etcd.Lock">>, <<"Unlock">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Campaign') -> + {<<"Etcd.Election">>, <<"Campaign">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Proclaim') -> + {<<"Etcd.Election">>, <<"Proclaim">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Leader') -> + {<<"Etcd.Election">>, <<"Leader">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Observe') -> + {<<"Etcd.Election">>, <<"Observe">>}; +service_and_rpc_name_to_fqbins('Etcd.Election', + 'Resign') -> + {<<"Etcd.Election">>, <<"Resign">>}; +service_and_rpc_name_to_fqbins(S, R) -> + error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"Etcd.ResponseHeader">>) -> 'Etcd.ResponseHeader'; +fqbin_to_msg_name(<<"Etcd.RangeRequest">>) -> 'Etcd.RangeRequest'; +fqbin_to_msg_name(<<"Etcd.RangeResponse">>) -> 'Etcd.RangeResponse'; +fqbin_to_msg_name(<<"Etcd.PutRequest">>) -> 'Etcd.PutRequest'; +fqbin_to_msg_name(<<"Etcd.PutResponse">>) -> 'Etcd.PutResponse'; +fqbin_to_msg_name(<<"Etcd.DeleteRangeRequest">>) -> 'Etcd.DeleteRangeRequest'; +fqbin_to_msg_name(<<"Etcd.DeleteRangeResponse">>) -> + 'Etcd.DeleteRangeResponse'; +fqbin_to_msg_name(<<"Etcd.RequestOp">>) -> 'Etcd.RequestOp'; +fqbin_to_msg_name(<<"Etcd.ResponseOp">>) -> 'Etcd.ResponseOp'; +fqbin_to_msg_name(<<"Etcd.Compare">>) -> 'Etcd.Compare'; +fqbin_to_msg_name(<<"Etcd.TxnRequest">>) -> 'Etcd.TxnRequest'; +fqbin_to_msg_name(<<"Etcd.TxnResponse">>) -> 'Etcd.TxnResponse'; +fqbin_to_msg_name(<<"Etcd.CompactionRequest">>) -> 'Etcd.CompactionRequest'; +fqbin_to_msg_name(<<"Etcd.CompactionResponse">>) -> 'Etcd.CompactionResponse'; +fqbin_to_msg_name(<<"Etcd.HashRequest">>) -> 'Etcd.HashRequest'; +fqbin_to_msg_name(<<"Etcd.HashKVRequest">>) -> 'Etcd.HashKVRequest'; +fqbin_to_msg_name(<<"Etcd.HashKVResponse">>) -> 'Etcd.HashKVResponse'; +fqbin_to_msg_name(<<"Etcd.HashResponse">>) -> 'Etcd.HashResponse'; +fqbin_to_msg_name(<<"Etcd.SnapshotRequest">>) -> 'Etcd.SnapshotRequest'; +fqbin_to_msg_name(<<"Etcd.SnapshotResponse">>) -> 'Etcd.SnapshotResponse'; +fqbin_to_msg_name(<<"Etcd.WatchRequest">>) -> 'Etcd.WatchRequest'; +fqbin_to_msg_name(<<"Etcd.WatchCreateRequest">>) -> 'Etcd.WatchCreateRequest'; +fqbin_to_msg_name(<<"Etcd.WatchCancelRequest">>) -> 'Etcd.WatchCancelRequest'; +fqbin_to_msg_name(<<"Etcd.WatchProgressRequest">>) -> + 'Etcd.WatchProgressRequest'; +fqbin_to_msg_name(<<"Etcd.WatchResponse">>) -> 'Etcd.WatchResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseGrantRequest">>) -> 'Etcd.LeaseGrantRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseGrantResponse">>) -> 'Etcd.LeaseGrantResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseRevokeRequest">>) -> 'Etcd.LeaseRevokeRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseRevokeResponse">>) -> + 'Etcd.LeaseRevokeResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpoint">>) -> 'Etcd.LeaseCheckpoint'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpointRequest">>) -> + 'Etcd.LeaseCheckpointRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseCheckpointResponse">>) -> + 'Etcd.LeaseCheckpointResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseKeepAliveRequest">>) -> + 'Etcd.LeaseKeepAliveRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseKeepAliveResponse">>) -> + 'Etcd.LeaseKeepAliveResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseTimeToLiveRequest">>) -> + 'Etcd.LeaseTimeToLiveRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseTimeToLiveResponse">>) -> + 'Etcd.LeaseTimeToLiveResponse'; +fqbin_to_msg_name(<<"Etcd.LeaseLeasesRequest">>) -> 'Etcd.LeaseLeasesRequest'; +fqbin_to_msg_name(<<"Etcd.LeaseStatus">>) -> 'Etcd.LeaseStatus'; +fqbin_to_msg_name(<<"Etcd.LeaseLeasesResponse">>) -> + 'Etcd.LeaseLeasesResponse'; +fqbin_to_msg_name(<<"Etcd.Member">>) -> 'Etcd.Member'; +fqbin_to_msg_name(<<"Etcd.MemberAddRequest">>) -> 'Etcd.MemberAddRequest'; +fqbin_to_msg_name(<<"Etcd.MemberAddResponse">>) -> 'Etcd.MemberAddResponse'; +fqbin_to_msg_name(<<"Etcd.MemberRemoveRequest">>) -> + 'Etcd.MemberRemoveRequest'; +fqbin_to_msg_name(<<"Etcd.MemberRemoveResponse">>) -> + 'Etcd.MemberRemoveResponse'; +fqbin_to_msg_name(<<"Etcd.MemberUpdateRequest">>) -> + 'Etcd.MemberUpdateRequest'; +fqbin_to_msg_name(<<"Etcd.MemberUpdateResponse">>) -> + 'Etcd.MemberUpdateResponse'; +fqbin_to_msg_name(<<"Etcd.MemberListRequest">>) -> 'Etcd.MemberListRequest'; +fqbin_to_msg_name(<<"Etcd.MemberListResponse">>) -> 'Etcd.MemberListResponse'; +fqbin_to_msg_name(<<"Etcd.MemberPromoteRequest">>) -> + 'Etcd.MemberPromoteRequest'; +fqbin_to_msg_name(<<"Etcd.MemberPromoteResponse">>) -> + 'Etcd.MemberPromoteResponse'; +fqbin_to_msg_name(<<"Etcd.DefragmentRequest">>) -> 'Etcd.DefragmentRequest'; +fqbin_to_msg_name(<<"Etcd.DefragmentResponse">>) -> 'Etcd.DefragmentResponse'; +fqbin_to_msg_name(<<"Etcd.MoveLeaderRequest">>) -> 'Etcd.MoveLeaderRequest'; +fqbin_to_msg_name(<<"Etcd.MoveLeaderResponse">>) -> 'Etcd.MoveLeaderResponse'; +fqbin_to_msg_name(<<"Etcd.AlarmRequest">>) -> 'Etcd.AlarmRequest'; +fqbin_to_msg_name(<<"Etcd.AlarmMember">>) -> 'Etcd.AlarmMember'; +fqbin_to_msg_name(<<"Etcd.AlarmResponse">>) -> 'Etcd.AlarmResponse'; +fqbin_to_msg_name(<<"Etcd.StatusRequest">>) -> 'Etcd.StatusRequest'; +fqbin_to_msg_name(<<"Etcd.StatusResponse">>) -> 'Etcd.StatusResponse'; +fqbin_to_msg_name(<<"Etcd.AuthEnableRequest">>) -> 'Etcd.AuthEnableRequest'; +fqbin_to_msg_name(<<"Etcd.AuthDisableRequest">>) -> 'Etcd.AuthDisableRequest'; +fqbin_to_msg_name(<<"Etcd.AuthenticateRequest">>) -> + 'Etcd.AuthenticateRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserAddRequest">>) -> 'Etcd.AuthUserAddRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserGetRequest">>) -> 'Etcd.AuthUserGetRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserDeleteRequest">>) -> + 'Etcd.AuthUserDeleteRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserChangePasswordRequest">>) -> + 'Etcd.AuthUserChangePasswordRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserGrantRoleRequest">>) -> + 'Etcd.AuthUserGrantRoleRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserRevokeRoleRequest">>) -> + 'Etcd.AuthUserRevokeRoleRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleAddRequest">>) -> 'Etcd.AuthRoleAddRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGetRequest">>) -> 'Etcd.AuthRoleGetRequest'; +fqbin_to_msg_name(<<"Etcd.AuthUserListRequest">>) -> + 'Etcd.AuthUserListRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleListRequest">>) -> + 'Etcd.AuthRoleListRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleDeleteRequest">>) -> + 'Etcd.AuthRoleDeleteRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGrantPermissionRequest">>) -> + 'Etcd.AuthRoleGrantPermissionRequest'; +fqbin_to_msg_name(<<"Etcd.AuthRoleRevokePermissionRequest">>) -> + 'Etcd.AuthRoleRevokePermissionRequest'; +fqbin_to_msg_name(<<"Etcd.AuthEnableResponse">>) -> 'Etcd.AuthEnableResponse'; +fqbin_to_msg_name(<<"Etcd.AuthDisableResponse">>) -> + 'Etcd.AuthDisableResponse'; +fqbin_to_msg_name(<<"Etcd.AuthenticateResponse">>) -> + 'Etcd.AuthenticateResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserAddResponse">>) -> + 'Etcd.AuthUserAddResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserGetResponse">>) -> + 'Etcd.AuthUserGetResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserDeleteResponse">>) -> + 'Etcd.AuthUserDeleteResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserChangePasswordResponse">>) -> + 'Etcd.AuthUserChangePasswordResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserGrantRoleResponse">>) -> + 'Etcd.AuthUserGrantRoleResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserRevokeRoleResponse">>) -> + 'Etcd.AuthUserRevokeRoleResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleAddResponse">>) -> + 'Etcd.AuthRoleAddResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGetResponse">>) -> + 'Etcd.AuthRoleGetResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleListResponse">>) -> + 'Etcd.AuthRoleListResponse'; +fqbin_to_msg_name(<<"Etcd.AuthUserListResponse">>) -> + 'Etcd.AuthUserListResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleDeleteResponse">>) -> + 'Etcd.AuthRoleDeleteResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleGrantPermissionResponse">>) -> + 'Etcd.AuthRoleGrantPermissionResponse'; +fqbin_to_msg_name(<<"Etcd.AuthRoleRevokePermissionResponse">>) -> + 'Etcd.AuthRoleRevokePermissionResponse'; +fqbin_to_msg_name(<<"Etcd.HealthCheckRequest">>) -> 'Etcd.HealthCheckRequest'; +fqbin_to_msg_name(<<"Etcd.HealthCheckResponse">>) -> + 'Etcd.HealthCheckResponse'; +fqbin_to_msg_name(<<"Etcd.LockRequest">>) -> 'Etcd.LockRequest'; +fqbin_to_msg_name(<<"Etcd.LockResponse">>) -> 'Etcd.LockResponse'; +fqbin_to_msg_name(<<"Etcd.UnlockRequest">>) -> 'Etcd.UnlockRequest'; +fqbin_to_msg_name(<<"Etcd.UnlockResponse">>) -> 'Etcd.UnlockResponse'; +fqbin_to_msg_name(<<"Etcd.CampaignRequest">>) -> 'Etcd.CampaignRequest'; +fqbin_to_msg_name(<<"Etcd.CampaignResponse">>) -> 'Etcd.CampaignResponse'; +fqbin_to_msg_name(<<"Etcd.LeaderKey">>) -> 'Etcd.LeaderKey'; +fqbin_to_msg_name(<<"Etcd.LeaderRequest">>) -> 'Etcd.LeaderRequest'; +fqbin_to_msg_name(<<"Etcd.LeaderResponse">>) -> 'Etcd.LeaderResponse'; +fqbin_to_msg_name(<<"Etcd.ResignRequest">>) -> 'Etcd.ResignRequest'; +fqbin_to_msg_name(<<"Etcd.ResignResponse">>) -> 'Etcd.ResignResponse'; +fqbin_to_msg_name(<<"Etcd.ProclaimRequest">>) -> 'Etcd.ProclaimRequest'; +fqbin_to_msg_name(<<"Etcd.ProclaimResponse">>) -> 'Etcd.ProclaimResponse'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorSet">>) -> + 'google.protobuf.FileDescriptorSet'; +fqbin_to_msg_name(<<"google.protobuf.FileDescriptorProto">>) -> + 'google.protobuf.FileDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> + 'google.protobuf.DescriptorProto.ExtensionRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> + 'google.protobuf.DescriptorProto.ReservedRange'; +fqbin_to_msg_name(<<"google.protobuf.DescriptorProto">>) -> + 'google.protobuf.DescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FieldDescriptorProto">>) -> + 'google.protobuf.FieldDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.OneofDescriptorProto">>) -> + 'google.protobuf.OneofDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumDescriptorProto">>) -> + 'google.protobuf.EnumDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueDescriptorProto">>) -> + 'google.protobuf.EnumValueDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.ServiceDescriptorProto">>) -> + 'google.protobuf.ServiceDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.MethodDescriptorProto">>) -> + 'google.protobuf.MethodDescriptorProto'; +fqbin_to_msg_name(<<"google.protobuf.FileOptions">>) -> + 'google.protobuf.FileOptions'; +fqbin_to_msg_name(<<"google.protobuf.MessageOptions">>) -> + 'google.protobuf.MessageOptions'; +fqbin_to_msg_name(<<"google.protobuf.FieldOptions">>) -> + 'google.protobuf.FieldOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumOptions">>) -> + 'google.protobuf.EnumOptions'; +fqbin_to_msg_name(<<"google.protobuf.EnumValueOptions">>) -> + 'google.protobuf.EnumValueOptions'; +fqbin_to_msg_name(<<"google.protobuf.ServiceOptions">>) -> + 'google.protobuf.ServiceOptions'; +fqbin_to_msg_name(<<"google.protobuf.MethodOptions">>) -> + 'google.protobuf.MethodOptions'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption.NamePart">>) -> + 'google.protobuf.UninterpretedOption.NamePart'; +fqbin_to_msg_name(<<"google.protobuf.UninterpretedOption">>) -> + 'google.protobuf.UninterpretedOption'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo.Location">>) -> + 'google.protobuf.SourceCodeInfo.Location'; +fqbin_to_msg_name(<<"google.protobuf.SourceCodeInfo">>) -> + 'google.protobuf.SourceCodeInfo'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> + 'google.protobuf.GeneratedCodeInfo.Annotation'; +fqbin_to_msg_name(<<"google.protobuf.GeneratedCodeInfo">>) -> + 'google.protobuf.GeneratedCodeInfo'; +fqbin_to_msg_name(<<"mvccpb.KeyValue">>) -> 'mvccpb.KeyValue'; +fqbin_to_msg_name(<<"mvccpb.Event">>) -> 'mvccpb.Event'; +fqbin_to_msg_name(<<"authpb.UserAddOptions">>) -> 'authpb.UserAddOptions'; +fqbin_to_msg_name(<<"authpb.User">>) -> 'authpb.User'; +fqbin_to_msg_name(<<"authpb.Permission">>) -> 'authpb.Permission'; +fqbin_to_msg_name(<<"authpb.Role">>) -> 'authpb.Role'; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin('Etcd.ResponseHeader') -> <<"Etcd.ResponseHeader">>; +msg_name_to_fqbin('Etcd.RangeRequest') -> <<"Etcd.RangeRequest">>; +msg_name_to_fqbin('Etcd.RangeResponse') -> <<"Etcd.RangeResponse">>; +msg_name_to_fqbin('Etcd.PutRequest') -> <<"Etcd.PutRequest">>; +msg_name_to_fqbin('Etcd.PutResponse') -> <<"Etcd.PutResponse">>; +msg_name_to_fqbin('Etcd.DeleteRangeRequest') -> <<"Etcd.DeleteRangeRequest">>; +msg_name_to_fqbin('Etcd.DeleteRangeResponse') -> + <<"Etcd.DeleteRangeResponse">>; +msg_name_to_fqbin('Etcd.RequestOp') -> <<"Etcd.RequestOp">>; +msg_name_to_fqbin('Etcd.ResponseOp') -> <<"Etcd.ResponseOp">>; +msg_name_to_fqbin('Etcd.Compare') -> <<"Etcd.Compare">>; +msg_name_to_fqbin('Etcd.TxnRequest') -> <<"Etcd.TxnRequest">>; +msg_name_to_fqbin('Etcd.TxnResponse') -> <<"Etcd.TxnResponse">>; +msg_name_to_fqbin('Etcd.CompactionRequest') -> <<"Etcd.CompactionRequest">>; +msg_name_to_fqbin('Etcd.CompactionResponse') -> <<"Etcd.CompactionResponse">>; +msg_name_to_fqbin('Etcd.HashRequest') -> <<"Etcd.HashRequest">>; +msg_name_to_fqbin('Etcd.HashKVRequest') -> <<"Etcd.HashKVRequest">>; +msg_name_to_fqbin('Etcd.HashKVResponse') -> <<"Etcd.HashKVResponse">>; +msg_name_to_fqbin('Etcd.HashResponse') -> <<"Etcd.HashResponse">>; +msg_name_to_fqbin('Etcd.SnapshotRequest') -> <<"Etcd.SnapshotRequest">>; +msg_name_to_fqbin('Etcd.SnapshotResponse') -> <<"Etcd.SnapshotResponse">>; +msg_name_to_fqbin('Etcd.WatchRequest') -> <<"Etcd.WatchRequest">>; +msg_name_to_fqbin('Etcd.WatchCreateRequest') -> <<"Etcd.WatchCreateRequest">>; +msg_name_to_fqbin('Etcd.WatchCancelRequest') -> <<"Etcd.WatchCancelRequest">>; +msg_name_to_fqbin('Etcd.WatchProgressRequest') -> + <<"Etcd.WatchProgressRequest">>; +msg_name_to_fqbin('Etcd.WatchResponse') -> <<"Etcd.WatchResponse">>; +msg_name_to_fqbin('Etcd.LeaseGrantRequest') -> <<"Etcd.LeaseGrantRequest">>; +msg_name_to_fqbin('Etcd.LeaseGrantResponse') -> <<"Etcd.LeaseGrantResponse">>; +msg_name_to_fqbin('Etcd.LeaseRevokeRequest') -> <<"Etcd.LeaseRevokeRequest">>; +msg_name_to_fqbin('Etcd.LeaseRevokeResponse') -> + <<"Etcd.LeaseRevokeResponse">>; +msg_name_to_fqbin('Etcd.LeaseCheckpoint') -> <<"Etcd.LeaseCheckpoint">>; +msg_name_to_fqbin('Etcd.LeaseCheckpointRequest') -> + <<"Etcd.LeaseCheckpointRequest">>; +msg_name_to_fqbin('Etcd.LeaseCheckpointResponse') -> + <<"Etcd.LeaseCheckpointResponse">>; +msg_name_to_fqbin('Etcd.LeaseKeepAliveRequest') -> + <<"Etcd.LeaseKeepAliveRequest">>; +msg_name_to_fqbin('Etcd.LeaseKeepAliveResponse') -> + <<"Etcd.LeaseKeepAliveResponse">>; +msg_name_to_fqbin('Etcd.LeaseTimeToLiveRequest') -> + <<"Etcd.LeaseTimeToLiveRequest">>; +msg_name_to_fqbin('Etcd.LeaseTimeToLiveResponse') -> + <<"Etcd.LeaseTimeToLiveResponse">>; +msg_name_to_fqbin('Etcd.LeaseLeasesRequest') -> <<"Etcd.LeaseLeasesRequest">>; +msg_name_to_fqbin('Etcd.LeaseStatus') -> <<"Etcd.LeaseStatus">>; +msg_name_to_fqbin('Etcd.LeaseLeasesResponse') -> + <<"Etcd.LeaseLeasesResponse">>; +msg_name_to_fqbin('Etcd.Member') -> <<"Etcd.Member">>; +msg_name_to_fqbin('Etcd.MemberAddRequest') -> <<"Etcd.MemberAddRequest">>; +msg_name_to_fqbin('Etcd.MemberAddResponse') -> <<"Etcd.MemberAddResponse">>; +msg_name_to_fqbin('Etcd.MemberRemoveRequest') -> + <<"Etcd.MemberRemoveRequest">>; +msg_name_to_fqbin('Etcd.MemberRemoveResponse') -> + <<"Etcd.MemberRemoveResponse">>; +msg_name_to_fqbin('Etcd.MemberUpdateRequest') -> + <<"Etcd.MemberUpdateRequest">>; +msg_name_to_fqbin('Etcd.MemberUpdateResponse') -> + <<"Etcd.MemberUpdateResponse">>; +msg_name_to_fqbin('Etcd.MemberListRequest') -> <<"Etcd.MemberListRequest">>; +msg_name_to_fqbin('Etcd.MemberListResponse') -> <<"Etcd.MemberListResponse">>; +msg_name_to_fqbin('Etcd.MemberPromoteRequest') -> + <<"Etcd.MemberPromoteRequest">>; +msg_name_to_fqbin('Etcd.MemberPromoteResponse') -> + <<"Etcd.MemberPromoteResponse">>; +msg_name_to_fqbin('Etcd.DefragmentRequest') -> <<"Etcd.DefragmentRequest">>; +msg_name_to_fqbin('Etcd.DefragmentResponse') -> <<"Etcd.DefragmentResponse">>; +msg_name_to_fqbin('Etcd.MoveLeaderRequest') -> <<"Etcd.MoveLeaderRequest">>; +msg_name_to_fqbin('Etcd.MoveLeaderResponse') -> <<"Etcd.MoveLeaderResponse">>; +msg_name_to_fqbin('Etcd.AlarmRequest') -> <<"Etcd.AlarmRequest">>; +msg_name_to_fqbin('Etcd.AlarmMember') -> <<"Etcd.AlarmMember">>; +msg_name_to_fqbin('Etcd.AlarmResponse') -> <<"Etcd.AlarmResponse">>; +msg_name_to_fqbin('Etcd.StatusRequest') -> <<"Etcd.StatusRequest">>; +msg_name_to_fqbin('Etcd.StatusResponse') -> <<"Etcd.StatusResponse">>; +msg_name_to_fqbin('Etcd.AuthEnableRequest') -> <<"Etcd.AuthEnableRequest">>; +msg_name_to_fqbin('Etcd.AuthDisableRequest') -> <<"Etcd.AuthDisableRequest">>; +msg_name_to_fqbin('Etcd.AuthenticateRequest') -> + <<"Etcd.AuthenticateRequest">>; +msg_name_to_fqbin('Etcd.AuthUserAddRequest') -> <<"Etcd.AuthUserAddRequest">>; +msg_name_to_fqbin('Etcd.AuthUserGetRequest') -> <<"Etcd.AuthUserGetRequest">>; +msg_name_to_fqbin('Etcd.AuthUserDeleteRequest') -> + <<"Etcd.AuthUserDeleteRequest">>; +msg_name_to_fqbin('Etcd.AuthUserChangePasswordRequest') -> + <<"Etcd.AuthUserChangePasswordRequest">>; +msg_name_to_fqbin('Etcd.AuthUserGrantRoleRequest') -> + <<"Etcd.AuthUserGrantRoleRequest">>; +msg_name_to_fqbin('Etcd.AuthUserRevokeRoleRequest') -> + <<"Etcd.AuthUserRevokeRoleRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleAddRequest') -> <<"Etcd.AuthRoleAddRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleGetRequest') -> <<"Etcd.AuthRoleGetRequest">>; +msg_name_to_fqbin('Etcd.AuthUserListRequest') -> + <<"Etcd.AuthUserListRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleListRequest') -> + <<"Etcd.AuthRoleListRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleDeleteRequest') -> + <<"Etcd.AuthRoleDeleteRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleGrantPermissionRequest') -> + <<"Etcd.AuthRoleGrantPermissionRequest">>; +msg_name_to_fqbin('Etcd.AuthRoleRevokePermissionRequest') -> + <<"Etcd.AuthRoleRevokePermissionRequest">>; +msg_name_to_fqbin('Etcd.AuthEnableResponse') -> <<"Etcd.AuthEnableResponse">>; +msg_name_to_fqbin('Etcd.AuthDisableResponse') -> + <<"Etcd.AuthDisableResponse">>; +msg_name_to_fqbin('Etcd.AuthenticateResponse') -> + <<"Etcd.AuthenticateResponse">>; +msg_name_to_fqbin('Etcd.AuthUserAddResponse') -> + <<"Etcd.AuthUserAddResponse">>; +msg_name_to_fqbin('Etcd.AuthUserGetResponse') -> + <<"Etcd.AuthUserGetResponse">>; +msg_name_to_fqbin('Etcd.AuthUserDeleteResponse') -> + <<"Etcd.AuthUserDeleteResponse">>; +msg_name_to_fqbin('Etcd.AuthUserChangePasswordResponse') -> + <<"Etcd.AuthUserChangePasswordResponse">>; +msg_name_to_fqbin('Etcd.AuthUserGrantRoleResponse') -> + <<"Etcd.AuthUserGrantRoleResponse">>; +msg_name_to_fqbin('Etcd.AuthUserRevokeRoleResponse') -> + <<"Etcd.AuthUserRevokeRoleResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleAddResponse') -> + <<"Etcd.AuthRoleAddResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleGetResponse') -> + <<"Etcd.AuthRoleGetResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleListResponse') -> + <<"Etcd.AuthRoleListResponse">>; +msg_name_to_fqbin('Etcd.AuthUserListResponse') -> + <<"Etcd.AuthUserListResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleDeleteResponse') -> + <<"Etcd.AuthRoleDeleteResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleGrantPermissionResponse') -> + <<"Etcd.AuthRoleGrantPermissionResponse">>; +msg_name_to_fqbin('Etcd.AuthRoleRevokePermissionResponse') -> + <<"Etcd.AuthRoleRevokePermissionResponse">>; +msg_name_to_fqbin('Etcd.HealthCheckRequest') -> <<"Etcd.HealthCheckRequest">>; +msg_name_to_fqbin('Etcd.HealthCheckResponse') -> + <<"Etcd.HealthCheckResponse">>; +msg_name_to_fqbin('Etcd.LockRequest') -> <<"Etcd.LockRequest">>; +msg_name_to_fqbin('Etcd.LockResponse') -> <<"Etcd.LockResponse">>; +msg_name_to_fqbin('Etcd.UnlockRequest') -> <<"Etcd.UnlockRequest">>; +msg_name_to_fqbin('Etcd.UnlockResponse') -> <<"Etcd.UnlockResponse">>; +msg_name_to_fqbin('Etcd.CampaignRequest') -> <<"Etcd.CampaignRequest">>; +msg_name_to_fqbin('Etcd.CampaignResponse') -> <<"Etcd.CampaignResponse">>; +msg_name_to_fqbin('Etcd.LeaderKey') -> <<"Etcd.LeaderKey">>; +msg_name_to_fqbin('Etcd.LeaderRequest') -> <<"Etcd.LeaderRequest">>; +msg_name_to_fqbin('Etcd.LeaderResponse') -> <<"Etcd.LeaderResponse">>; +msg_name_to_fqbin('Etcd.ResignRequest') -> <<"Etcd.ResignRequest">>; +msg_name_to_fqbin('Etcd.ResignResponse') -> <<"Etcd.ResignResponse">>; +msg_name_to_fqbin('Etcd.ProclaimRequest') -> <<"Etcd.ProclaimRequest">>; +msg_name_to_fqbin('Etcd.ProclaimResponse') -> <<"Etcd.ProclaimResponse">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorSet') -> + <<"google.protobuf.FileDescriptorSet">>; +msg_name_to_fqbin('google.protobuf.FileDescriptorProto') -> + <<"google.protobuf.FileDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ExtensionRange') -> + <<"google.protobuf.DescriptorProto.ExtensionRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto.ReservedRange') -> + <<"google.protobuf.DescriptorProto.ReservedRange">>; +msg_name_to_fqbin('google.protobuf.DescriptorProto') -> + <<"google.protobuf.DescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FieldDescriptorProto') -> + <<"google.protobuf.FieldDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.OneofDescriptorProto') -> + <<"google.protobuf.OneofDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumDescriptorProto') -> + <<"google.protobuf.EnumDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.EnumValueDescriptorProto') -> + <<"google.protobuf.EnumValueDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.ServiceDescriptorProto') -> + <<"google.protobuf.ServiceDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.MethodDescriptorProto') -> + <<"google.protobuf.MethodDescriptorProto">>; +msg_name_to_fqbin('google.protobuf.FileOptions') -> + <<"google.protobuf.FileOptions">>; +msg_name_to_fqbin('google.protobuf.MessageOptions') -> + <<"google.protobuf.MessageOptions">>; +msg_name_to_fqbin('google.protobuf.FieldOptions') -> + <<"google.protobuf.FieldOptions">>; +msg_name_to_fqbin('google.protobuf.EnumOptions') -> + <<"google.protobuf.EnumOptions">>; +msg_name_to_fqbin('google.protobuf.EnumValueOptions') -> + <<"google.protobuf.EnumValueOptions">>; +msg_name_to_fqbin('google.protobuf.ServiceOptions') -> + <<"google.protobuf.ServiceOptions">>; +msg_name_to_fqbin('google.protobuf.MethodOptions') -> + <<"google.protobuf.MethodOptions">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption.NamePart') -> + <<"google.protobuf.UninterpretedOption.NamePart">>; +msg_name_to_fqbin('google.protobuf.UninterpretedOption') -> + <<"google.protobuf.UninterpretedOption">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo.Location') -> + <<"google.protobuf.SourceCodeInfo.Location">>; +msg_name_to_fqbin('google.protobuf.SourceCodeInfo') -> + <<"google.protobuf.SourceCodeInfo">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo.Annotation') -> + <<"google.protobuf.GeneratedCodeInfo.Annotation">>; +msg_name_to_fqbin('google.protobuf.GeneratedCodeInfo') -> + <<"google.protobuf.GeneratedCodeInfo">>; +msg_name_to_fqbin('mvccpb.KeyValue') -> <<"mvccpb.KeyValue">>; +msg_name_to_fqbin('mvccpb.Event') -> <<"mvccpb.Event">>; +msg_name_to_fqbin('authpb.UserAddOptions') -> <<"authpb.UserAddOptions">>; +msg_name_to_fqbin('authpb.User') -> <<"authpb.User">>; +msg_name_to_fqbin('authpb.Permission') -> <<"authpb.Permission">>; +msg_name_to_fqbin('authpb.Role') -> <<"authpb.Role">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +fqbin_to_enum_name(<<"Etcd.RangeRequest.SortOrder">>) -> + 'Etcd.RangeRequest.SortOrder'; +fqbin_to_enum_name(<<"Etcd.RangeRequest.SortTarget">>) -> + 'Etcd.RangeRequest.SortTarget'; +fqbin_to_enum_name(<<"Etcd.Compare.CompareResult">>) -> + 'Etcd.Compare.CompareResult'; +fqbin_to_enum_name(<<"Etcd.Compare.CompareTarget">>) -> + 'Etcd.Compare.CompareTarget'; +fqbin_to_enum_name(<<"Etcd.WatchCreateRequest.FilterType">>) -> + 'Etcd.WatchCreateRequest.FilterType'; +fqbin_to_enum_name(<<"Etcd.AlarmType">>) -> 'Etcd.AlarmType'; +fqbin_to_enum_name(<<"Etcd.AlarmRequest.AlarmAction">>) -> + 'Etcd.AlarmRequest.AlarmAction'; +fqbin_to_enum_name(<<"Etcd.HealthCheckResponse.ServingStatus">>) -> + 'Etcd.HealthCheckResponse.ServingStatus'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + 'google.protobuf.FieldDescriptorProto.Type'; +fqbin_to_enum_name(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + 'google.protobuf.FieldDescriptorProto.Label'; +fqbin_to_enum_name(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + 'google.protobuf.FileOptions.OptimizeMode'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.CType">>) -> + 'google.protobuf.FieldOptions.CType'; +fqbin_to_enum_name(<<"google.protobuf.FieldOptions.JSType">>) -> + 'google.protobuf.FieldOptions.JSType'; +fqbin_to_enum_name(<<"mvccpb.Event.EventType">>) -> 'mvccpb.Event.EventType'; +fqbin_to_enum_name(<<"authpb.Permission.Type">>) -> 'authpb.Permission.Type'; +fqbin_to_enum_name(E) -> + error({gpb_error, {badenum, E}}). + + +enum_name_to_fqbin('Etcd.RangeRequest.SortOrder') -> + <<"Etcd.RangeRequest.SortOrder">>; +enum_name_to_fqbin('Etcd.RangeRequest.SortTarget') -> + <<"Etcd.RangeRequest.SortTarget">>; +enum_name_to_fqbin('Etcd.Compare.CompareResult') -> + <<"Etcd.Compare.CompareResult">>; +enum_name_to_fqbin('Etcd.Compare.CompareTarget') -> + <<"Etcd.Compare.CompareTarget">>; +enum_name_to_fqbin('Etcd.WatchCreateRequest.FilterType') -> + <<"Etcd.WatchCreateRequest.FilterType">>; +enum_name_to_fqbin('Etcd.AlarmType') -> <<"Etcd.AlarmType">>; +enum_name_to_fqbin('Etcd.AlarmRequest.AlarmAction') -> + <<"Etcd.AlarmRequest.AlarmAction">>; +enum_name_to_fqbin('Etcd.HealthCheckResponse.ServingStatus') -> + <<"Etcd.HealthCheckResponse.ServingStatus">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Type') -> + <<"google.protobuf.FieldDescriptorProto.Type">>; +enum_name_to_fqbin('google.protobuf.FieldDescriptorProto.Label') -> + <<"google.protobuf.FieldDescriptorProto.Label">>; +enum_name_to_fqbin('google.protobuf.FileOptions.OptimizeMode') -> + <<"google.protobuf.FileOptions.OptimizeMode">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.CType') -> + <<"google.protobuf.FieldOptions.CType">>; +enum_name_to_fqbin('google.protobuf.FieldOptions.JSType') -> + <<"google.protobuf.FieldOptions.JSType">>; +enum_name_to_fqbin('mvccpb.Event.EventType') -> <<"mvccpb.Event.EventType">>; +enum_name_to_fqbin('authpb.Permission.Type') -> <<"authpb.Permission.Type">>; +enum_name_to_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_package_name() -> 'Etcd'. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> true. + + +source_basename() -> "router.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> + ["router.proto", "gogo.proto", "descriptor.proto", + "kv.proto", "auth.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> + ["router", "gogo", "descriptor", "kv", "auth"]. + + +get_msg_containment("router") -> + ['Etcd.AlarmMember', 'Etcd.AlarmRequest', + 'Etcd.AlarmResponse', 'Etcd.AuthDisableRequest', + 'Etcd.AuthDisableResponse', 'Etcd.AuthEnableRequest', + 'Etcd.AuthEnableResponse', 'Etcd.AuthRoleAddRequest', + 'Etcd.AuthRoleAddResponse', + 'Etcd.AuthRoleDeleteRequest', + 'Etcd.AuthRoleDeleteResponse', + 'Etcd.AuthRoleGetRequest', 'Etcd.AuthRoleGetResponse', + 'Etcd.AuthRoleGrantPermissionRequest', + 'Etcd.AuthRoleGrantPermissionResponse', + 'Etcd.AuthRoleListRequest', 'Etcd.AuthRoleListResponse', + 'Etcd.AuthRoleRevokePermissionRequest', + 'Etcd.AuthRoleRevokePermissionResponse', + 'Etcd.AuthUserAddRequest', 'Etcd.AuthUserAddResponse', + 'Etcd.AuthUserChangePasswordRequest', + 'Etcd.AuthUserChangePasswordResponse', + 'Etcd.AuthUserDeleteRequest', + 'Etcd.AuthUserDeleteResponse', + 'Etcd.AuthUserGetRequest', 'Etcd.AuthUserGetResponse', + 'Etcd.AuthUserGrantRoleRequest', + 'Etcd.AuthUserGrantRoleResponse', + 'Etcd.AuthUserListRequest', 'Etcd.AuthUserListResponse', + 'Etcd.AuthUserRevokeRoleRequest', + 'Etcd.AuthUserRevokeRoleResponse', + 'Etcd.AuthenticateRequest', 'Etcd.AuthenticateResponse', + 'Etcd.CampaignRequest', 'Etcd.CampaignResponse', + 'Etcd.CompactionRequest', 'Etcd.CompactionResponse', + 'Etcd.Compare', 'Etcd.DefragmentRequest', + 'Etcd.DefragmentResponse', 'Etcd.DeleteRangeRequest', + 'Etcd.DeleteRangeResponse', 'Etcd.HashKVRequest', + 'Etcd.HashKVResponse', 'Etcd.HashRequest', + 'Etcd.HashResponse', 'Etcd.HealthCheckRequest', + 'Etcd.HealthCheckResponse', 'Etcd.LeaderKey', + 'Etcd.LeaderRequest', 'Etcd.LeaderResponse', + 'Etcd.LeaseCheckpoint', 'Etcd.LeaseCheckpointRequest', + 'Etcd.LeaseCheckpointResponse', + 'Etcd.LeaseGrantRequest', 'Etcd.LeaseGrantResponse', + 'Etcd.LeaseKeepAliveRequest', + 'Etcd.LeaseKeepAliveResponse', + 'Etcd.LeaseLeasesRequest', 'Etcd.LeaseLeasesResponse', + 'Etcd.LeaseRevokeRequest', 'Etcd.LeaseRevokeResponse', + 'Etcd.LeaseStatus', 'Etcd.LeaseTimeToLiveRequest', + 'Etcd.LeaseTimeToLiveResponse', 'Etcd.LockRequest', + 'Etcd.LockResponse', 'Etcd.Member', + 'Etcd.MemberAddRequest', 'Etcd.MemberAddResponse', + 'Etcd.MemberListRequest', 'Etcd.MemberListResponse', + 'Etcd.MemberPromoteRequest', + 'Etcd.MemberPromoteResponse', + 'Etcd.MemberRemoveRequest', 'Etcd.MemberRemoveResponse', + 'Etcd.MemberUpdateRequest', 'Etcd.MemberUpdateResponse', + 'Etcd.MoveLeaderRequest', 'Etcd.MoveLeaderResponse', + 'Etcd.ProclaimRequest', 'Etcd.ProclaimResponse', + 'Etcd.PutRequest', 'Etcd.PutResponse', + 'Etcd.RangeRequest', 'Etcd.RangeResponse', + 'Etcd.RequestOp', 'Etcd.ResignRequest', + 'Etcd.ResignResponse', 'Etcd.ResponseHeader', + 'Etcd.ResponseOp', 'Etcd.SnapshotRequest', + 'Etcd.SnapshotResponse', 'Etcd.StatusRequest', + 'Etcd.StatusResponse', 'Etcd.TxnRequest', + 'Etcd.TxnResponse', 'Etcd.UnlockRequest', + 'Etcd.UnlockResponse', 'Etcd.WatchCancelRequest', + 'Etcd.WatchCreateRequest', 'Etcd.WatchProgressRequest', + 'Etcd.WatchRequest', 'Etcd.WatchResponse']; +get_msg_containment("gogo") -> []; +get_msg_containment("descriptor") -> + ['google.protobuf.DescriptorProto', + 'google.protobuf.DescriptorProto.ExtensionRange', + 'google.protobuf.DescriptorProto.ReservedRange', + 'google.protobuf.EnumDescriptorProto', + 'google.protobuf.EnumOptions', + 'google.protobuf.EnumValueDescriptorProto', + 'google.protobuf.EnumValueOptions', + 'google.protobuf.FieldDescriptorProto', + 'google.protobuf.FieldOptions', + 'google.protobuf.FileDescriptorProto', + 'google.protobuf.FileDescriptorSet', + 'google.protobuf.FileOptions', + 'google.protobuf.GeneratedCodeInfo', + 'google.protobuf.GeneratedCodeInfo.Annotation', + 'google.protobuf.MessageOptions', + 'google.protobuf.MethodDescriptorProto', + 'google.protobuf.MethodOptions', + 'google.protobuf.OneofDescriptorProto', + 'google.protobuf.ServiceDescriptorProto', + 'google.protobuf.ServiceOptions', + 'google.protobuf.SourceCodeInfo', + 'google.protobuf.SourceCodeInfo.Location', + 'google.protobuf.UninterpretedOption', + 'google.protobuf.UninterpretedOption.NamePart']; +get_msg_containment("kv") -> + ['mvccpb.Event', 'mvccpb.KeyValue']; +get_msg_containment("auth") -> + ['authpb.Permission', 'authpb.Role', 'authpb.User', + 'authpb.UserAddOptions']; +get_msg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_pkg_containment("router") -> 'Etcd'; +get_pkg_containment("gogo") -> gogoproto; +get_pkg_containment("descriptor") -> 'google.protobuf'; +get_pkg_containment("kv") -> mvccpb; +get_pkg_containment("auth") -> authpb; +get_pkg_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_service_containment("router") -> + ['Etcd.Auth', 'Etcd.Cluster', 'Etcd.Election', + 'Etcd.Health', 'Etcd.KV', 'Etcd.Lease', 'Etcd.Lock', + 'Etcd.Maintenance', 'Etcd.Watch']; +get_service_containment("gogo") -> []; +get_service_containment("descriptor") -> []; +get_service_containment("kv") -> []; +get_service_containment("auth") -> []; +get_service_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_rpc_containment("router") -> + [{'Etcd.KV', 'Range'}, {'Etcd.KV', 'Put'}, + {'Etcd.KV', 'DeleteRange'}, {'Etcd.KV', 'Txn'}, + {'Etcd.KV', 'Compact'}, {'Etcd.Watch', 'Watch'}, + {'Etcd.Lease', 'LeaseGrant'}, + {'Etcd.Lease', 'LeaseRevoke'}, + {'Etcd.Lease', 'LeaseKeepAlive'}, + {'Etcd.Lease', 'LeaseTimeToLive'}, + {'Etcd.Lease', 'LeaseLeases'}, + {'Etcd.Cluster', 'MemberAdd'}, + {'Etcd.Cluster', 'MemberRemove'}, + {'Etcd.Cluster', 'MemberUpdate'}, + {'Etcd.Cluster', 'MemberList'}, + {'Etcd.Cluster', 'MemberPromote'}, + {'Etcd.Maintenance', 'Alarm'}, + {'Etcd.Maintenance', 'Status'}, + {'Etcd.Maintenance', 'Defragment'}, + {'Etcd.Maintenance', 'Hash'}, + {'Etcd.Maintenance', 'HashKV'}, + {'Etcd.Maintenance', 'Snapshot'}, + {'Etcd.Maintenance', 'MoveLeader'}, + {'Etcd.Auth', 'AuthEnable'}, + {'Etcd.Auth', 'AuthDisable'}, + {'Etcd.Auth', 'Authenticate'}, {'Etcd.Auth', 'UserAdd'}, + {'Etcd.Auth', 'UserGet'}, {'Etcd.Auth', 'UserList'}, + {'Etcd.Auth', 'UserDelete'}, + {'Etcd.Auth', 'UserChangePassword'}, + {'Etcd.Auth', 'UserGrantRole'}, + {'Etcd.Auth', 'UserRevokeRole'}, + {'Etcd.Auth', 'RoleAdd'}, {'Etcd.Auth', 'RoleGet'}, + {'Etcd.Auth', 'RoleList'}, {'Etcd.Auth', 'RoleDelete'}, + {'Etcd.Auth', 'RoleGrantPermission'}, + {'Etcd.Auth', 'RoleRevokePermission'}, + {'Etcd.Health', 'Check'}, {'Etcd.Health', 'Watch'}, + {'Etcd.Lock', 'Lock'}, {'Etcd.Lock', 'Unlock'}, + {'Etcd.Election', 'Campaign'}, + {'Etcd.Election', 'Proclaim'}, + {'Etcd.Election', 'Leader'}, + {'Etcd.Election', 'Observe'}, + {'Etcd.Election', 'Resign'}]; +get_rpc_containment("gogo") -> []; +get_rpc_containment("descriptor") -> []; +get_rpc_containment("kv") -> []; +get_rpc_containment("auth") -> []; +get_rpc_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_enum_containment("router") -> + ['Etcd.AlarmRequest.AlarmAction', 'Etcd.AlarmType', + 'Etcd.Compare.CompareResult', + 'Etcd.Compare.CompareTarget', + 'Etcd.HealthCheckResponse.ServingStatus', + 'Etcd.RangeRequest.SortOrder', + 'Etcd.RangeRequest.SortTarget', + 'Etcd.WatchCreateRequest.FilterType']; +get_enum_containment("gogo") -> []; +get_enum_containment("descriptor") -> + ['google.protobuf.FieldDescriptorProto.Label', + 'google.protobuf.FieldDescriptorProto.Type', + 'google.protobuf.FieldOptions.CType', + 'google.protobuf.FieldOptions.JSType', + 'google.protobuf.FileOptions.OptimizeMode']; +get_enum_containment("kv") -> + ['mvccpb.Event.EventType']; +get_enum_containment("auth") -> + ['authpb.Permission.Type']; +get_enum_containment(P) -> + error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"Etcd.RequestOp">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmMember">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.UserAddOptions">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseStatus">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption.NamePart">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchProgressRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchCancelRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.UnlockRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResignRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MoveLeaderRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberUpdateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberRemoveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberPromoteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseTimeToLiveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DefragmentRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CompactionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGetRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserDeleteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthDisableRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.KeyValue">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ReservedRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto.ExtensionRange">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.TxnResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.RangeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.PutResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ProclaimResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MoveLeaderResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberUpdateResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberRemoveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberPromoteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.MemberAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LockResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseTimeToLiveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseRevokeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseLeasesResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DefragmentResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.Compare">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserRevokeRoleResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGetResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserDeleteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserChangePasswordResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleRevokePermissionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGrantPermissionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthEnableResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Permission">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.UninterpretedOption">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo.Location">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo.Annotation">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.SourceCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.OneofDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.GeneratedCodeInfo">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumDescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.DescriptorProto">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResponseOp">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.User">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResponseHeader">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.Member">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.ServiceOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MethodOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.MessageOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FieldOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumValueOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.EnumOptions">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"mvccpb.Event">>) -> "kv"; +get_proto_by_msg_name_as_fqbin(<<"google.protobuf.FileDescriptorSet">>) -> "descriptor"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.WatchCreateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.TxnRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.StatusRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.SnapshotRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.RangeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.PutRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ProclaimRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LockRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseRevokeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseLeasesRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseKeepAliveRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseGrantRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpointRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpoint">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HealthCheckRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashKVRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DeleteRangeRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CampaignRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthenticateRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserRevokeRoleRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGrantRoleRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserChangePasswordRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleRevokePermissionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleListRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGrantPermissionRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGetRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleDeleteRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleAddRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthEnableRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmRequest">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"authpb.Role">>) -> "auth"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.UnlockResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.StatusResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.SnapshotResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.ResignResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseKeepAliveResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseGrantResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaseCheckpointResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HealthCheckResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.HashKVResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.DeleteRangeResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CompactionResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.CampaignResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthenticateResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthUserGrantRoleResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleListResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleGetResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleDeleteResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthRoleAddResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AuthDisableResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.AlarmResponse">>) -> "router"; +get_proto_by_msg_name_as_fqbin(<<"Etcd.LeaderKey">>) -> "router"; +get_proto_by_msg_name_as_fqbin(E) -> + error({gpb_error, {badmsg, E}}). + + +get_proto_by_service_name_as_fqbin(<<"Etcd.Cluster">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Maintenance">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Lease">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.KV">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Watch">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Health">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Auth">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Lock">>) -> "router"; +get_proto_by_service_name_as_fqbin(<<"Etcd.Election">>) -> "router"; +get_proto_by_service_name_as_fqbin(E) -> + error({gpb_error, {badservice, E}}). + + +get_proto_by_enum_name_as_fqbin(<<"Etcd.RangeRequest.SortOrder">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.HealthCheckResponse.ServingStatus">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.RangeRequest.SortTarget">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.Compare.CompareTarget">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.Compare.CompareResult">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"authpb.Permission.Type">>) -> "auth"; +get_proto_by_enum_name_as_fqbin(<<"mvccpb.Event.EventType">>) -> "kv"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FileOptions.OptimizeMode">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.JSType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldOptions.CType">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Type">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.WatchCreateRequest.FilterType">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.AlarmType">>) -> "router"; +get_proto_by_enum_name_as_fqbin(<<"google.protobuf.FieldDescriptorProto.Label">>) -> + "descriptor"; +get_proto_by_enum_name_as_fqbin(<<"Etcd.AlarmRequest.AlarmAction">>) -> "router"; +get_proto_by_enum_name_as_fqbin(E) -> + error({gpb_error, {badenum, E}}). + + +get_protos_by_pkg_name_as_fqbin(<<"authpb">>) -> ["auth"]; +get_protos_by_pkg_name_as_fqbin(<<"mvccpb">>) -> ["kv"]; +get_protos_by_pkg_name_as_fqbin(<<"Etcd">>) -> ["router"]; +get_protos_by_pkg_name_as_fqbin(<<"google.protobuf">>) -> + ["descriptor"]; +get_protos_by_pkg_name_as_fqbin(<<"gogoproto">>) -> ["gogo"]; +get_protos_by_pkg_name_as_fqbin(E) -> + error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.11.1". + +gpb_version_as_list() -> + [4,11,1]. diff --git a/deps/getopt/LICENSE.txt b/deps/getopt/LICENSE.txt new file mode 100644 index 0000000..755f847 --- /dev/null +++ b/deps/getopt/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2009 Juan Jose Comellas +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 Juan Jose Comellas 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 HOLDER 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/deps/getopt/Makefile b/deps/getopt/Makefile new file mode 100644 index 0000000..3845ac5 --- /dev/null +++ b/deps/getopt/Makefile @@ -0,0 +1,22 @@ +IGNORE_DEPS += edown eper eunit_formatters meck node_package rebar_lock_deps_plugin rebar_vsn_plugin reltool_util +C_SRC_DIR = /path/do/not/exist +C_SRC_TYPE = rebar +DRV_CFLAGS = -fPIC +export DRV_CFLAGS +ERLANG_ARCH = 64 +export ERLANG_ARCH +ERLC_OPTS = +debug_info +export ERLC_OPTS +ERLC_OPTS += -Dunicode_str=1 + + + +rebar_dep: preprocess pre-deps deps pre-app app + +preprocess:: + +pre-deps:: + +pre-app:: + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) \ No newline at end of file diff --git a/deps/getopt/README.md b/deps/getopt/README.md new file mode 100644 index 0000000..dd5f5b6 --- /dev/null +++ b/deps/getopt/README.md @@ -0,0 +1,487 @@ +Getopt for Erlang +================= + +Command-line parsing module that uses a syntax similar to that of GNU *getopt*. + + +Requirements +------------ + +You should only need a somewhat recent version of Erlang/OTP. The module has +been tested with all versions of Erlang starting with R13B and ending with 20. + +You also need a recent version of [rebar3](http://www.rebar3.org/) in +the system path. + +Installation +------------ + +To compile the module you simply run `rebar3 compile`. + +To run the unit tests run `rebar3 eunit`. + +To build the (very) limited documentation run `rebar edoc`. + +To use getopt in your project you can just add it as a dependency in your +`rebar.config` file in the following way: +```sh +{deps, + [ + {getopt, "1.0.1"} + ] +} +``` + + +Usage +----- + +The `getopt` module provides four functions: + +```erlang +parse([{Name, Short, Long, ArgSpec, Help}], Args :: string() | [string()]) -> + {ok, {Options, NonOptionArgs}} | {error, {Reason, Data}} + +tokenize(CmdLine :: string()) -> [string()] + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string()) -> ok + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string(), + CmdLineTail :: string()) -> ok + +usage([{Name, Short, Long, ArgSpec, Help}], ProgramName :: string(), + CmdLineTail :: string(), OptionsTail :: [{string(), string}]) -> ok +``` + +The `parse/2` function receives a list of tuples with the command line option +specifications. The type specification for the tuple is: + +```erlang +-type arg_type() :: 'atom' | 'binary' | 'boolean' | 'float' | 'integer' | 'string'. + +-type arg_value() :: atom() | binary() | boolean() | float() | integer() | string(). + +-type arg_spec() :: arg_type() | {arg_type(), arg_value()} | undefined. + +-type option_spec() :: { + Name :: atom(), + Short :: char() | undefined, + Long :: string() | undefined, + ArgSpec :: arg_spec(), + Help :: string() | undefined + }. +``` + +The elements of the tuple are: + + - `Name`: name of the option. + - `Short`: character for the short option (e.g. $i for -i). + - `Long`: string for the long option (e.g. "info" for --info). + - `ArgSpec`: data type and optional default value the argument will be converted to. + - `Help`: help message that is shown for the option when `usage/2` is called. + +e.g. + +```erlang +{port, $p, "port", {integer, 5432}, "Database server port"} +``` + +The second parameter receives the list of arguments as passed to the `main/1` +function in escripts or the unparsed command line as a string. + +If the function is successful parsing the command line arguments it will return +a tuple containing the parsed options and the non-option arguments. The options +will be represented by a list of key-value pairs with the `Name` of the +option as *key* and the argument from the command line as *value*. If the option +doesn't have an argument, only the atom corresponding to its `Name` will be +added to the list of options. For the example given above we could get something +like `{port, 5432}`. The non-option arguments are just a list of strings with +all the arguments that did not have corresponding options. + +e.g. Given the following option specifications: + +```erlang +OptSpecList = + [ + {host, $h, "host", {string, "localhost"}, "Database server host"}, + {port, $p, "port", integer, "Database server port"}, + {dbname, undefined, "dbname", {string, "users"}, "Database name"}, + {xml, $x, undefined, undefined, "Output data in XML"}, + {verbose, $v, "verbose", integer, "Verbosity level"}, + {file, undefined, undefined, string, "Output file"} + ]. +``` + +And this command line: + +```erlang +Args = "-h myhost --port=1000 -x myfile.txt -vvv dummy1 dummy2" +``` + +Which could also be passed in the format the `main/1` function receives the arguments in escripts: + +```erlang +Args = ["-h", "myhost", "--port=1000", "-x", "file.txt", "-vvv", "dummy1", "dummy2"]. +``` + +The call to `getopt:parse/2`: + +```erlang +getopt:parse(OptSpecList, Args). +``` + +Will return: + +```erlang +{ok,{[{host,"myhost"}, + {port,1000}, + xml, + {file,"file.txt"}, + {dbname,"users"}, + {verbose,3}], + ["dummy1","dummy2"]}} +``` + +The `tokenize/1` function will separate a command line string into +tokens, taking into account whether an argument is single or double +quoted, a character is escaped or if there are environment variables to +be expanded. e.g.: + +```erlang +getopt:tokenize(" --name John\\ Smith --path \"John's Files\" -u ${USER}"). +``` + +Will return something like: + +```erlang +["--name","John Smith","--path","John's Files","-u","jsmith"] +``` + +The other functions exported by the `getopt` module (`usage/2`, `usage/3` +and `usage/4`) are used to show the command line syntax for the program. +For example, given the above-mentioned option specifications, the call to +`getopt:usage/2`: + +```erlang +getopt:usage(OptSpecList, "ex1"). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v Verbosity level + Output file + +This call to `getopt:usage/3` will add a string after the usage command line: + +```erlang +getopt:usage(OptSpecList, "ex1", "[var=value ...] [command ...]"). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v ] [var=value ...] [command ...] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v, --verbose Verbosity level + Output file + +Whereas this call to `getopt:usage/3` will also add some lines to the options +help text: + +```erlang +getopt:usage(OptSpecList, "ex1", "[var=value ...] [command ...]", + [{"var=value", "Variables that will affect the execution (e.g. debug=1)"}, + {"command", "Commands that will be executed (e.g. count)"}]). +``` + +Will show (on *standard_error*): + + Usage: ex1 [-h ] [-p ] [--dbname ] [-x] [-v ] [var=value ...] [command ...] + + -h, --host Database server host + -p, --port Database server port + --dbname Database name + -x Output data in XML + -v, --verbose Verbosity level + Output file + var=value Variables that will affect the execution (e.g. debug=1) + command Commands that will be executed (e.g. count) + + +Command-line Syntax +------------------- + +The syntax supported by the `getopt` module is very similar to that followed +by GNU programs, which is described [here](http://www.gnu.org/s/libc/manual/html_node/Argument-Syntax.html). + +Options can have both short (single character) and long (string) option names. + +A short option can have the following syntax: + + -a Single option 'a', no argument or implicit boolean argument + -a foo Single option 'a', argument "foo" + -afoo Single option 'a', argument "foo" + -abc Multiple options: 'a'; 'b'; 'c' + -bcafoo Multiple options: 'b'; 'c'; 'a' with argument "foo" + -aaa Multiple repetitions of option 'a' + +A long option can have the following syntax: + + --foo Single option 'foo', no argument + --foo=bar Single option 'foo', argument "bar" + --foo bar Single option 'foo', argument "bar" + + +Argument Types +-------------- + +The arguments allowed for options are: *atom*; *binary*; *boolean*; *float*; *integer*; *string*. +The `getopt` module checks every argument to see if it can be converted to its +correct type. + +In the case of boolean arguments, the following values (in lower or +upper case) are considered `true`: *true*; *t*; *yes*; *y*; *on*; *enabled*; *1*. +These ones are considered `false`: *false*; *f*; *no*; *n*; *off*; *disabled*; *0*. + +Numeric arguments can only be negative when passed as part of an assignment expression. + +e.g. `--increment=-100` is a valid expression; whereas `--increment -100` is invalid + + +Implicit Arguments +------------------ + +The arguments for options with the *boolean* and *integer* data types can sometimes +be omitted. In those cases the value assigned to the option is *true* for *boolean* +arguments and *1* for integer arguments. + + +Multiple Repetitions +-------------------- + +An option can be repeated several times, in which case there will be multiple +appearances of the option in the resulting list. The only exceptions are short +options with integer arguments. In that particular case, each appearance of +the short option within a single command line argument will increment the +number that will be returned for that specific option. + +e.g. Given an option specification list with the following format: + +```erlang +OptSpecList = + [ + {define, $D, "define", string, "Define a variable"}, + {verbose, $v, "verbose", integer, "Verbosity level"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, "-DFOO -DVAR1=VAL1 -DBAR --verbose --verbose=3 -v -vvvv dummy"). +``` + +would return: + +```erlang +{ok,{[{define,"FOO"}, {define,"VAR1=VAL1"}, {define,"BAR"}, + {verbose,1}, {verbose,3}, {verbose,1}, {verbose,4}], + ["dummy"]}} +``` + + +Positional Options +------------------ + +We can also have options with neither short nor long option names. In this case, +the options will be taken according to their position in the option specification +list passed to `getopt:/parse2`. + +For example, with the following option specifications: + +```erlang +OptSpecList = + [ + {xml, $x, "xml", undefined, "Output data as XML"}, + {dbname, undefined, undefined, string, "Database name"}, + {output_file, undefined, undefined, string, "File where the data will be saved to"} + ]. +``` + +This call to `getopt:parse/2`: + +```erlang +getopt:parse(OptSpecList, "-x mydb file.out dummy dummy"). +``` + +Will return: + +```erlang +{ok,{[xml,{dbname,"mydb"},{output_file,"file.out"}], + ["dummy","dummy"]}} +``` + + +Option Terminators +------------------ + +The string `--` is considered an option terminator. This means that all the +command-line arguments after it are considered non-option arguments and will be +returned without being evaluated even if they follow the *getopt* syntax. + +e.g. This invocation using the first option specification list in the document: + +```erlang +getopt:parse(OptSpecList, "-h myhost -p 1000 -- --dbname mydb dummy"). +``` + +will return: + +```erlang +{ok,{[{host,"myhost"}, {port,1000},{dbname,"users"}], + ["--dbname","mydb","dummy"]}} +``` + +Notice that the *dbname* option was assigned the value `users` instead of `mydb`. +This happens because the option terminator prevented *getopt* from evaluating it +and the default value was assigned to it. + + +Non-option Arguments +-------------------- + +The single `-` character is always considered as a non-option argument. + +e.g. This invocation using the specification list from the previous example: + +```erlang +getopt:parse(OptSpecList, "-h myhost -p 1000 - --dbname mydb dummy"). +``` + +will return: + +```erlang +{ok,{[{host,"myhost"}, {port,1000}, {dbname,"mydb"}], + ["-","dummy"]}} +``` + + +Arguments with embedded whitespace +---------------------------------- + +Arguments that have embedded whitespace have to be quoted with either +single or double quotes to be considered as a single +argument. + + +e.g. Given an option specification list with the following format: + +```erlang +OptSpecList = + [ + {define, $D, "define", string, "Define a variable"}, + {user, $u, "user", string, "User name"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, + "-D'FOO=VAR 123' --define \"VAR WITH SPACES\" -u\"my user name\""). +``` + +would return: + +```erlang +{ok,{[{define,"FOO=VAR 123"}, + {define,"VAR WITH SPACES"}, + {user,"my user name"}], + []}} +``` + +When parsing a command line with unclosed quotes the last argument +will be a single string starting at the position where the last quote +was entered. + +e.g. The following invocation: + +```erlang +getopt:parse(OptSpecList, "--user ' my user ' \"argument with unclosed quotes"). +``` + +would return: + +```erlang +{ok,{[{user," my user "}], + ["argument with unclosed quotes"]}} +``` + + +Environment variable expansion +------------------------------ + +`getopt:parse/2` will expand environment variables when used with a command +line that is passed as a single string. The formats that are supported +for environment variable expansion are: + + - $VAR (simple Unix/bash format) + - ${VAR} (full Unix/bash format) + - %VAR% (Windows format) + +If a variable is not present in the environment it will not be +expanded. Variables can be expanded within double-quoted and free +arguments. *getopt* will not expand environment variables within +single-quoted arguments. + +e.g. Given the following option specification list: + +```erlang +OptSpecList = + [ + {path, $p, "path", string, "File path"} + ]. +``` + +The following invocation: + +```erlang +getopt:parse(OptSpecList, "--path ${PATH} $NONEXISTENT_DUMMY_VAR"). +``` + +would return (depending on the value of your PATH variable) something like: + +```erlang +{ok,{[{path, "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}], + ["$NONEXISTENT_DUMMY_VAR"]}} +``` + +Currently, *getopt* does not perform wildcard expansion of file paths. + + +Escaping arguments +================== + +Any character can be escaped by prepending the \ (backslash) character +to it. + +e.g. + +```erlang +getopt:parse(OptSpecList, "--path /john\\'s\\ files dummy"). +``` + +Will return: + +```erlang +{ok,{[{path,"/john's files"}],["dummy"]}} +``` diff --git a/deps/getopt/rebar.config b/deps/getopt/rebar.config new file mode 100644 index 0000000..6f41233 --- /dev/null +++ b/deps/getopt/rebar.config @@ -0,0 +1,30 @@ +{erl_opts, [warn_unused_vars, + warn_export_all, + warn_shadow_vars, + warn_unused_import, + warn_unused_function, + warn_bif_clash, + warn_unused_record, + warn_deprecated_function, + warn_obsolete_guard, + strict_validation, + warn_export_vars, + warn_exported_vars, + warn_missing_spec, + warn_untyped_record, debug_info, + {platform_define, "^2", unicode_str} +]}. + +{dialyzer, + [ + {warnings, [no_return, no_undefined_callbacks, no_unused]}, + {get_warnings, true}, + {plt_apps, top_level_deps}, + {plt_location, local}, + {base_plt_apps, [kernel, stdlib, sasl, inets, crypto, public_key, ssl, + runtime_tools, erts, compiler, tools, syntax_tools, hipe, + mnesia]}, + {base_plt_location, global} + ]}. + +{xref_checks, [undefined_function_calls]}. diff --git a/deps/getopt/rebar.lock b/deps/getopt/rebar.lock new file mode 100644 index 0000000..57afcca --- /dev/null +++ b/deps/getopt/rebar.lock @@ -0,0 +1 @@ +[]. diff --git a/deps/getopt/src/getopt.app.src b/deps/getopt/src/getopt.app.src new file mode 100644 index 0000000..ce7499a --- /dev/null +++ b/deps/getopt/src/getopt.app.src @@ -0,0 +1,9 @@ +{application,getopt, + [{description,"Command-line options parser for Erlang"}, + {vsn,"1.0.1"}, + {modules,[]}, + {registered,[]}, + {maintainers,["Juan Jose Comellas"]}, + {licenses,["BSD"]}, + {links,[{"GitHub","https://github.com/jcomellas/getopt"}]}, + {applications,[kernel,stdlib]}]}. diff --git a/deps/getopt/src/getopt.erl b/deps/getopt/src/getopt.erl new file mode 100644 index 0000000..b5ee7b4 --- /dev/null +++ b/deps/getopt/src/getopt.erl @@ -0,0 +1,947 @@ +%%%------------------------------------------------------------------- +%%% @author Juan Jose Comellas +%%% @copyright (C) 2009-2017 Juan Jose Comellas +%%% @doc Parses command line options with a format similar to that of GNU getopt. +%%% @end +%%% +%%% This source file is subject to the New BSD License. You should have received +%%% a copy of the New BSD license with this software. If not, it can be +%%% retrieved from: http://www.opensource.org/licenses/bsd-license.php +%%%------------------------------------------------------------------- +-module(getopt). +-author('juanjo@comellas.org'). + +-export([parse/2, check/2, parse_and_check/2, format_error/2, + usage/2, usage/3, usage/4, usage/6, tokenize/1]). +-export([usage_cmd_line/2]). + +-define(LINE_LENGTH, 75). +-define(MIN_USAGE_COMMAND_LINE_OPTION_LENGTH, 25). + +%% Position of each field in the option specification tuple. +-define(OPT_NAME, 1). +-define(OPT_SHORT, 2). +-define(OPT_LONG, 3). +-define(OPT_ARG, 4). +-define(OPT_HELP, 5). + +-define(IS_OPT_SPEC(Opt), (tuple_size(Opt) =:= ?OPT_HELP)). +-define(IS_WHITESPACE(Char), ((Char) =:= $\s orelse (Char) =:= $\t orelse + (Char) =:= $\n orelse (Char) =:= $\r)). + +%% Atom indicating the data type that an argument can be converted to. +-type arg_type() :: 'atom' | 'binary' | 'boolean' | 'float' | 'integer' | 'string'. +%% Data type that an argument can be converted to. +-type arg_value() :: atom() | binary() | boolean() | float() | integer() | string(). +%% Argument specification. +-type arg_spec() :: arg_type() | {arg_type(), arg_value()} | undefined. +%% Option type and optional default argument. +-type simple_option() :: atom(). +-type compound_option() :: {atom(), arg_value()}. +-type option() :: simple_option() | compound_option(). +%% Command line option specification. +-type option_spec() :: { + Name :: atom(), + Short :: char() | undefined, + Long :: string() | undefined, + ArgSpec :: arg_spec(), + Help :: string() | undefined + }. +%% Output streams +-type output_stream() :: 'standard_io' | 'standard_error'. + +%% For internal use +-type usage_line() :: {OptionText :: string(), HelpText :: string()}. +-type usage_line_with_length() :: {OptionLength :: non_neg_integer(), OptionText :: string(), HelpText :: string()}. + + +-export_type([arg_type/0, arg_value/0, arg_spec/0, simple_option/0, compound_option/0, option/0, option_spec/0]). + + +%% @doc Parse the command line options and arguments returning a list of tuples +%% and/or atoms using the Erlang convention for sending options to a +%% function. Additionally perform check if all required options (the ones +%% without default values) are present. The function is a combination of +%% two calls: parse/2 and check/2. +-spec parse_and_check([option_spec()], string() | [string()]) -> + {ok, {[option()], [string()]}} | {error, {Reason :: atom(), Data :: term()}}. +parse_and_check(OptSpecList, CmdLine) when is_list(OptSpecList), is_list(CmdLine) -> + case parse(OptSpecList, CmdLine) of + {ok, {Opts, _}} = Result -> + case check(OptSpecList, Opts) of + ok -> Result; + Error -> Error + end; + Error -> + Error + end. + +%% @doc Check the parsed command line arguments returning ok if all required +%% options (i.e. that don't have defaults) are present, and returning +%% error otherwise. +-spec check([option_spec()], [option()]) -> + ok | {error, {Reason :: atom(), Option :: atom()}}. +check(OptSpecList, ParsedOpts) when is_list(OptSpecList), is_list(ParsedOpts) -> + try + RequiredOpts = [Name || {Name, _, _, Arg, _} <- OptSpecList, + not is_tuple(Arg) andalso Arg =/= undefined], + lists:foreach(fun (Option) -> + case proplists:is_defined(Option, ParsedOpts) of + true -> + ok; + false -> + throw({error, {missing_required_option, Option}}) + end + end, RequiredOpts) + catch + _:Error -> + Error + end. + + +%% @doc Parse the command line options and arguments returning a list of tuples +%% and/or atoms using the Erlang convention for sending options to a +%% function. +-spec parse([option_spec()], string() | [string()]) -> + {ok, {[option()], [string()]}} | {error, {Reason :: atom(), Data :: term()}}. +parse(OptSpecList, CmdLine) when is_list(CmdLine) -> + try + Args = if + is_integer(hd(CmdLine)) -> tokenize(CmdLine); + true -> CmdLine + end, + parse(OptSpecList, [], [], 0, Args) + catch + throw: {error, {_Reason, _Data}} = Error -> + Error + end. + + +-spec parse([option_spec()], [option()], [string()], integer(), [string()]) -> + {ok, {[option()], [string()]}}. +%% Process the option terminator. +parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, ["--" | Tail]) -> + %% Any argument present after the terminator is not considered an option. + {ok, {lists:reverse(append_default_options(OptSpecList, OptAcc)), lists:reverse(ArgAcc, Tail)}}; +%% Process long options. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, ["--" ++ OptArg = OptStr | Tail]) -> + parse_long_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Tail, OptStr, OptArg); +%% Process short options. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, ["-" ++ ([_Char | _] = OptArg) = OptStr | Tail]) -> + parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Tail, OptStr, OptArg); +%% Process non-option arguments. +parse(OptSpecList, OptAcc, ArgAcc, ArgPos, [Arg | Tail]) -> + case find_non_option_arg(OptSpecList, ArgPos) of + {value, OptSpec} when ?IS_OPT_SPEC(OptSpec) -> + parse(OptSpecList, add_option_with_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos + 1, Tail); + false -> + parse(OptSpecList, OptAcc, [Arg | ArgAcc], ArgPos, Tail) + end; +parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, []) -> + %% Once we have completed gathering the options we add the ones that were + %% not present but had default arguments in the specification. + {ok, {lists:reverse(append_default_options(OptSpecList, OptAcc)), lists:reverse(ArgAcc)}}. + + +%% @doc Format the error code returned by prior call to parse/2 or check/2. +-spec format_error([option_spec()], {error, {Reason :: atom(), Data :: term()}} | + {Reason :: term(), Data :: term()}) -> string(). +format_error(OptSpecList, {error, Reason}) -> + format_error(OptSpecList, Reason); +format_error(OptSpecList, {missing_required_option, Name}) -> + OptStr = case lists:keyfind(Name, 1, OptSpecList) of + {Name, undefined, undefined, _Type, _Help} -> ["<", to_string(Name), ">"]; + {_Name, undefined, Long, _Type, _Help} -> ["--", Long]; + {_Name, Short, undefined, _Type, _Help} -> ["-", Short]; + {_Name, Short, Long, _Type, _Help} -> ["-", Short, " (", Long, ")"] + end, + lists:flatten(["missing required option: ", OptStr]); +format_error(_OptSpecList, {invalid_option, OptStr}) -> + lists:flatten(["invalid option: ", to_string(OptStr)]); +format_error(_OptSpecList, {invalid_option_arg, {Name, Arg}}) -> + lists:flatten(["option \'", to_string(Name) ++ "\' has invalid argument: ", to_string(Arg)]); +format_error(_OptSpecList, {invalid_option_arg, OptStr}) -> + lists:flatten(["invalid option argument: ", to_string(OptStr)]); +format_error(_OptSpecList, {Reason, Data}) -> + lists:flatten([to_string(Reason), " ", to_string(Data)]). + + +%% @doc Parse a long option, add it to the option accumulator and continue +%% parsing the rest of the arguments recursively. +%% A long option can have the following syntax: +%% --foo Single option 'foo', no argument +%% --foo=bar Single option 'foo', argument "bar" +%% --foo bar Single option 'foo', argument "bar" +-spec parse_long_option([option_spec()], [option()], [string()], integer(), [string()], string(), string()) -> + {ok, {[option()], [string()]}}. +parse_long_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptArg) -> + case split_assigned_arg(OptArg) of + {Long, Arg} -> + %% Get option that has its argument within the same string + %% separated by an equal ('=') character (e.g. "--port=1000"). + parse_long_option_assigned_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, Long, Arg); + + Long -> + case lists:keyfind(Long, ?OPT_LONG, OptSpecList) of + {Name, _Short, Long, undefined, _Help} -> + parse(OptSpecList, [Name | OptAcc], ArgAcc, ArgPos, Args); + + {_Name, _Short, Long, _ArgSpec, _Help} = OptSpec -> + %% The option argument string is empty, but the option requires + %% an argument, so we look into the next string in the list. + %% e.g ["--port", "1000"] + parse_long_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptSpec); + false -> + throw({error, {invalid_option, OptStr}}) + end + end. + + +%% @doc Parse an option where the argument is 'assigned' in the same string using +%% the '=' character, add it to the option accumulator and continue parsing the +%% rest of the arguments recursively. This syntax is only valid for long options. +-spec parse_long_option_assigned_arg([option_spec()], [option()], [string()], integer(), + [string()], string(), string(), string()) -> + {ok, {[option()], [string()]}}. +parse_long_option_assigned_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, Long, Arg) -> + case lists:keyfind(Long, ?OPT_LONG, OptSpecList) of + {_Name, _Short, Long, ArgSpec, _Help} = OptSpec -> + case ArgSpec of + undefined -> + throw({error, {invalid_option_arg, OptStr}}); + _ -> + parse(OptSpecList, add_option_with_assigned_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos, Args) + end; + false -> + throw({error, {invalid_option, OptStr}}) + end. + + +%% @doc Split an option string that may contain an option with its argument +%% separated by an equal ('=') character (e.g. "port=1000"). +-spec split_assigned_arg(string()) -> {Name :: string(), Arg :: string()} | string(). +split_assigned_arg(OptStr) -> + split_assigned_arg(OptStr, OptStr, []). + +split_assigned_arg(_OptStr, "=" ++ Tail, Acc) -> + {lists:reverse(Acc), Tail}; +split_assigned_arg(OptStr, [Char | Tail], Acc) -> + split_assigned_arg(OptStr, Tail, [Char | Acc]); +split_assigned_arg(OptStr, [], _Acc) -> + OptStr. + + +%% @doc Retrieve the argument for an option from the next string in the list of +%% command-line parameters or set the value of the argument from the argument +%% specification (for boolean and integer arguments), if possible. +parse_long_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, {Name, _Short, _Long, ArgSpec, _Help} = OptSpec) -> + ArgSpecType = arg_spec_type(ArgSpec), + case Args =:= [] orelse is_implicit_arg(ArgSpecType, hd(Args)) of + true -> + parse(OptSpecList, add_option_with_implicit_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + false -> + [Arg | Tail] = Args, + try + parse(OptSpecList, [{Name, to_type(ArgSpecType, Arg)} | OptAcc], ArgAcc, ArgPos, Tail) + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end + end. + + +%% @doc Parse a short option, add it to the option accumulator and continue +%% parsing the rest of the arguments recursively. +%% A short option can have the following syntax: +%% -a Single option 'a', no argument or implicit boolean argument +%% -a foo Single option 'a', argument "foo" +%% -afoo Single option 'a', argument "foo" +%% -abc Multiple options: 'a'; 'b'; 'c' +%% -bcafoo Multiple options: 'b'; 'c'; 'a' with argument "foo" +%% -aaa Multiple repetitions of option 'a' (only valid for options with integer arguments) +-spec parse_short_option([option_spec()], [option()], [string()], integer(), [string()], string(), string()) -> + {ok, {[option()], [string()]}}. +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptArg) -> + parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, first, OptArg). + +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptStr, OptPos, [Short | Arg]) -> + case lists:keyfind(Short, ?OPT_SHORT, OptSpecList) of + {Name, Short, _Long, undefined, _Help} -> + parse_short_option(OptSpecList, [Name | OptAcc], ArgAcc, ArgPos, Args, OptStr, first, Arg); + + {_Name, Short, _Long, ArgSpec, _Help} = OptSpec -> + %% The option has a specification, so it requires an argument. + case Arg of + [] -> + %% The option argument string is empty, but the option requires + %% an argument, so we look into the next string in the list. + parse_short_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, OptSpec, OptPos); + + _ -> + case is_valid_arg(ArgSpec, Arg) of + true -> + parse(OptSpecList, add_option_with_arg(OptSpec, Arg, OptAcc), ArgAcc, ArgPos, Args); + _ -> + NewOptAcc = case OptPos of + first -> add_option_with_implicit_arg(OptSpec, OptAcc); + _ -> add_option_with_implicit_incrementable_arg(OptSpec, OptAcc) + end, + parse_short_option(OptSpecList, NewOptAcc, ArgAcc, ArgPos, Args, OptStr, next, Arg) + end + end; + + false -> + throw({error, {invalid_option, OptStr}}) + end; +parse_short_option(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, _OptStr, _OptPos, []) -> + parse(OptSpecList, OptAcc, ArgAcc, ArgPos, Args). + + +%% @doc Retrieve the argument for an option from the next string in the list of +%% command-line parameters or set the value of the argument from the argument +%% specification (for boolean and integer arguments), if possible. +parse_short_option_next_arg(OptSpecList, OptAcc, ArgAcc, ArgPos, Args, {Name, _Short, _Long, ArgSpec, _Help} = OptSpec, OptPos) -> + case Args =:= [] orelse is_implicit_arg(ArgSpec, hd(Args)) of + true when OptPos =:= first -> + parse(OptSpecList, add_option_with_implicit_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + true -> + parse(OptSpecList, add_option_with_implicit_incrementable_arg(OptSpec, OptAcc), ArgAcc, ArgPos, Args); + false -> + [Arg | Tail] = Args, + try + parse(OptSpecList, [{Name, to_type(ArgSpec, Arg)} | OptAcc], ArgAcc, ArgPos, Tail) + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end + end. + + +%% @doc Find the option for the discrete argument in position specified in the +%% Pos argument. +-spec find_non_option_arg([option_spec()], integer()) -> {value, option_spec()} | false. +find_non_option_arg([{_Name, undefined, undefined, _ArgSpec, _Help} = OptSpec | _Tail], 0) -> + {value, OptSpec}; +find_non_option_arg([{_Name, undefined, undefined, _ArgSpec, _Help} | Tail], Pos) -> + find_non_option_arg(Tail, Pos - 1); +find_non_option_arg([_Head | Tail], Pos) -> + find_non_option_arg(Tail, Pos); +find_non_option_arg([], _Pos) -> + false. + + +%% @doc Append options that were not present in the command line arguments with +%% their default arguments. +-spec append_default_options([option_spec()], [option()]) -> [option()]. +append_default_options([{Name, _Short, _Long, {_Type, DefaultArg}, _Help} | Tail], OptAcc) -> + append_default_options(Tail, + case lists:keymember(Name, 1, OptAcc) of + false -> + [{Name, DefaultArg} | OptAcc]; + _ -> + OptAcc + end); +%% For options with no default argument. +append_default_options([_Head | Tail], OptAcc) -> + append_default_options(Tail, OptAcc); +append_default_options([], OptAcc) -> + OptAcc. + + +%% @doc Add an option with argument converting it to the data type indicated by the +%% argument specification. +-spec add_option_with_arg(option_spec(), string(), [option()]) -> [option()]. +add_option_with_arg({Name, _Short, _Long, ArgSpec, _Help} = OptSpec, Arg, OptAcc) -> + case is_valid_arg(ArgSpec, Arg) of + true -> + try + [{Name, to_type(ArgSpec, Arg)} | OptAcc] + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end; + false -> + add_option_with_implicit_arg(OptSpec, OptAcc) + end. + + +%% @doc Add an option with argument that was part of an assignment expression +%% (e.g. "--verbose=3") converting it to the data type indicated by the +%% argument specification. +-spec add_option_with_assigned_arg(option_spec(), string(), [option()]) -> [option()]. +add_option_with_assigned_arg({Name, _Short, _Long, ArgSpec, _Help}, Arg, OptAcc) -> + try + [{Name, to_type(ArgSpec, Arg)} | OptAcc] + catch + error:_ -> + throw({error, {invalid_option_arg, {Name, Arg}}}) + end. + + +%% @doc Add an option that required an argument but did not have one. Some data +%% types (boolean, integer) allow implicit or assumed arguments. +-spec add_option_with_implicit_arg(option_spec(), [option()]) -> [option()]. +add_option_with_implicit_arg({Name, _Short, _Long, ArgSpec, _Help}, OptAcc) -> + case arg_spec_type(ArgSpec) of + boolean -> + %% Special case for boolean arguments: if there is no argument we + %% set the value to 'true'. + [{Name, true} | OptAcc]; + integer -> + %% Special case for integer arguments: if the option had not been set + %% before we set the value to 1. This is needed to support options like + %% "-v" to return something like {verbose, 1}. + [{Name, 1} | OptAcc]; + _ -> + throw({error, {missing_option_arg, Name}}) + end. + + +%% @doc Add an option with an implicit or assumed argument. +-spec add_option_with_implicit_incrementable_arg(option_spec() | arg_spec(), [option()]) -> [option()]. +add_option_with_implicit_incrementable_arg({Name, _Short, _Long, ArgSpec, _Help}, OptAcc) -> + case arg_spec_type(ArgSpec) of + boolean -> + %% Special case for boolean arguments: if there is no argument we + %% set the value to 'true'. + [{Name, true} | OptAcc]; + integer -> + %% Special case for integer arguments: if the option had not been set + %% before we set the value to 1; if not we increment the previous value + %% the option had. This is needed to support options like "-vvv" to + %% return something like {verbose, 3}. + case OptAcc of + [{Name, Count} | Tail] -> + [{Name, Count + 1} | Tail]; + _ -> + [{Name, 1} | OptAcc] + end; + _ -> + throw({error, {missing_option_arg, Name}}) + end. + + +%% @doc Retrieve the data type form an argument specification. +-spec arg_spec_type(arg_spec()) -> arg_type() | undefined. +arg_spec_type({Type, _DefaultArg}) -> + Type; +arg_spec_type(Type) when is_atom(Type) -> + Type. + + +%% @doc Convert an argument string to its corresponding data type. +-spec to_type(arg_spec() | arg_type(), string()) -> arg_value(). +to_type({Type, _DefaultArg}, Arg) -> + to_type(Type, Arg); +to_type(binary, Arg) -> + list_to_binary(Arg); +to_type(atom, Arg) -> + list_to_atom(Arg); +to_type(integer, Arg) -> + list_to_integer(Arg); +to_type(float, Arg) -> + list_to_float(Arg); +to_type(boolean, Arg) -> + LowerArg = lowercase(Arg), + case is_arg_true(LowerArg) of + true -> + true; + _ -> + case is_arg_false(LowerArg) of + true -> + false; + false -> + erlang:error(badarg) + end + end; +to_type(_Type, Arg) -> + Arg. + + +-spec is_arg_true(string()) -> boolean(). +is_arg_true(Arg) -> + (Arg =:= "true") orelse (Arg =:= "t") orelse + (Arg =:= "yes") orelse (Arg =:= "y") orelse + (Arg =:= "on") orelse (Arg =:= "enabled") orelse + (Arg =:= "1"). + + +-spec is_arg_false(string()) -> boolean(). +is_arg_false(Arg) -> + (Arg =:= "false") orelse (Arg =:= "f") orelse + (Arg =:= "no") orelse (Arg =:= "n") orelse + (Arg =:= "off") orelse (Arg =:= "disabled") orelse + (Arg =:= "0"). + + +-spec is_valid_arg(arg_spec(), nonempty_string()) -> boolean(). +is_valid_arg({Type, _DefaultArg}, Arg) -> + is_valid_arg(Type, Arg); +is_valid_arg(boolean, Arg) -> + is_boolean_arg(Arg); +is_valid_arg(integer, Arg) -> + is_non_neg_integer_arg(Arg); +is_valid_arg(float, Arg) -> + is_non_neg_float_arg(Arg); +is_valid_arg(_Type, _Arg) -> + true. + + +-spec is_implicit_arg(arg_spec(), nonempty_string()) -> boolean(). +is_implicit_arg({Type, _DefaultArg}, Arg) -> + is_implicit_arg(Type, Arg); +is_implicit_arg(boolean, Arg) -> + not is_boolean_arg(Arg); +is_implicit_arg(integer, Arg) -> + not is_integer_arg(Arg); +is_implicit_arg(_Type, _Arg) -> + false. + + +-spec is_boolean_arg(string()) -> boolean(). +is_boolean_arg(Arg) -> + LowerArg = lowercase(Arg), + is_arg_true(LowerArg) orelse is_arg_false(LowerArg). + + +-spec is_integer_arg(string()) -> boolean(). +is_integer_arg("-" ++ Tail) -> + is_non_neg_integer_arg(Tail); +is_integer_arg(Arg) -> + is_non_neg_integer_arg(Arg). + + +-spec is_non_neg_integer_arg(string()) -> boolean(). +is_non_neg_integer_arg([Head | Tail]) when Head >= $0, Head =< $9 -> + is_non_neg_integer_arg(Tail); +is_non_neg_integer_arg([_Head | _Tail]) -> + false; +is_non_neg_integer_arg([]) -> + true. + + +-spec is_non_neg_float_arg(string()) -> boolean(). +is_non_neg_float_arg([Head | Tail]) when (Head >= $0 andalso Head =< $9) orelse Head =:= $. -> + is_non_neg_float_arg(Tail); +is_non_neg_float_arg([_Head | _Tail]) -> + false; +is_non_neg_float_arg([]) -> + true. + + +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. +-spec usage([option_spec()], string()) -> ok. +usage(OptSpecList, ProgramName) -> + usage(OptSpecList, ProgramName, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. +-spec usage([option_spec()], string(), output_stream() | string()) -> ok. +usage(OptSpecList, ProgramName, OutputStream) when is_atom(OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList)), unicode:characters_to_list(usage_options(OptSpecList))]); +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail argument +%% is a string that is added to the end of the usage command line. +usage(OptSpecList, ProgramName, CmdLineTail) -> + usage(OptSpecList, ProgramName, CmdLineTail, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail argument +%% is a string that is added to the end of the usage command line. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), output_stream() | [{string(), string()}]) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, OutputStream) when is_atom(OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), unicode:characters_to_list(usage_options(OptSpecList))]); +%% @doc Show a message on standard_error indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail and OptionsTail +%% arguments are a string that is added to the end of the usage command line +%% and a list of tuples that are added to the end of the options' help lines. +usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail) -> + usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail, standard_error). + + +%% @doc Show a message on standard_error or standard_io indicating the command line options and +%% arguments that are supported by the program. The CmdLineTail and OptionsTail +%% arguments are a string that is added to the end of the usage command line +%% and a list of tuples that are added to the end of the options' help lines. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), + [{OptionName :: string(), Help :: string()}], output_stream()) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, OptionsTail, OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), unicode:characters_to_list(usage_options(OptSpecList, OptionsTail))]). + +%% @doc Show a message on standard_error or standard_io indicating the +%% command line options and arguments that are supported by the +%% program. The Description allows for structured command line usage +%% that works in addition to the standard options, and appears between +%% the usage_cmd_line and usage_options sections. The CmdLineTail and +%% OptionsTail arguments are a string that is added to the end of the +%% usage command line and a list of tuples that are added to the end of +%% the options' help lines. +-spec usage([option_spec()], ProgramName :: string(), CmdLineTail :: string(), + Description :: string(), + [{OptionName :: string(), Help :: string()}], + output_stream()) -> ok. +usage(OptSpecList, ProgramName, CmdLineTail, Description, OptionsTail, OutputStream) -> + io:format(OutputStream, "~ts~n~n~ts~n~n~ts~n", + [unicode:characters_to_list(usage_cmd_line(ProgramName, OptSpecList, CmdLineTail)), Description, unicode:characters_to_list(usage_options(OptSpecList, OptionsTail))]). + + +-spec usage_cmd_line(ProgramName :: string(), [option_spec()]) -> iolist(). +usage_cmd_line(ProgramName, OptSpecList) -> + usage_cmd_line(ProgramName, OptSpecList, ""). + +-spec usage_cmd_line(ProgramName :: string(), [option_spec()], CmdLineTail :: string()) -> iolist(). +usage_cmd_line(ProgramName, OptSpecList, CmdLineTail) -> + Prefix = "Usage: " ++ ProgramName, + PrefixLength = length(Prefix), + LineLength = line_length(), + %% Only align the command line options after the program name when there is + %% enough room to do so (i.e. at least 25 characters). If not, show the + %% command line options below the program name with a 2-character indentation. + if + (LineLength - PrefixLength) > ?MIN_USAGE_COMMAND_LINE_OPTION_LENGTH -> + Indentation = lists:duplicate(PrefixLength, $\s), + [FirstOptLine | OptLines] = usage_cmd_line_options(LineLength - PrefixLength, OptSpecList, CmdLineTail), + IndentedOptLines = [[Indentation | OptLine] || OptLine <- OptLines], + [Prefix, FirstOptLine | IndentedOptLines]; + true -> + IndentedOptLines = [[" " | OptLine] || OptLine <- usage_cmd_line_options(LineLength, OptSpecList, CmdLineTail)], + [Prefix, $\n, IndentedOptLines] + end. + + +%% @doc Return a list of the lines corresponding to the usage command line +%% already wrapped according to the maximum MaxLineLength. +-spec usage_cmd_line_options(MaxLineLength :: non_neg_integer(), [option_spec()], CmdLineTail :: string()) -> iolist(). +usage_cmd_line_options(MaxLineLength, OptSpecList, CmdLineTail) -> + usage_cmd_line_options(MaxLineLength, OptSpecList ++ lexemes(CmdLineTail, " "), [], 0, []). + +usage_cmd_line_options(MaxLineLength, [OptSpec | Tail], LineAcc, LineAccLength, Acc) -> + Option = [$\s | lists:flatten(usage_cmd_line_option(OptSpec))], + OptionLength = length(Option), + %% We accumulate the options in LineAcc until its length is over the + %% maximum allowed line length. When that happens, we append the line in + %% LineAcc to the list with all the lines in the command line (Acc). + NewLineAccLength = LineAccLength + OptionLength, + if + NewLineAccLength < MaxLineLength -> + usage_cmd_line_options(MaxLineLength, Tail, [Option | LineAcc], NewLineAccLength, Acc); + true -> + usage_cmd_line_options(MaxLineLength, Tail, [Option], OptionLength + 1, + [lists:reverse([$\n | LineAcc]) | Acc]) + end; +usage_cmd_line_options(MaxLineLength, [], [_ | _] = LineAcc, _LineAccLength, Acc) -> + %% If there was a non-empty line in LineAcc when there are no more options + %% to process, we add it to the list of lines to return. + usage_cmd_line_options(MaxLineLength, [], [], 0, [lists:reverse(LineAcc) | Acc]); +usage_cmd_line_options(_MaxLineLength, [], [], _LineAccLength, Acc) -> + lists:reverse(Acc). + + +-spec usage_cmd_line_option(option_spec()) -> string(). +usage_cmd_line_option({_Name, Short, _Long, undefined, _Help}) when Short =/= undefined -> + %% For options with short form and no argument. + [$[, $-, Short, $]]; +usage_cmd_line_option({_Name, _Short, Long, undefined, _Help}) when Long =/= undefined -> + %% For options with only long form and no argument. + [$[, $-, $-, Long, $]]; +usage_cmd_line_option({_Name, _Short, _Long, undefined, _Help}) -> + []; +usage_cmd_line_option({Name, Short, Long, ArgSpec, _Help}) when is_atom(ArgSpec) -> + %% For options with no default argument. + if + %% For options with short form and argument. + Short =/= undefined -> [$[, $-, Short, $\s, $<, atom_to_list(Name), $>, $]]; + %% For options with only long form and argument. + Long =/= undefined -> [$[, $-, $-, Long, $\s, $<, atom_to_list(Name), $>, $]]; + %% For options with neither short nor long form and argument. + true -> [$[, $<, atom_to_list(Name), $>, $]] + end; +usage_cmd_line_option({Name, Short, Long, ArgSpec, _Help}) when is_tuple(ArgSpec) -> + %% For options with default argument. + if + %% For options with short form and default argument. + Short =/= undefined -> [$[, $-, Short, $\s, $[, $<, atom_to_list(Name), $>, $], $]]; + %% For options with only long form and default argument. + Long =/= undefined -> [$[, $-, $-, Long, $\s, $[, $<, atom_to_list(Name), $>, $], $]]; + %% For options with neither short nor long form and default argument. + true -> [$[, $<, atom_to_list(Name), $>, $]] + end; +usage_cmd_line_option(Option) when is_list(Option) -> + %% For custom options that are added to the command line. + Option. + + +%% @doc Return a list of help messages to print for each of the options and arguments. +-spec usage_options([option_spec()]) -> [string()]. +usage_options(OptSpecList) -> + usage_options(OptSpecList, []). + + +%% @doc Return a list of usage lines to print for each of the options and arguments. +-spec usage_options([option_spec()], [{OptionName :: string(), Help :: string()}]) -> [string()]. +usage_options(OptSpecList, CustomHelp) -> + %% Add the usage lines corresponding to the option specifications. + {MaxOptionLength0, UsageLines0} = add_option_spec_help_lines(OptSpecList, 0, []), + %% Add the custom usage lines. + {MaxOptionLength, UsageLines} = add_custom_help_lines(CustomHelp, MaxOptionLength0, UsageLines0), + MaxLineLength = line_length(), + lists:reverse([format_usage_line(MaxOptionLength + 1, MaxLineLength, UsageLine) || UsageLine <- UsageLines]). + + +-spec add_option_spec_help_lines([option_spec()], PrevMaxOptionLength :: non_neg_integer(), [usage_line_with_length()]) -> + {MaxOptionLength :: non_neg_integer(), [usage_line_with_length()]}. +add_option_spec_help_lines([OptSpec | Tail], PrevMaxOptionLength, Acc) -> + OptionText = usage_option_text(OptSpec), + HelpText = usage_help_text(OptSpec), + {MaxOptionLength, ColsWithLength} = get_max_option_length({OptionText, HelpText}, PrevMaxOptionLength), + add_option_spec_help_lines(Tail, MaxOptionLength, [ColsWithLength | Acc]); +add_option_spec_help_lines([], MaxOptionLength, Acc) -> + {MaxOptionLength, Acc}. + + +-spec add_custom_help_lines([usage_line()], PrevMaxOptionLength :: non_neg_integer(), [usage_line_with_length()]) -> + {MaxOptionLength :: non_neg_integer(), [usage_line_with_length()]}. +add_custom_help_lines([CustomCols | Tail], PrevMaxOptionLength, Acc) -> + {MaxOptionLength, ColsWithLength} = get_max_option_length(CustomCols, PrevMaxOptionLength), + add_custom_help_lines(Tail, MaxOptionLength, [ColsWithLength | Acc]); +add_custom_help_lines([], MaxOptionLength, Acc) -> + {MaxOptionLength, Acc}. + + +-spec usage_option_text(option_spec()) -> string(). +usage_option_text({Name, undefined, undefined, _ArgSpec, _Help}) -> + %% Neither short nor long form (non-option argument). + "<" ++ atom_to_list(Name) ++ ">"; +usage_option_text({_Name, Short, undefined, _ArgSpec, _Help}) -> + %% Only short form. + [$-, Short]; +usage_option_text({_Name, undefined, Long, _ArgSpec, _Help}) -> + %% Only long form. + [$-, $- | Long]; +usage_option_text({_Name, Short, Long, _ArgSpec, _Help}) -> + %% Both short and long form. + [$-, Short, $,, $\s, $-, $- | Long]. + + +-spec usage_help_text(option_spec()) -> string(). +usage_help_text({_Name, _Short, _Long, {_ArgType, ArgValue}, [_ | _] = Help}) -> + Help ++ " [default: " ++ default_arg_value_to_string(ArgValue) ++ "]"; +usage_help_text({_Name, _Short, _Long, _ArgSpec, Help}) -> + Help. + + +%% @doc Calculate the maximum width of the column that shows the option's short +%% and long form. +-spec get_max_option_length(usage_line(), PrevMaxOptionLength :: non_neg_integer()) -> + {MaxOptionLength :: non_neg_integer(), usage_line_with_length()}. +get_max_option_length({OptionText, HelpText}, PrevMaxOptionLength) -> + OptionLength = length(OptionText), + {erlang:max(OptionLength, PrevMaxOptionLength), {OptionLength, OptionText, HelpText}}. + + +%% @doc Format the usage line that is shown for the options' usage. Each usage +%% line has 2 columns. The first column shows the options in their short +%% and long form. The second column shows the wrapped (if necessary) help +%% text lines associated with each option. e.g.: +%% +%% -h, --host Database server host name or IP address; this is the +%% hostname of the server where the database is running +%% [default: localhost] +%% -p, --port Database server port [default: 1000] +%% +-spec format_usage_line(MaxOptionLength :: non_neg_integer(), MaxLineLength :: non_neg_integer(), + usage_line_with_length()) -> iolist(). +format_usage_line(MaxOptionLength, MaxLineLength, {OptionLength, OptionText, [_ | _] = HelpText}) + when MaxOptionLength < (MaxLineLength div 2) -> + %% If the width of the column where the options are shown is smaller than + %% half the width of a console line then we show the help text line aligned + %% next to its corresponding option, with a separation of at least 2 + %% characters. + [Head | Tail] = wrap_text_line(MaxLineLength - MaxOptionLength - 3, HelpText), + FirstLineIndentation = lists:duplicate(MaxOptionLength - OptionLength + 1, $\s), + Indentation = [$\n | lists:duplicate(MaxOptionLength + 3, $\s)], + [" ", OptionText, FirstLineIndentation, Head, + [[Indentation, Line] || Line <- Tail], $\n]; +format_usage_line(_MaxOptionLength, MaxLineLength, {_OptionLength, OptionText, [_ | _] = HelpText}) -> + %% If the width of the first column is bigger than the width of a console + %% line, we show the help text on the next line with an indentation of 6 + %% characters. + HelpLines = wrap_text_line(MaxLineLength - 6, HelpText), + [" ", OptionText, [["\n ", Line] || Line <- HelpLines], $\n]; +format_usage_line(_MaxOptionLength, _MaxLineLength, {_OptionLength, OptionText, _HelpText}) -> + [" ", OptionText, $\n]. + + +%% @doc Wrap a text line converting it into several text lines so that the +%% length of each one of them is never over Length characters. +-spec wrap_text_line(Length :: non_neg_integer(), Text :: string()) -> [string()]. +wrap_text_line(Length, Text) -> + wrap_text_line(Length, Text, [], 0, []). + +wrap_text_line(Length, [Char | Tail], Acc, Count, CurrentLineAcc) when Count < Length -> + wrap_text_line(Length, Tail, Acc, Count + 1, [Char | CurrentLineAcc]); +wrap_text_line(Length, [_ | _] = Help, Acc, Count, CurrentLineAcc) -> + %% Look for the first whitespace character in the current (reversed) line + %% buffer to get a wrapped line. If there is no whitespace just cut the + %% line at the position corresponding to the maximum length. + {NextLineAcc, WrappedLine} = case cspan(CurrentLineAcc, " \t") of + WhitespacePos when WhitespacePos < Count -> + lists:split(WhitespacePos, CurrentLineAcc); + _ -> + {[], CurrentLineAcc} + end, + wrap_text_line(Length, Help, [lists:reverse(WrappedLine) | Acc], length(NextLineAcc), NextLineAcc); +wrap_text_line(_Length, [], Acc, _Count, [_ | _] = CurrentLineAcc) -> + %% If there was a non-empty line when we reached the buffer, add it to the accumulator + lists:reverse([lists:reverse(CurrentLineAcc) | Acc]); +wrap_text_line(_Length, [], Acc, _Count, _CurrentLineAcc) -> + lists:reverse(Acc). + + +default_arg_value_to_string(Value) when is_atom(Value) -> + atom_to_list(Value); +default_arg_value_to_string(Value) when is_binary(Value) -> + binary_to_list(Value); +default_arg_value_to_string(Value) when is_integer(Value) -> + integer_to_list(Value); +default_arg_value_to_string(Value) when is_float(Value) -> + lists:flatten(io_lib:format("~w", [Value])); +default_arg_value_to_string(Value) -> + Value. + + +%% @doc Tokenize a command line string with support for single and double +%% quoted arguments (needed for arguments that have embedded whitespace). +%% The function also supports the expansion of environment variables in +%% both the Unix (${VAR}; $VAR) and Windows (%VAR%) formats. It does NOT +%% support wildcard expansion of paths. +-spec tokenize(CmdLine :: string()) -> [nonempty_string()]. +tokenize(CmdLine) -> + tokenize(CmdLine, [], []). + +-spec tokenize(CmdLine :: string(), Acc :: [string()], ArgAcc :: string()) -> [string()]. +tokenize([Sep | Tail], Acc, ArgAcc) when ?IS_WHITESPACE(Sep) -> + NewAcc = case ArgAcc of + [_ | _] -> + %% Found separator: add to the list of arguments. + [lists:reverse(ArgAcc) | Acc]; + [] -> + %% Found separator with no accumulated argument; discard it. + Acc + end, + tokenize(Tail, NewAcc, []); +tokenize([QuotationMark | Tail], Acc, ArgAcc) when QuotationMark =:= $"; QuotationMark =:= $' -> + %% Quoted argument (might contain spaces, tabs, etc.) + tokenize_quoted_arg(QuotationMark, Tail, Acc, ArgAcc); +tokenize([Char | _Tail] = CmdLine, Acc, ArgAcc) when Char =:= $$; Char =:= $% -> + %% Unix and Windows environment variable expansion: ${VAR}; $VAR; %VAR% + {NewCmdLine, Var} = expand_env_var(CmdLine), + tokenize(NewCmdLine, Acc, lists:reverse(Var, ArgAcc)); +tokenize([$\\, Char | Tail], Acc, ArgAcc) -> + %% Escaped char. + tokenize(Tail, Acc, [Char | ArgAcc]); +tokenize([Char | Tail], Acc, ArgAcc) -> + tokenize(Tail, Acc, [Char | ArgAcc]); +tokenize([], Acc, []) -> + lists:reverse(Acc); +tokenize([], Acc, ArgAcc) -> + lists:reverse([lists:reverse(ArgAcc) | Acc]). + +-spec tokenize_quoted_arg(QuotationMark :: char(), CmdLine :: string(), Acc :: [string()], ArgAcc :: string()) -> [string()]. +tokenize_quoted_arg(QuotationMark, [QuotationMark | Tail], Acc, ArgAcc) -> + %% End of quoted argument + tokenize(Tail, Acc, ArgAcc); +tokenize_quoted_arg(QuotationMark, [$\\, Char | Tail], Acc, ArgAcc) -> + %% Escaped char. + tokenize_quoted_arg(QuotationMark, Tail, Acc, [Char | ArgAcc]); +tokenize_quoted_arg($" = QuotationMark, [Char | _Tail] = CmdLine, Acc, ArgAcc) when Char =:= $$; Char =:= $% -> + %% Unix and Windows environment variable expansion (only for double-quoted arguments): ${VAR}; $VAR; %VAR% + {NewCmdLine, Var} = expand_env_var(CmdLine), + tokenize_quoted_arg(QuotationMark, NewCmdLine, Acc, lists:reverse(Var, ArgAcc)); +tokenize_quoted_arg(QuotationMark, [Char | Tail], Acc, ArgAcc) -> + tokenize_quoted_arg(QuotationMark, Tail, Acc, [Char | ArgAcc]); +tokenize_quoted_arg(_QuotationMark, CmdLine, Acc, ArgAcc) -> + tokenize(CmdLine, Acc, ArgAcc). + + +-spec expand_env_var(CmdLine :: nonempty_string()) -> {string(), string()}. +expand_env_var(CmdLine) -> + case CmdLine of + "${" ++ Tail -> + expand_env_var("${", $}, Tail, []); + "$" ++ Tail -> + expand_env_var("$", Tail, []); + "%" ++ Tail -> + expand_env_var("%", $%, Tail, []) + end. + +-spec expand_env_var(Prefix :: string(), EndMark :: char(), CmdLine :: string(), Acc :: string()) -> {string(), string()}. +expand_env_var(Prefix, EndMark, [Char | Tail], Acc) + when (Char >= $A andalso Char =< $Z) orelse (Char >= $a andalso Char =< $z) orelse + (Char >= $0 andalso Char =< $9) orelse (Char =:= $_) -> + expand_env_var(Prefix, EndMark, Tail, [Char | Acc]); +expand_env_var(Prefix, EndMark, [EndMark | Tail], Acc) -> + {Tail, get_env_var(Prefix, [EndMark], Acc)}; +expand_env_var(Prefix, _EndMark, CmdLine, Acc) -> + {CmdLine, Prefix ++ lists:reverse(Acc)}. + + +-spec expand_env_var(Prefix :: string(), CmdLine :: string(), Acc :: string()) -> {string(), string()}. +expand_env_var(Prefix, [Char | Tail], Acc) + when (Char >= $A andalso Char =< $Z) orelse (Char >= $a andalso Char =< $z) orelse + (Char >= $0 andalso Char =< $9) orelse (Char =:= $_) -> + expand_env_var(Prefix, Tail, [Char | Acc]); +expand_env_var(Prefix, CmdLine, Acc) -> + {CmdLine, get_env_var(Prefix, "", Acc)}. + + +-spec get_env_var(Prefix :: string(), Suffix :: string(), Acc :: string()) -> string(). +get_env_var(Prefix, Suffix, [_ | _] = Acc) -> + Name = lists:reverse(Acc), + %% Only expand valid/existing variables. + case os:getenv(Name) of + false -> Prefix ++ Name ++ Suffix; + Value -> Value + end; +get_env_var(Prefix, Suffix, []) -> + Prefix ++ Suffix. + + +-spec line_length() -> 0..?LINE_LENGTH. +line_length() -> + case io:columns() of + {ok, Columns} when Columns < ?LINE_LENGTH -> + Columns - 1; + _ -> + ?LINE_LENGTH + end. + + +-spec to_string(term()) -> string(). +to_string(List) when is_list(List) -> + case io_lib:printable_list(List) of + true -> List; + false -> io_lib:format("~p", [List]) + end; +to_string(Atom) when is_atom(Atom) -> + atom_to_list(Atom); +to_string(Value) -> + io_lib:format("~p", [Value]). + +%% OTP-20/21 conversion to unicode string module +-ifdef(unicode_str). +lowercase(Str) -> string:lowercase(Str). +lexemes(Str, Separators) -> string:lexemes(Str, Separators). +cspan(Str, Chars) -> length(element(1,string:take(Str, Chars, true))). +-else. +lowercase(Str) -> string:to_lower(Str). +lexemes(Str, Separators) -> string:tokens(Str, Separators). +cspan(Str, Chars) -> string:cspan(Str, Chars). +-endif. + diff --git a/deps/gun/LICENSE b/deps/gun/LICENSE new file mode 100644 index 0000000..26142cc --- /dev/null +++ b/deps/gun/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2013-2018, Loïc Hoguin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/gun/Makefile b/deps/gun/Makefile new file mode 100644 index 0000000..e4c6156 --- /dev/null +++ b/deps/gun/Makefile @@ -0,0 +1,58 @@ +# See LICENSE for licensing information. + +PROJECT = gun +PROJECT_DESCRIPTION = HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP. +PROJECT_VERSION = 1.3.2 + +# Options. + +CT_OPTS += -pa test -ct_hooks gun_ct_hook [] # -boot start_sasl + +# Dependencies. + +LOCAL_DEPS = ssl + +DEPS = cowlib +dep_cowlib = git https://github.com/ninenines/cowlib 2.6.0 + +DOC_DEPS = asciideck + +TEST_DEPS = $(if $(CI_ERLANG_MK),ci.erlang.mk) ct_helper cowboy +dep_ct_helper = git https://github.com/extend/ct_helper.git master +dep_cowboy_commit = 2.6.0 + +# CI configuration. + +dep_ci.erlang.mk = git https://github.com/ninenines/ci.erlang.mk master +DEP_EARLY_PLUGINS = ci.erlang.mk + +AUTO_CI_OTP ?= OTP-20+ +AUTO_CI_HIPE ?= OTP-LATEST +# AUTO_CI_ERLLVM ?= OTP-LATEST +AUTO_CI_WINDOWS ?= OTP-20+ + +# Standard targets. + +include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) + +# Generate rebar.config on build. + +app:: rebar.config + +# h2specd setup. + +GOPATH := $(ERLANG_MK_TMP)/gopath +export GOPATH + +H2SPECD := $(GOPATH)/src/github.com/summerwind/h2spec/h2specd +export H2SPECD + +# @todo It would be better to allow these dependencies to be specified +# on a per-target basis instead of for all targets. +test-build:: $(H2SPECD) + +$(H2SPECD): + $(gen_verbose) mkdir -p $(GOPATH)/src/github.com/summerwind + - $(verbose) git clone --depth 1 https://github.com/summerwind/h2spec $(dir $(H2SPECD)) + - $(verbose) $(MAKE) -C $(dir $(H2SPECD)) build MAKEFLAGS= + - $(verbose) go build -o $(H2SPECD) $(dir $(H2SPECD))/cmd/h2spec/h2specd.go diff --git a/deps/gun/README.asciidoc b/deps/gun/README.asciidoc new file mode 100644 index 0000000..7421830 --- /dev/null +++ b/deps/gun/README.asciidoc @@ -0,0 +1,42 @@ += Gun + +Gun is an Erlang HTTP client with support for HTTP/1.1, HTTP/2 and Websocket. + +== Goals + +Gun aims to provide an *easy to use* client compatible with +HTTP/1.1, HTTP/2 and Websocket. + +Gun is *always connected*. It will maintain a permanent +connection to the server, reopening it as soon as the server +closes it, saving time for the requests that come in. + +All connections are *supervised* automatically, allowing +developers to focus on writing their code without worrying. + +== Sponsors + +The project is currently sponsored by +https://kato.im[Kato.im] and https://sameroom.io[Sameroom]. + +The now removed SPDY implementation was sponsored by +http://www.leofs.org[LeoFS Cloud Storage]. + +== Online documentation + +* https://ninenines.eu/docs/en/gun/1.3/guide[User guide] +* https://ninenines.eu/docs/en/gun/1.3/manual[Function reference] + +== Offline documentation + +* While still online, run `make docs` +* User guide available in `doc/` in PDF and HTML formats +* Function reference man pages available in `doc/man3/` and `doc/man7/` +* Run `make install-docs` to install man pages on your system +* Full documentation in Asciidoc available in `doc/src/` + +== Getting help + +* Official IRC Channel: #ninenines on irc.freenode.net +* https://github.com/ninenines/gun/issues[Issues tracker] +* https://ninenines.eu/services/[Commercial Support] diff --git a/deps/gun/erlang.mk b/deps/gun/erlang.mk new file mode 100644 index 0000000..fb33c5d --- /dev/null +++ b/deps/gun/erlang.mk @@ -0,0 +1,7287 @@ +# Copyright (c) 2013-2016, Loïc Hoguin +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +.PHONY: all app apps deps search rel relup docs install-docs check tests clean distclean help erlang-mk + +ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) +export ERLANG_MK_FILENAME + +ERLANG_MK_VERSION = 6c8664c +ERLANG_MK_WITHOUT = + +# Make 3.81 and 3.82 are deprecated. + +ifeq ($(MAKE_VERSION),3.81) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +ifeq ($(MAKE_VERSION),3.82) +$(warning Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html) +endif + +# Core configuration. + +PROJECT ?= $(notdir $(CURDIR)) +PROJECT := $(strip $(PROJECT)) + +PROJECT_VERSION ?= rolling +PROJECT_MOD ?= $(PROJECT)_app +PROJECT_ENV ?= [] + +# Verbosity. + +V ?= 0 + +verbose_0 = @ +verbose_2 = set -x; +verbose = $(verbose_$(V)) + +gen_verbose_0 = @echo " GEN " $@; +gen_verbose_2 = set -x; +gen_verbose = $(gen_verbose_$(V)) + +# Temporary files directory. + +ERLANG_MK_TMP ?= $(CURDIR)/.erlang.mk +export ERLANG_MK_TMP + +# "erl" command. + +ERL = erl +A0 -noinput -boot start_clean + +# Platform detection. + +ifeq ($(PLATFORM),) +UNAME_S := $(shell uname -s) + +ifeq ($(UNAME_S),Linux) +PLATFORM = linux +else ifeq ($(UNAME_S),Darwin) +PLATFORM = darwin +else ifeq ($(UNAME_S),SunOS) +PLATFORM = solaris +else ifeq ($(UNAME_S),GNU) +PLATFORM = gnu +else ifeq ($(UNAME_S),FreeBSD) +PLATFORM = freebsd +else ifeq ($(UNAME_S),NetBSD) +PLATFORM = netbsd +else ifeq ($(UNAME_S),OpenBSD) +PLATFORM = openbsd +else ifeq ($(UNAME_S),DragonFly) +PLATFORM = dragonfly +else ifeq ($(shell uname -o),Msys) +PLATFORM = msys2 +else +$(error Unable to detect platform. Please open a ticket with the output of uname -a.) +endif + +export PLATFORM +endif + +# Core targets. + +all:: deps app rel + +# Noop to avoid a Make warning when there's nothing to do. +rel:: + $(verbose) : + +relup:: deps app + +check:: tests + +clean:: clean-crashdump + +clean-crashdump: +ifneq ($(wildcard erl_crash.dump),) + $(gen_verbose) rm -f erl_crash.dump +endif + +distclean:: clean distclean-tmp + +distclean-tmp: + $(gen_verbose) rm -rf $(ERLANG_MK_TMP) + +help:: + $(verbose) printf "%s\n" \ + "erlang.mk (version $(ERLANG_MK_VERSION)) is distributed under the terms of the ISC License." \ + "Copyright (c) 2013-2016 Loïc Hoguin " \ + "" \ + "Usage: [V=1] $(MAKE) [target]..." \ + "" \ + "Core targets:" \ + " all Run deps, app and rel targets in that order" \ + " app Compile the project" \ + " deps Fetch dependencies (if needed) and compile them" \ + " fetch-deps Fetch dependencies recursively (if needed) without compiling them" \ + " list-deps List dependencies recursively on stdout" \ + " search q=... Search for a package in the built-in index" \ + " rel Build a release for this project, if applicable" \ + " docs Build the documentation for this project" \ + " install-docs Install the man pages for this project" \ + " check Compile and run all tests and analysis for this project" \ + " tests Run the tests for this project" \ + " clean Delete temporary and output files from most targets" \ + " distclean Delete all temporary and output files" \ + " help Display this help and exit" \ + " erlang-mk Update erlang.mk to the latest version" + +# Core functions. + +empty := +space := $(empty) $(empty) +tab := $(empty) $(empty) +comma := , + +define newline + + +endef + +define comma_list +$(subst $(space),$(comma),$(strip $(1))) +endef + +define escape_dquotes +$(subst ",\",$1) +endef + +# Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy. +define erlang +$(ERL) $2 -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(call escape_dquotes,$1))" -- erlang.mk +endef + +ifeq ($(PLATFORM),msys2) +core_native_path = $(subst \,\\\\,$(shell cygpath -w $1)) +else +core_native_path = $1 +endif + +core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$1) $2 + +core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) + +core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2))) + +core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) + +core_ls = $(filter-out $(1),$(shell echo $(1))) + +# @todo Use a solution that does not require using perl. +core_relpath = $(shell perl -e 'use File::Spec; print File::Spec->abs2rel(@ARGV) . "\n"' $1 $2) + +# Automated update. + +ERLANG_MK_REPO ?= https://github.com/ninenines/erlang.mk +ERLANG_MK_COMMIT ?= +ERLANG_MK_BUILD_CONFIG ?= build.config +ERLANG_MK_BUILD_DIR ?= .erlang.mk.build + +erlang-mk: WITHOUT ?= $(ERLANG_MK_WITHOUT) +erlang-mk: +ifdef ERLANG_MK_COMMIT + git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) + cd $(ERLANG_MK_BUILD_DIR) && git checkout $(ERLANG_MK_COMMIT) +else + git clone --depth 1 $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR) +endif + if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi + $(MAKE) -C $(ERLANG_MK_BUILD_DIR) WITHOUT='$(strip $(WITHOUT))' + cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk + rm -rf $(ERLANG_MK_BUILD_DIR) + +# The erlang.mk package index is bundled in the default erlang.mk build. +# Search for the string "copyright" to skip to the rest of the code. + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-kerl + +KERL_INSTALL_DIR ?= $(HOME)/erlang + +ifeq ($(strip $(KERL)),) +KERL := $(ERLANG_MK_TMP)/kerl/kerl +endif + +export KERL + +KERL_GIT ?= https://github.com/kerl/kerl +KERL_COMMIT ?= master + +KERL_MAKEFLAGS ?= + +OTP_GIT ?= https://github.com/erlang/otp + +define kerl_otp_target +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(1)),) +$(KERL_INSTALL_DIR)/$(1): $(KERL) + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $(1) $(1) + $(KERL) install $(1) $(KERL_INSTALL_DIR)/$(1) +endif +endef + +define kerl_hipe_target +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$1-native),) +$(KERL_INSTALL_DIR)/$1-native: $(KERL) + KERL_CONFIGURE_OPTIONS=--enable-native-libs \ + MAKEFLAGS="$(KERL_MAKEFLAGS)" $(KERL) build git $(OTP_GIT) $1 $1-native + $(KERL) install $1-native $(KERL_INSTALL_DIR)/$1-native +endif +endef + +$(KERL): + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(gen_verbose) git clone --depth 1 $(KERL_GIT) $(ERLANG_MK_TMP)/kerl + $(verbose) cd $(ERLANG_MK_TMP)/kerl && git checkout $(KERL_COMMIT) + $(verbose) chmod +x $(KERL) + +distclean:: distclean-kerl + +distclean-kerl: + $(gen_verbose) rm -rf $(KERL) + +# Allow users to select which version of Erlang/OTP to use for a project. + +ifneq ($(strip $(LATEST_ERLANG_OTP)),) +ERLANG_OTP := $(notdir $(lastword $(sort $(filter-out $(KERL_INSTALL_DIR)/OTP_R%,\ + $(filter-out %-rc1 %-rc2 %-rc3,$(wildcard $(KERL_INSTALL_DIR)/*[^-native])))))) +endif + +ERLANG_OTP ?= +ERLANG_HIPE ?= + +# Use kerl to enforce a specific Erlang/OTP version for a project. +ifneq ($(strip $(ERLANG_OTP)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_OTP)/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_otp_target,$(ERLANG_OTP))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_OTP))$(BUILD_ERLANG_OTP),) +$(info Building Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_OTP) ERLANG_OTP=$(ERLANG_OTP) BUILD_ERLANG_OTP=1 >&2) +endif + +else +# Same for a HiPE enabled VM. +ifneq ($(strip $(ERLANG_HIPE)),) +export PATH := $(KERL_INSTALL_DIR)/$(ERLANG_HIPE)-native/bin:$(PATH) +SHELL := env PATH=$(PATH) $(SHELL) +$(eval $(call kerl_hipe_target,$(ERLANG_HIPE))) + +# Build Erlang/OTP only if it doesn't already exist. +ifeq ($(wildcard $(KERL_INSTALL_DIR)/$(ERLANG_HIPE))$(BUILD_ERLANG_OTP),) +$(info Building HiPE-enabled Erlang/OTP $(ERLANG_OTP)... Please wait...) +$(shell $(MAKE) $(KERL_INSTALL_DIR)/$(ERLANG_HIPE) ERLANG_HIPE=$(ERLANG_HIPE) BUILD_ERLANG_OTP=1 >&2) +endif + +endif +endif + +PACKAGES += aberth +pkg_aberth_name = aberth +pkg_aberth_description = Generic BERT-RPC server in Erlang +pkg_aberth_homepage = https://github.com/a13x/aberth +pkg_aberth_fetch = git +pkg_aberth_repo = https://github.com/a13x/aberth +pkg_aberth_commit = master + +PACKAGES += active +pkg_active_name = active +pkg_active_description = Active development for Erlang: rebuild and reload source/binary files while the VM is running +pkg_active_homepage = https://github.com/proger/active +pkg_active_fetch = git +pkg_active_repo = https://github.com/proger/active +pkg_active_commit = master + +PACKAGES += actordb_core +pkg_actordb_core_name = actordb_core +pkg_actordb_core_description = ActorDB main source +pkg_actordb_core_homepage = http://www.actordb.com/ +pkg_actordb_core_fetch = git +pkg_actordb_core_repo = https://github.com/biokoda/actordb_core +pkg_actordb_core_commit = master + +PACKAGES += actordb_thrift +pkg_actordb_thrift_name = actordb_thrift +pkg_actordb_thrift_description = Thrift API for ActorDB +pkg_actordb_thrift_homepage = http://www.actordb.com/ +pkg_actordb_thrift_fetch = git +pkg_actordb_thrift_repo = https://github.com/biokoda/actordb_thrift +pkg_actordb_thrift_commit = master + +PACKAGES += aleppo +pkg_aleppo_name = aleppo +pkg_aleppo_description = Alternative Erlang Pre-Processor +pkg_aleppo_homepage = https://github.com/ErlyORM/aleppo +pkg_aleppo_fetch = git +pkg_aleppo_repo = https://github.com/ErlyORM/aleppo +pkg_aleppo_commit = master + +PACKAGES += alog +pkg_alog_name = alog +pkg_alog_description = Simply the best logging framework for Erlang +pkg_alog_homepage = https://github.com/siberian-fast-food/alogger +pkg_alog_fetch = git +pkg_alog_repo = https://github.com/siberian-fast-food/alogger +pkg_alog_commit = master + +PACKAGES += amqp_client +pkg_amqp_client_name = amqp_client +pkg_amqp_client_description = RabbitMQ Erlang AMQP client +pkg_amqp_client_homepage = https://www.rabbitmq.com/erlang-client-user-guide.html +pkg_amqp_client_fetch = git +pkg_amqp_client_repo = https://github.com/rabbitmq/rabbitmq-erlang-client.git +pkg_amqp_client_commit = master + +PACKAGES += annotations +pkg_annotations_name = annotations +pkg_annotations_description = Simple code instrumentation utilities +pkg_annotations_homepage = https://github.com/hyperthunk/annotations +pkg_annotations_fetch = git +pkg_annotations_repo = https://github.com/hyperthunk/annotations +pkg_annotations_commit = master + +PACKAGES += antidote +pkg_antidote_name = antidote +pkg_antidote_description = Large-scale computation without synchronisation +pkg_antidote_homepage = https://syncfree.lip6.fr/ +pkg_antidote_fetch = git +pkg_antidote_repo = https://github.com/SyncFree/antidote +pkg_antidote_commit = master + +PACKAGES += apns +pkg_apns_name = apns +pkg_apns_description = Apple Push Notification Server for Erlang +pkg_apns_homepage = http://inaka.github.com/apns4erl +pkg_apns_fetch = git +pkg_apns_repo = https://github.com/inaka/apns4erl +pkg_apns_commit = master + +PACKAGES += asciideck +pkg_asciideck_name = asciideck +pkg_asciideck_description = Asciidoc for Erlang. +pkg_asciideck_homepage = https://ninenines.eu +pkg_asciideck_fetch = git +pkg_asciideck_repo = https://github.com/ninenines/asciideck +pkg_asciideck_commit = master + +PACKAGES += azdht +pkg_azdht_name = azdht +pkg_azdht_description = Azureus Distributed Hash Table (DHT) in Erlang +pkg_azdht_homepage = https://github.com/arcusfelis/azdht +pkg_azdht_fetch = git +pkg_azdht_repo = https://github.com/arcusfelis/azdht +pkg_azdht_commit = master + +PACKAGES += backoff +pkg_backoff_name = backoff +pkg_backoff_description = Simple exponential backoffs in Erlang +pkg_backoff_homepage = https://github.com/ferd/backoff +pkg_backoff_fetch = git +pkg_backoff_repo = https://github.com/ferd/backoff +pkg_backoff_commit = master + +PACKAGES += barrel_tcp +pkg_barrel_tcp_name = barrel_tcp +pkg_barrel_tcp_description = barrel is a generic TCP acceptor pool with low latency in Erlang. +pkg_barrel_tcp_homepage = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_fetch = git +pkg_barrel_tcp_repo = https://github.com/benoitc-attic/barrel_tcp +pkg_barrel_tcp_commit = master + +PACKAGES += basho_bench +pkg_basho_bench_name = basho_bench +pkg_basho_bench_description = A load-generation and testing tool for basically whatever you can write a returning Erlang function for. +pkg_basho_bench_homepage = https://github.com/basho/basho_bench +pkg_basho_bench_fetch = git +pkg_basho_bench_repo = https://github.com/basho/basho_bench +pkg_basho_bench_commit = master + +PACKAGES += bcrypt +pkg_bcrypt_name = bcrypt +pkg_bcrypt_description = Bcrypt Erlang / C library +pkg_bcrypt_homepage = https://github.com/erlangpack/bcrypt +pkg_bcrypt_fetch = git +pkg_bcrypt_repo = https://github.com/erlangpack/bcrypt.git +pkg_bcrypt_commit = master + +PACKAGES += beam +pkg_beam_name = beam +pkg_beam_description = BEAM emulator written in Erlang +pkg_beam_homepage = https://github.com/tonyrog/beam +pkg_beam_fetch = git +pkg_beam_repo = https://github.com/tonyrog/beam +pkg_beam_commit = master + +PACKAGES += beanstalk +pkg_beanstalk_name = beanstalk +pkg_beanstalk_description = An Erlang client for beanstalkd +pkg_beanstalk_homepage = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_fetch = git +pkg_beanstalk_repo = https://github.com/tim/erlang-beanstalk +pkg_beanstalk_commit = master + +PACKAGES += bear +pkg_bear_name = bear +pkg_bear_description = a set of statistics functions for erlang +pkg_bear_homepage = https://github.com/boundary/bear +pkg_bear_fetch = git +pkg_bear_repo = https://github.com/boundary/bear +pkg_bear_commit = master + +PACKAGES += bertconf +pkg_bertconf_name = bertconf +pkg_bertconf_description = Make ETS tables out of statc BERT files that are auto-reloaded +pkg_bertconf_homepage = https://github.com/ferd/bertconf +pkg_bertconf_fetch = git +pkg_bertconf_repo = https://github.com/ferd/bertconf +pkg_bertconf_commit = master + +PACKAGES += bifrost +pkg_bifrost_name = bifrost +pkg_bifrost_description = Erlang FTP Server Framework +pkg_bifrost_homepage = https://github.com/thorstadt/bifrost +pkg_bifrost_fetch = git +pkg_bifrost_repo = https://github.com/thorstadt/bifrost +pkg_bifrost_commit = master + +PACKAGES += binpp +pkg_binpp_name = binpp +pkg_binpp_description = Erlang Binary Pretty Printer +pkg_binpp_homepage = https://github.com/jtendo/binpp +pkg_binpp_fetch = git +pkg_binpp_repo = https://github.com/jtendo/binpp +pkg_binpp_commit = master + +PACKAGES += bisect +pkg_bisect_name = bisect +pkg_bisect_description = Ordered fixed-size binary dictionary in Erlang +pkg_bisect_homepage = https://github.com/knutin/bisect +pkg_bisect_fetch = git +pkg_bisect_repo = https://github.com/knutin/bisect +pkg_bisect_commit = master + +PACKAGES += bitcask +pkg_bitcask_name = bitcask +pkg_bitcask_description = because you need another a key/value storage engine +pkg_bitcask_homepage = https://github.com/basho/bitcask +pkg_bitcask_fetch = git +pkg_bitcask_repo = https://github.com/basho/bitcask +pkg_bitcask_commit = develop + +PACKAGES += bitstore +pkg_bitstore_name = bitstore +pkg_bitstore_description = A document based ontology development environment +pkg_bitstore_homepage = https://github.com/bdionne/bitstore +pkg_bitstore_fetch = git +pkg_bitstore_repo = https://github.com/bdionne/bitstore +pkg_bitstore_commit = master + +PACKAGES += bootstrap +pkg_bootstrap_name = bootstrap +pkg_bootstrap_description = A simple, yet powerful Erlang cluster bootstrapping application. +pkg_bootstrap_homepage = https://github.com/schlagert/bootstrap +pkg_bootstrap_fetch = git +pkg_bootstrap_repo = https://github.com/schlagert/bootstrap +pkg_bootstrap_commit = master + +PACKAGES += boss +pkg_boss_name = boss +pkg_boss_description = Erlang web MVC, now featuring Comet +pkg_boss_homepage = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_fetch = git +pkg_boss_repo = https://github.com/ChicagoBoss/ChicagoBoss +pkg_boss_commit = master + +PACKAGES += boss_db +pkg_boss_db_name = boss_db +pkg_boss_db_description = BossDB: a sharded, caching, pooling, evented ORM for Erlang +pkg_boss_db_homepage = https://github.com/ErlyORM/boss_db +pkg_boss_db_fetch = git +pkg_boss_db_repo = https://github.com/ErlyORM/boss_db +pkg_boss_db_commit = master + +PACKAGES += brod +pkg_brod_name = brod +pkg_brod_description = Kafka client in Erlang +pkg_brod_homepage = https://github.com/klarna/brod +pkg_brod_fetch = git +pkg_brod_repo = https://github.com/klarna/brod.git +pkg_brod_commit = master + +PACKAGES += bson +pkg_bson_name = bson +pkg_bson_description = BSON documents in Erlang, see bsonspec.org +pkg_bson_homepage = https://github.com/comtihon/bson-erlang +pkg_bson_fetch = git +pkg_bson_repo = https://github.com/comtihon/bson-erlang +pkg_bson_commit = master + +PACKAGES += bullet +pkg_bullet_name = bullet +pkg_bullet_description = Simple, reliable, efficient streaming for Cowboy. +pkg_bullet_homepage = http://ninenines.eu +pkg_bullet_fetch = git +pkg_bullet_repo = https://github.com/ninenines/bullet +pkg_bullet_commit = master + +PACKAGES += cache +pkg_cache_name = cache +pkg_cache_description = Erlang in-memory cache +pkg_cache_homepage = https://github.com/fogfish/cache +pkg_cache_fetch = git +pkg_cache_repo = https://github.com/fogfish/cache +pkg_cache_commit = master + +PACKAGES += cake +pkg_cake_name = cake +pkg_cake_description = Really simple terminal colorization +pkg_cake_homepage = https://github.com/darach/cake-erl +pkg_cake_fetch = git +pkg_cake_repo = https://github.com/darach/cake-erl +pkg_cake_commit = master + +PACKAGES += carotene +pkg_carotene_name = carotene +pkg_carotene_description = Real-time server +pkg_carotene_homepage = https://github.com/carotene/carotene +pkg_carotene_fetch = git +pkg_carotene_repo = https://github.com/carotene/carotene +pkg_carotene_commit = master + +PACKAGES += cberl +pkg_cberl_name = cberl +pkg_cberl_description = NIF based Erlang bindings for Couchbase +pkg_cberl_homepage = https://github.com/chitika/cberl +pkg_cberl_fetch = git +pkg_cberl_repo = https://github.com/chitika/cberl +pkg_cberl_commit = master + +PACKAGES += cecho +pkg_cecho_name = cecho +pkg_cecho_description = An ncurses library for Erlang +pkg_cecho_homepage = https://github.com/mazenharake/cecho +pkg_cecho_fetch = git +pkg_cecho_repo = https://github.com/mazenharake/cecho +pkg_cecho_commit = master + +PACKAGES += cferl +pkg_cferl_name = cferl +pkg_cferl_description = Rackspace / Open Stack Cloud Files Erlang Client +pkg_cferl_homepage = https://github.com/ddossot/cferl +pkg_cferl_fetch = git +pkg_cferl_repo = https://github.com/ddossot/cferl +pkg_cferl_commit = master + +PACKAGES += chaos_monkey +pkg_chaos_monkey_name = chaos_monkey +pkg_chaos_monkey_description = This is The CHAOS MONKEY. It will kill your processes. +pkg_chaos_monkey_homepage = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_fetch = git +pkg_chaos_monkey_repo = https://github.com/dLuna/chaos_monkey +pkg_chaos_monkey_commit = master + +PACKAGES += check_node +pkg_check_node_name = check_node +pkg_check_node_description = Nagios Scripts for monitoring Riak +pkg_check_node_homepage = https://github.com/basho-labs/riak_nagios +pkg_check_node_fetch = git +pkg_check_node_repo = https://github.com/basho-labs/riak_nagios +pkg_check_node_commit = master + +PACKAGES += chronos +pkg_chronos_name = chronos +pkg_chronos_description = Timer module for Erlang that makes it easy to abstact time out of the tests. +pkg_chronos_homepage = https://github.com/lehoff/chronos +pkg_chronos_fetch = git +pkg_chronos_repo = https://github.com/lehoff/chronos +pkg_chronos_commit = master + +PACKAGES += chumak +pkg_chumak_name = chumak +pkg_chumak_description = Pure Erlang implementation of ZeroMQ Message Transport Protocol. +pkg_chumak_homepage = http://choven.ca +pkg_chumak_fetch = git +pkg_chumak_repo = https://github.com/chovencorp/chumak +pkg_chumak_commit = master + +PACKAGES += cl +pkg_cl_name = cl +pkg_cl_description = OpenCL binding for Erlang +pkg_cl_homepage = https://github.com/tonyrog/cl +pkg_cl_fetch = git +pkg_cl_repo = https://github.com/tonyrog/cl +pkg_cl_commit = master + +PACKAGES += clique +pkg_clique_name = clique +pkg_clique_description = CLI Framework for Erlang +pkg_clique_homepage = https://github.com/basho/clique +pkg_clique_fetch = git +pkg_clique_repo = https://github.com/basho/clique +pkg_clique_commit = develop + +PACKAGES += cloudi_core +pkg_cloudi_core_name = cloudi_core +pkg_cloudi_core_description = CloudI internal service runtime +pkg_cloudi_core_homepage = http://cloudi.org/ +pkg_cloudi_core_fetch = git +pkg_cloudi_core_repo = https://github.com/CloudI/cloudi_core +pkg_cloudi_core_commit = master + +PACKAGES += cloudi_service_api_requests +pkg_cloudi_service_api_requests_name = cloudi_service_api_requests +pkg_cloudi_service_api_requests_description = CloudI Service API requests (JSON-RPC/Erlang-term support) +pkg_cloudi_service_api_requests_homepage = http://cloudi.org/ +pkg_cloudi_service_api_requests_fetch = git +pkg_cloudi_service_api_requests_repo = https://github.com/CloudI/cloudi_service_api_requests +pkg_cloudi_service_api_requests_commit = master + +PACKAGES += cloudi_service_db +pkg_cloudi_service_db_name = cloudi_service_db +pkg_cloudi_service_db_description = CloudI Database (in-memory/testing/generic) +pkg_cloudi_service_db_homepage = http://cloudi.org/ +pkg_cloudi_service_db_fetch = git +pkg_cloudi_service_db_repo = https://github.com/CloudI/cloudi_service_db +pkg_cloudi_service_db_commit = master + +PACKAGES += cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_name = cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_description = Cassandra CloudI Service +pkg_cloudi_service_db_cassandra_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_fetch = git +pkg_cloudi_service_db_cassandra_repo = https://github.com/CloudI/cloudi_service_db_cassandra +pkg_cloudi_service_db_cassandra_commit = master + +PACKAGES += cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_name = cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_description = Cassandra CQL CloudI Service +pkg_cloudi_service_db_cassandra_cql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_cassandra_cql_fetch = git +pkg_cloudi_service_db_cassandra_cql_repo = https://github.com/CloudI/cloudi_service_db_cassandra_cql +pkg_cloudi_service_db_cassandra_cql_commit = master + +PACKAGES += cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_name = cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_description = CouchDB CloudI Service +pkg_cloudi_service_db_couchdb_homepage = http://cloudi.org/ +pkg_cloudi_service_db_couchdb_fetch = git +pkg_cloudi_service_db_couchdb_repo = https://github.com/CloudI/cloudi_service_db_couchdb +pkg_cloudi_service_db_couchdb_commit = master + +PACKAGES += cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_name = cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_description = elasticsearch CloudI Service +pkg_cloudi_service_db_elasticsearch_homepage = http://cloudi.org/ +pkg_cloudi_service_db_elasticsearch_fetch = git +pkg_cloudi_service_db_elasticsearch_repo = https://github.com/CloudI/cloudi_service_db_elasticsearch +pkg_cloudi_service_db_elasticsearch_commit = master + +PACKAGES += cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_name = cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_description = memcached CloudI Service +pkg_cloudi_service_db_memcached_homepage = http://cloudi.org/ +pkg_cloudi_service_db_memcached_fetch = git +pkg_cloudi_service_db_memcached_repo = https://github.com/CloudI/cloudi_service_db_memcached +pkg_cloudi_service_db_memcached_commit = master + +PACKAGES += cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_name = cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_description = MySQL CloudI Service +pkg_cloudi_service_db_mysql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_mysql_fetch = git +pkg_cloudi_service_db_mysql_repo = https://github.com/CloudI/cloudi_service_db_mysql +pkg_cloudi_service_db_mysql_commit = master + +PACKAGES += cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_name = cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_description = PostgreSQL CloudI Service +pkg_cloudi_service_db_pgsql_homepage = http://cloudi.org/ +pkg_cloudi_service_db_pgsql_fetch = git +pkg_cloudi_service_db_pgsql_repo = https://github.com/CloudI/cloudi_service_db_pgsql +pkg_cloudi_service_db_pgsql_commit = master + +PACKAGES += cloudi_service_db_riak +pkg_cloudi_service_db_riak_name = cloudi_service_db_riak +pkg_cloudi_service_db_riak_description = Riak CloudI Service +pkg_cloudi_service_db_riak_homepage = http://cloudi.org/ +pkg_cloudi_service_db_riak_fetch = git +pkg_cloudi_service_db_riak_repo = https://github.com/CloudI/cloudi_service_db_riak +pkg_cloudi_service_db_riak_commit = master + +PACKAGES += cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_name = cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_description = Tokyo Tyrant CloudI Service +pkg_cloudi_service_db_tokyotyrant_homepage = http://cloudi.org/ +pkg_cloudi_service_db_tokyotyrant_fetch = git +pkg_cloudi_service_db_tokyotyrant_repo = https://github.com/CloudI/cloudi_service_db_tokyotyrant +pkg_cloudi_service_db_tokyotyrant_commit = master + +PACKAGES += cloudi_service_filesystem +pkg_cloudi_service_filesystem_name = cloudi_service_filesystem +pkg_cloudi_service_filesystem_description = Filesystem CloudI Service +pkg_cloudi_service_filesystem_homepage = http://cloudi.org/ +pkg_cloudi_service_filesystem_fetch = git +pkg_cloudi_service_filesystem_repo = https://github.com/CloudI/cloudi_service_filesystem +pkg_cloudi_service_filesystem_commit = master + +PACKAGES += cloudi_service_http_client +pkg_cloudi_service_http_client_name = cloudi_service_http_client +pkg_cloudi_service_http_client_description = HTTP client CloudI Service +pkg_cloudi_service_http_client_homepage = http://cloudi.org/ +pkg_cloudi_service_http_client_fetch = git +pkg_cloudi_service_http_client_repo = https://github.com/CloudI/cloudi_service_http_client +pkg_cloudi_service_http_client_commit = master + +PACKAGES += cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_name = cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_description = cowboy HTTP/HTTPS CloudI Service +pkg_cloudi_service_http_cowboy_homepage = http://cloudi.org/ +pkg_cloudi_service_http_cowboy_fetch = git +pkg_cloudi_service_http_cowboy_repo = https://github.com/CloudI/cloudi_service_http_cowboy +pkg_cloudi_service_http_cowboy_commit = master + +PACKAGES += cloudi_service_http_elli +pkg_cloudi_service_http_elli_name = cloudi_service_http_elli +pkg_cloudi_service_http_elli_description = elli HTTP CloudI Service +pkg_cloudi_service_http_elli_homepage = http://cloudi.org/ +pkg_cloudi_service_http_elli_fetch = git +pkg_cloudi_service_http_elli_repo = https://github.com/CloudI/cloudi_service_http_elli +pkg_cloudi_service_http_elli_commit = master + +PACKAGES += cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_name = cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_description = Map/Reduce CloudI Service +pkg_cloudi_service_map_reduce_homepage = http://cloudi.org/ +pkg_cloudi_service_map_reduce_fetch = git +pkg_cloudi_service_map_reduce_repo = https://github.com/CloudI/cloudi_service_map_reduce +pkg_cloudi_service_map_reduce_commit = master + +PACKAGES += cloudi_service_oauth1 +pkg_cloudi_service_oauth1_name = cloudi_service_oauth1 +pkg_cloudi_service_oauth1_description = OAuth v1.0 CloudI Service +pkg_cloudi_service_oauth1_homepage = http://cloudi.org/ +pkg_cloudi_service_oauth1_fetch = git +pkg_cloudi_service_oauth1_repo = https://github.com/CloudI/cloudi_service_oauth1 +pkg_cloudi_service_oauth1_commit = master + +PACKAGES += cloudi_service_queue +pkg_cloudi_service_queue_name = cloudi_service_queue +pkg_cloudi_service_queue_description = Persistent Queue Service +pkg_cloudi_service_queue_homepage = http://cloudi.org/ +pkg_cloudi_service_queue_fetch = git +pkg_cloudi_service_queue_repo = https://github.com/CloudI/cloudi_service_queue +pkg_cloudi_service_queue_commit = master + +PACKAGES += cloudi_service_quorum +pkg_cloudi_service_quorum_name = cloudi_service_quorum +pkg_cloudi_service_quorum_description = CloudI Quorum Service +pkg_cloudi_service_quorum_homepage = http://cloudi.org/ +pkg_cloudi_service_quorum_fetch = git +pkg_cloudi_service_quorum_repo = https://github.com/CloudI/cloudi_service_quorum +pkg_cloudi_service_quorum_commit = master + +PACKAGES += cloudi_service_router +pkg_cloudi_service_router_name = cloudi_service_router +pkg_cloudi_service_router_description = CloudI Router Service +pkg_cloudi_service_router_homepage = http://cloudi.org/ +pkg_cloudi_service_router_fetch = git +pkg_cloudi_service_router_repo = https://github.com/CloudI/cloudi_service_router +pkg_cloudi_service_router_commit = master + +PACKAGES += cloudi_service_tcp +pkg_cloudi_service_tcp_name = cloudi_service_tcp +pkg_cloudi_service_tcp_description = TCP CloudI Service +pkg_cloudi_service_tcp_homepage = http://cloudi.org/ +pkg_cloudi_service_tcp_fetch = git +pkg_cloudi_service_tcp_repo = https://github.com/CloudI/cloudi_service_tcp +pkg_cloudi_service_tcp_commit = master + +PACKAGES += cloudi_service_timers +pkg_cloudi_service_timers_name = cloudi_service_timers +pkg_cloudi_service_timers_description = Timers CloudI Service +pkg_cloudi_service_timers_homepage = http://cloudi.org/ +pkg_cloudi_service_timers_fetch = git +pkg_cloudi_service_timers_repo = https://github.com/CloudI/cloudi_service_timers +pkg_cloudi_service_timers_commit = master + +PACKAGES += cloudi_service_udp +pkg_cloudi_service_udp_name = cloudi_service_udp +pkg_cloudi_service_udp_description = UDP CloudI Service +pkg_cloudi_service_udp_homepage = http://cloudi.org/ +pkg_cloudi_service_udp_fetch = git +pkg_cloudi_service_udp_repo = https://github.com/CloudI/cloudi_service_udp +pkg_cloudi_service_udp_commit = master + +PACKAGES += cloudi_service_validate +pkg_cloudi_service_validate_name = cloudi_service_validate +pkg_cloudi_service_validate_description = CloudI Validate Service +pkg_cloudi_service_validate_homepage = http://cloudi.org/ +pkg_cloudi_service_validate_fetch = git +pkg_cloudi_service_validate_repo = https://github.com/CloudI/cloudi_service_validate +pkg_cloudi_service_validate_commit = master + +PACKAGES += cloudi_service_zeromq +pkg_cloudi_service_zeromq_name = cloudi_service_zeromq +pkg_cloudi_service_zeromq_description = ZeroMQ CloudI Service +pkg_cloudi_service_zeromq_homepage = http://cloudi.org/ +pkg_cloudi_service_zeromq_fetch = git +pkg_cloudi_service_zeromq_repo = https://github.com/CloudI/cloudi_service_zeromq +pkg_cloudi_service_zeromq_commit = master + +PACKAGES += cluster_info +pkg_cluster_info_name = cluster_info +pkg_cluster_info_description = Fork of Hibari's nifty cluster_info OTP app +pkg_cluster_info_homepage = https://github.com/basho/cluster_info +pkg_cluster_info_fetch = git +pkg_cluster_info_repo = https://github.com/basho/cluster_info +pkg_cluster_info_commit = master + +PACKAGES += color +pkg_color_name = color +pkg_color_description = ANSI colors for your Erlang +pkg_color_homepage = https://github.com/julianduque/erlang-color +pkg_color_fetch = git +pkg_color_repo = https://github.com/julianduque/erlang-color +pkg_color_commit = master + +PACKAGES += confetti +pkg_confetti_name = confetti +pkg_confetti_description = Erlang configuration provider / application:get_env/2 on steroids +pkg_confetti_homepage = https://github.com/jtendo/confetti +pkg_confetti_fetch = git +pkg_confetti_repo = https://github.com/jtendo/confetti +pkg_confetti_commit = master + +PACKAGES += couchbeam +pkg_couchbeam_name = couchbeam +pkg_couchbeam_description = Apache CouchDB client in Erlang +pkg_couchbeam_homepage = https://github.com/benoitc/couchbeam +pkg_couchbeam_fetch = git +pkg_couchbeam_repo = https://github.com/benoitc/couchbeam +pkg_couchbeam_commit = master + +PACKAGES += covertool +pkg_covertool_name = covertool +pkg_covertool_description = Tool to convert Erlang cover data files into Cobertura XML reports +pkg_covertool_homepage = https://github.com/idubrov/covertool +pkg_covertool_fetch = git +pkg_covertool_repo = https://github.com/idubrov/covertool +pkg_covertool_commit = master + +PACKAGES += cowboy +pkg_cowboy_name = cowboy +pkg_cowboy_description = Small, fast and modular HTTP server. +pkg_cowboy_homepage = http://ninenines.eu +pkg_cowboy_fetch = git +pkg_cowboy_repo = https://github.com/ninenines/cowboy +pkg_cowboy_commit = 1.0.4 + +PACKAGES += cowdb +pkg_cowdb_name = cowdb +pkg_cowdb_description = Pure Key/Value database library for Erlang Applications +pkg_cowdb_homepage = https://github.com/refuge/cowdb +pkg_cowdb_fetch = git +pkg_cowdb_repo = https://github.com/refuge/cowdb +pkg_cowdb_commit = master + +PACKAGES += cowlib +pkg_cowlib_name = cowlib +pkg_cowlib_description = Support library for manipulating Web protocols. +pkg_cowlib_homepage = http://ninenines.eu +pkg_cowlib_fetch = git +pkg_cowlib_repo = https://github.com/ninenines/cowlib +pkg_cowlib_commit = 1.0.2 + +PACKAGES += cpg +pkg_cpg_name = cpg +pkg_cpg_description = CloudI Process Groups +pkg_cpg_homepage = https://github.com/okeuday/cpg +pkg_cpg_fetch = git +pkg_cpg_repo = https://github.com/okeuday/cpg +pkg_cpg_commit = master + +PACKAGES += cqerl +pkg_cqerl_name = cqerl +pkg_cqerl_description = Native Erlang CQL client for Cassandra +pkg_cqerl_homepage = https://matehat.github.io/cqerl/ +pkg_cqerl_fetch = git +pkg_cqerl_repo = https://github.com/matehat/cqerl +pkg_cqerl_commit = master + +PACKAGES += cr +pkg_cr_name = cr +pkg_cr_description = Chain Replication +pkg_cr_homepage = https://synrc.com/apps/cr/doc/cr.htm +pkg_cr_fetch = git +pkg_cr_repo = https://github.com/spawnproc/cr +pkg_cr_commit = master + +PACKAGES += cuttlefish +pkg_cuttlefish_name = cuttlefish +pkg_cuttlefish_description = never lose your childlike sense of wonder baby cuttlefish, promise me? +pkg_cuttlefish_homepage = https://github.com/basho/cuttlefish +pkg_cuttlefish_fetch = git +pkg_cuttlefish_repo = https://github.com/basho/cuttlefish +pkg_cuttlefish_commit = master + +PACKAGES += damocles +pkg_damocles_name = damocles +pkg_damocles_description = Erlang library for generating adversarial network conditions for QAing distributed applications/systems on a single Linux box. +pkg_damocles_homepage = https://github.com/lostcolony/damocles +pkg_damocles_fetch = git +pkg_damocles_repo = https://github.com/lostcolony/damocles +pkg_damocles_commit = master + +PACKAGES += debbie +pkg_debbie_name = debbie +pkg_debbie_description = .DEB Built In Erlang +pkg_debbie_homepage = https://github.com/crownedgrouse/debbie +pkg_debbie_fetch = git +pkg_debbie_repo = https://github.com/crownedgrouse/debbie +pkg_debbie_commit = master + +PACKAGES += decimal +pkg_decimal_name = decimal +pkg_decimal_description = An Erlang decimal arithmetic library +pkg_decimal_homepage = https://github.com/tim/erlang-decimal +pkg_decimal_fetch = git +pkg_decimal_repo = https://github.com/tim/erlang-decimal +pkg_decimal_commit = master + +PACKAGES += detergent +pkg_detergent_name = detergent +pkg_detergent_description = An emulsifying Erlang SOAP library +pkg_detergent_homepage = https://github.com/devinus/detergent +pkg_detergent_fetch = git +pkg_detergent_repo = https://github.com/devinus/detergent +pkg_detergent_commit = master + +PACKAGES += detest +pkg_detest_name = detest +pkg_detest_description = Tool for running tests on a cluster of erlang nodes +pkg_detest_homepage = https://github.com/biokoda/detest +pkg_detest_fetch = git +pkg_detest_repo = https://github.com/biokoda/detest +pkg_detest_commit = master + +PACKAGES += dh_date +pkg_dh_date_name = dh_date +pkg_dh_date_description = Date formatting / parsing library for erlang +pkg_dh_date_homepage = https://github.com/daleharvey/dh_date +pkg_dh_date_fetch = git +pkg_dh_date_repo = https://github.com/daleharvey/dh_date +pkg_dh_date_commit = master + +PACKAGES += dirbusterl +pkg_dirbusterl_name = dirbusterl +pkg_dirbusterl_description = DirBuster successor in Erlang +pkg_dirbusterl_homepage = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_fetch = git +pkg_dirbusterl_repo = https://github.com/silentsignal/DirBustErl +pkg_dirbusterl_commit = master + +PACKAGES += dispcount +pkg_dispcount_name = dispcount +pkg_dispcount_description = Erlang task dispatcher based on ETS counters. +pkg_dispcount_homepage = https://github.com/ferd/dispcount +pkg_dispcount_fetch = git +pkg_dispcount_repo = https://github.com/ferd/dispcount +pkg_dispcount_commit = master + +PACKAGES += dlhttpc +pkg_dlhttpc_name = dlhttpc +pkg_dlhttpc_description = dispcount-based lhttpc fork for massive amounts of requests to limited endpoints +pkg_dlhttpc_homepage = https://github.com/ferd/dlhttpc +pkg_dlhttpc_fetch = git +pkg_dlhttpc_repo = https://github.com/ferd/dlhttpc +pkg_dlhttpc_commit = master + +PACKAGES += dns +pkg_dns_name = dns +pkg_dns_description = Erlang DNS library +pkg_dns_homepage = https://github.com/aetrion/dns_erlang +pkg_dns_fetch = git +pkg_dns_repo = https://github.com/aetrion/dns_erlang +pkg_dns_commit = master + +PACKAGES += dnssd +pkg_dnssd_name = dnssd +pkg_dnssd_description = Erlang interface to Apple's Bonjour D NS Service Discovery implementation +pkg_dnssd_homepage = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_fetch = git +pkg_dnssd_repo = https://github.com/benoitc/dnssd_erlang +pkg_dnssd_commit = master + +PACKAGES += dynamic_compile +pkg_dynamic_compile_name = dynamic_compile +pkg_dynamic_compile_description = compile and load erlang modules from string input +pkg_dynamic_compile_homepage = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_fetch = git +pkg_dynamic_compile_repo = https://github.com/jkvor/dynamic_compile +pkg_dynamic_compile_commit = master + +PACKAGES += e2 +pkg_e2_name = e2 +pkg_e2_description = Library to simply writing correct OTP applications. +pkg_e2_homepage = http://e2project.org +pkg_e2_fetch = git +pkg_e2_repo = https://github.com/gar1t/e2 +pkg_e2_commit = master + +PACKAGES += eamf +pkg_eamf_name = eamf +pkg_eamf_description = eAMF provides Action Message Format (AMF) support for Erlang +pkg_eamf_homepage = https://github.com/mrinalwadhwa/eamf +pkg_eamf_fetch = git +pkg_eamf_repo = https://github.com/mrinalwadhwa/eamf +pkg_eamf_commit = master + +PACKAGES += eavro +pkg_eavro_name = eavro +pkg_eavro_description = Apache Avro encoder/decoder +pkg_eavro_homepage = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_fetch = git +pkg_eavro_repo = https://github.com/SIfoxDevTeam/eavro +pkg_eavro_commit = master + +PACKAGES += ecapnp +pkg_ecapnp_name = ecapnp +pkg_ecapnp_description = Cap'n Proto library for Erlang +pkg_ecapnp_homepage = https://github.com/kaos/ecapnp +pkg_ecapnp_fetch = git +pkg_ecapnp_repo = https://github.com/kaos/ecapnp +pkg_ecapnp_commit = master + +PACKAGES += econfig +pkg_econfig_name = econfig +pkg_econfig_description = simple Erlang config handler using INI files +pkg_econfig_homepage = https://github.com/benoitc/econfig +pkg_econfig_fetch = git +pkg_econfig_repo = https://github.com/benoitc/econfig +pkg_econfig_commit = master + +PACKAGES += edate +pkg_edate_name = edate +pkg_edate_description = date manipulation library for erlang +pkg_edate_homepage = https://github.com/dweldon/edate +pkg_edate_fetch = git +pkg_edate_repo = https://github.com/dweldon/edate +pkg_edate_commit = master + +PACKAGES += edgar +pkg_edgar_name = edgar +pkg_edgar_description = Erlang Does GNU AR +pkg_edgar_homepage = https://github.com/crownedgrouse/edgar +pkg_edgar_fetch = git +pkg_edgar_repo = https://github.com/crownedgrouse/edgar +pkg_edgar_commit = master + +PACKAGES += edis +pkg_edis_name = edis +pkg_edis_description = An Erlang implementation of Redis KV Store +pkg_edis_homepage = http://inaka.github.com/edis/ +pkg_edis_fetch = git +pkg_edis_repo = https://github.com/inaka/edis +pkg_edis_commit = master + +PACKAGES += edns +pkg_edns_name = edns +pkg_edns_description = Erlang/OTP DNS server +pkg_edns_homepage = https://github.com/hcvst/erlang-dns +pkg_edns_fetch = git +pkg_edns_repo = https://github.com/hcvst/erlang-dns +pkg_edns_commit = master + +PACKAGES += edown +pkg_edown_name = edown +pkg_edown_description = EDoc extension for generating Github-flavored Markdown +pkg_edown_homepage = https://github.com/uwiger/edown +pkg_edown_fetch = git +pkg_edown_repo = https://github.com/uwiger/edown +pkg_edown_commit = master + +PACKAGES += eep +pkg_eep_name = eep +pkg_eep_description = Erlang Easy Profiling (eep) application provides a way to analyze application performance and call hierarchy +pkg_eep_homepage = https://github.com/virtan/eep +pkg_eep_fetch = git +pkg_eep_repo = https://github.com/virtan/eep +pkg_eep_commit = master + +PACKAGES += eep_app +pkg_eep_app_name = eep_app +pkg_eep_app_description = Embedded Event Processing +pkg_eep_app_homepage = https://github.com/darach/eep-erl +pkg_eep_app_fetch = git +pkg_eep_app_repo = https://github.com/darach/eep-erl +pkg_eep_app_commit = master + +PACKAGES += efene +pkg_efene_name = efene +pkg_efene_description = Alternative syntax for the Erlang Programming Language focusing on simplicity, ease of use and programmer UX +pkg_efene_homepage = https://github.com/efene/efene +pkg_efene_fetch = git +pkg_efene_repo = https://github.com/efene/efene +pkg_efene_commit = master + +PACKAGES += egeoip +pkg_egeoip_name = egeoip +pkg_egeoip_description = Erlang IP Geolocation module, currently supporting the MaxMind GeoLite City Database. +pkg_egeoip_homepage = https://github.com/mochi/egeoip +pkg_egeoip_fetch = git +pkg_egeoip_repo = https://github.com/mochi/egeoip +pkg_egeoip_commit = master + +PACKAGES += ehsa +pkg_ehsa_name = ehsa +pkg_ehsa_description = Erlang HTTP server basic and digest authentication modules +pkg_ehsa_homepage = https://bitbucket.org/a12n/ehsa +pkg_ehsa_fetch = hg +pkg_ehsa_repo = https://bitbucket.org/a12n/ehsa +pkg_ehsa_commit = default + +PACKAGES += ej +pkg_ej_name = ej +pkg_ej_description = Helper module for working with Erlang terms representing JSON +pkg_ej_homepage = https://github.com/seth/ej +pkg_ej_fetch = git +pkg_ej_repo = https://github.com/seth/ej +pkg_ej_commit = master + +PACKAGES += ejabberd +pkg_ejabberd_name = ejabberd +pkg_ejabberd_description = Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform +pkg_ejabberd_homepage = https://github.com/processone/ejabberd +pkg_ejabberd_fetch = git +pkg_ejabberd_repo = https://github.com/processone/ejabberd +pkg_ejabberd_commit = master + +PACKAGES += ejwt +pkg_ejwt_name = ejwt +pkg_ejwt_description = erlang library for JSON Web Token +pkg_ejwt_homepage = https://github.com/artefactop/ejwt +pkg_ejwt_fetch = git +pkg_ejwt_repo = https://github.com/artefactop/ejwt +pkg_ejwt_commit = master + +PACKAGES += ekaf +pkg_ekaf_name = ekaf +pkg_ekaf_description = A minimal, high-performance Kafka client in Erlang. +pkg_ekaf_homepage = https://github.com/helpshift/ekaf +pkg_ekaf_fetch = git +pkg_ekaf_repo = https://github.com/helpshift/ekaf +pkg_ekaf_commit = master + +PACKAGES += elarm +pkg_elarm_name = elarm +pkg_elarm_description = Alarm Manager for Erlang. +pkg_elarm_homepage = https://github.com/esl/elarm +pkg_elarm_fetch = git +pkg_elarm_repo = https://github.com/esl/elarm +pkg_elarm_commit = master + +PACKAGES += eleveldb +pkg_eleveldb_name = eleveldb +pkg_eleveldb_description = Erlang LevelDB API +pkg_eleveldb_homepage = https://github.com/basho/eleveldb +pkg_eleveldb_fetch = git +pkg_eleveldb_repo = https://github.com/basho/eleveldb +pkg_eleveldb_commit = master + +PACKAGES += elli +pkg_elli_name = elli +pkg_elli_description = Simple, robust and performant Erlang web server +pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_fetch = git +pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_commit = master + +PACKAGES += elvis +pkg_elvis_name = elvis +pkg_elvis_description = Erlang Style Reviewer +pkg_elvis_homepage = https://github.com/inaka/elvis +pkg_elvis_fetch = git +pkg_elvis_repo = https://github.com/inaka/elvis +pkg_elvis_commit = master + +PACKAGES += emagick +pkg_emagick_name = emagick +pkg_emagick_description = Wrapper for Graphics/ImageMagick command line tool. +pkg_emagick_homepage = https://github.com/kivra/emagick +pkg_emagick_fetch = git +pkg_emagick_repo = https://github.com/kivra/emagick +pkg_emagick_commit = master + +PACKAGES += emysql +pkg_emysql_name = emysql +pkg_emysql_description = Stable, pure Erlang MySQL driver. +pkg_emysql_homepage = https://github.com/Eonblast/Emysql +pkg_emysql_fetch = git +pkg_emysql_repo = https://github.com/Eonblast/Emysql +pkg_emysql_commit = master + +PACKAGES += enm +pkg_enm_name = enm +pkg_enm_description = Erlang driver for nanomsg +pkg_enm_homepage = https://github.com/basho/enm +pkg_enm_fetch = git +pkg_enm_repo = https://github.com/basho/enm +pkg_enm_commit = master + +PACKAGES += entop +pkg_entop_name = entop +pkg_entop_description = A top-like tool for monitoring an Erlang node +pkg_entop_homepage = https://github.com/mazenharake/entop +pkg_entop_fetch = git +pkg_entop_repo = https://github.com/mazenharake/entop +pkg_entop_commit = master + +PACKAGES += epcap +pkg_epcap_name = epcap +pkg_epcap_description = Erlang packet capture interface using pcap +pkg_epcap_homepage = https://github.com/msantos/epcap +pkg_epcap_fetch = git +pkg_epcap_repo = https://github.com/msantos/epcap +pkg_epcap_commit = master + +PACKAGES += eper +pkg_eper_name = eper +pkg_eper_description = Erlang performance and debugging tools. +pkg_eper_homepage = https://github.com/massemanet/eper +pkg_eper_fetch = git +pkg_eper_repo = https://github.com/massemanet/eper +pkg_eper_commit = master + +PACKAGES += epgsql +pkg_epgsql_name = epgsql +pkg_epgsql_description = Erlang PostgreSQL client library. +pkg_epgsql_homepage = https://github.com/epgsql/epgsql +pkg_epgsql_fetch = git +pkg_epgsql_repo = https://github.com/epgsql/epgsql +pkg_epgsql_commit = master + +PACKAGES += episcina +pkg_episcina_name = episcina +pkg_episcina_description = A simple non intrusive resource pool for connections +pkg_episcina_homepage = https://github.com/erlware/episcina +pkg_episcina_fetch = git +pkg_episcina_repo = https://github.com/erlware/episcina +pkg_episcina_commit = master + +PACKAGES += eplot +pkg_eplot_name = eplot +pkg_eplot_description = A plot engine written in erlang. +pkg_eplot_homepage = https://github.com/psyeugenic/eplot +pkg_eplot_fetch = git +pkg_eplot_repo = https://github.com/psyeugenic/eplot +pkg_eplot_commit = master + +PACKAGES += epocxy +pkg_epocxy_name = epocxy +pkg_epocxy_description = Erlang Patterns of Concurrency +pkg_epocxy_homepage = https://github.com/duomark/epocxy +pkg_epocxy_fetch = git +pkg_epocxy_repo = https://github.com/duomark/epocxy +pkg_epocxy_commit = master + +PACKAGES += epubnub +pkg_epubnub_name = epubnub +pkg_epubnub_description = Erlang PubNub API +pkg_epubnub_homepage = https://github.com/tsloughter/epubnub +pkg_epubnub_fetch = git +pkg_epubnub_repo = https://github.com/tsloughter/epubnub +pkg_epubnub_commit = master + +PACKAGES += eqm +pkg_eqm_name = eqm +pkg_eqm_description = Erlang pub sub with supply-demand channels +pkg_eqm_homepage = https://github.com/loucash/eqm +pkg_eqm_fetch = git +pkg_eqm_repo = https://github.com/loucash/eqm +pkg_eqm_commit = master + +PACKAGES += eredis +pkg_eredis_name = eredis +pkg_eredis_description = Erlang Redis client +pkg_eredis_homepage = https://github.com/wooga/eredis +pkg_eredis_fetch = git +pkg_eredis_repo = https://github.com/wooga/eredis +pkg_eredis_commit = master + +PACKAGES += eredis_pool +pkg_eredis_pool_name = eredis_pool +pkg_eredis_pool_description = eredis_pool is Pool of Redis clients, using eredis and poolboy. +pkg_eredis_pool_homepage = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_fetch = git +pkg_eredis_pool_repo = https://github.com/hiroeorz/eredis_pool +pkg_eredis_pool_commit = master + +PACKAGES += erl_streams +pkg_erl_streams_name = erl_streams +pkg_erl_streams_description = Streams in Erlang +pkg_erl_streams_homepage = https://github.com/epappas/erl_streams +pkg_erl_streams_fetch = git +pkg_erl_streams_repo = https://github.com/epappas/erl_streams +pkg_erl_streams_commit = master + +PACKAGES += erlang_cep +pkg_erlang_cep_name = erlang_cep +pkg_erlang_cep_description = A basic CEP package written in erlang +pkg_erlang_cep_homepage = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_fetch = git +pkg_erlang_cep_repo = https://github.com/danmacklin/erlang_cep +pkg_erlang_cep_commit = master + +PACKAGES += erlang_js +pkg_erlang_js_name = erlang_js +pkg_erlang_js_description = A linked-in driver for Erlang to Mozilla's Spidermonkey Javascript runtime. +pkg_erlang_js_homepage = https://github.com/basho/erlang_js +pkg_erlang_js_fetch = git +pkg_erlang_js_repo = https://github.com/basho/erlang_js +pkg_erlang_js_commit = master + +PACKAGES += erlang_localtime +pkg_erlang_localtime_name = erlang_localtime +pkg_erlang_localtime_description = Erlang library for conversion from one local time to another +pkg_erlang_localtime_homepage = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_fetch = git +pkg_erlang_localtime_repo = https://github.com/dmitryme/erlang_localtime +pkg_erlang_localtime_commit = master + +PACKAGES += erlang_smtp +pkg_erlang_smtp_name = erlang_smtp +pkg_erlang_smtp_description = Erlang SMTP and POP3 server code. +pkg_erlang_smtp_homepage = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_fetch = git +pkg_erlang_smtp_repo = https://github.com/tonyg/erlang-smtp +pkg_erlang_smtp_commit = master + +PACKAGES += erlang_term +pkg_erlang_term_name = erlang_term +pkg_erlang_term_description = Erlang Term Info +pkg_erlang_term_homepage = https://github.com/okeuday/erlang_term +pkg_erlang_term_fetch = git +pkg_erlang_term_repo = https://github.com/okeuday/erlang_term +pkg_erlang_term_commit = master + +PACKAGES += erlastic_search +pkg_erlastic_search_name = erlastic_search +pkg_erlastic_search_description = An Erlang app for communicating with Elastic Search's rest interface. +pkg_erlastic_search_homepage = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_fetch = git +pkg_erlastic_search_repo = https://github.com/tsloughter/erlastic_search +pkg_erlastic_search_commit = master + +PACKAGES += erlasticsearch +pkg_erlasticsearch_name = erlasticsearch +pkg_erlasticsearch_description = Erlang thrift interface to elastic_search +pkg_erlasticsearch_homepage = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_fetch = git +pkg_erlasticsearch_repo = https://github.com/dieswaytoofast/erlasticsearch +pkg_erlasticsearch_commit = master + +PACKAGES += erlbrake +pkg_erlbrake_name = erlbrake +pkg_erlbrake_description = Erlang Airbrake notification client +pkg_erlbrake_homepage = https://github.com/kenpratt/erlbrake +pkg_erlbrake_fetch = git +pkg_erlbrake_repo = https://github.com/kenpratt/erlbrake +pkg_erlbrake_commit = master + +PACKAGES += erlcloud +pkg_erlcloud_name = erlcloud +pkg_erlcloud_description = Cloud Computing library for erlang (Amazon EC2, S3, SQS, SimpleDB, Mechanical Turk, ELB) +pkg_erlcloud_homepage = https://github.com/gleber/erlcloud +pkg_erlcloud_fetch = git +pkg_erlcloud_repo = https://github.com/gleber/erlcloud +pkg_erlcloud_commit = master + +PACKAGES += erlcron +pkg_erlcron_name = erlcron +pkg_erlcron_description = Erlang cronish system +pkg_erlcron_homepage = https://github.com/erlware/erlcron +pkg_erlcron_fetch = git +pkg_erlcron_repo = https://github.com/erlware/erlcron +pkg_erlcron_commit = master + +PACKAGES += erldb +pkg_erldb_name = erldb +pkg_erldb_description = ORM (Object-relational mapping) application implemented in Erlang +pkg_erldb_homepage = http://erldb.org +pkg_erldb_fetch = git +pkg_erldb_repo = https://github.com/erldb/erldb +pkg_erldb_commit = master + +PACKAGES += erldis +pkg_erldis_name = erldis +pkg_erldis_description = redis erlang client library +pkg_erldis_homepage = https://github.com/cstar/erldis +pkg_erldis_fetch = git +pkg_erldis_repo = https://github.com/cstar/erldis +pkg_erldis_commit = master + +PACKAGES += erldns +pkg_erldns_name = erldns +pkg_erldns_description = DNS server, in erlang. +pkg_erldns_homepage = https://github.com/aetrion/erl-dns +pkg_erldns_fetch = git +pkg_erldns_repo = https://github.com/aetrion/erl-dns +pkg_erldns_commit = master + +PACKAGES += erldocker +pkg_erldocker_name = erldocker +pkg_erldocker_description = Docker Remote API client for Erlang +pkg_erldocker_homepage = https://github.com/proger/erldocker +pkg_erldocker_fetch = git +pkg_erldocker_repo = https://github.com/proger/erldocker +pkg_erldocker_commit = master + +PACKAGES += erlfsmon +pkg_erlfsmon_name = erlfsmon +pkg_erlfsmon_description = Erlang filesystem event watcher for Linux and OSX +pkg_erlfsmon_homepage = https://github.com/proger/erlfsmon +pkg_erlfsmon_fetch = git +pkg_erlfsmon_repo = https://github.com/proger/erlfsmon +pkg_erlfsmon_commit = master + +PACKAGES += erlgit +pkg_erlgit_name = erlgit +pkg_erlgit_description = Erlang convenience wrapper around git executable +pkg_erlgit_homepage = https://github.com/gleber/erlgit +pkg_erlgit_fetch = git +pkg_erlgit_repo = https://github.com/gleber/erlgit +pkg_erlgit_commit = master + +PACKAGES += erlguten +pkg_erlguten_name = erlguten +pkg_erlguten_description = ErlGuten is a system for high-quality typesetting, written purely in Erlang. +pkg_erlguten_homepage = https://github.com/richcarl/erlguten +pkg_erlguten_fetch = git +pkg_erlguten_repo = https://github.com/richcarl/erlguten +pkg_erlguten_commit = master + +PACKAGES += erlmc +pkg_erlmc_name = erlmc +pkg_erlmc_description = Erlang memcached binary protocol client +pkg_erlmc_homepage = https://github.com/jkvor/erlmc +pkg_erlmc_fetch = git +pkg_erlmc_repo = https://github.com/jkvor/erlmc +pkg_erlmc_commit = master + +PACKAGES += erlmongo +pkg_erlmongo_name = erlmongo +pkg_erlmongo_description = Record based Erlang driver for MongoDB with gridfs support +pkg_erlmongo_homepage = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_fetch = git +pkg_erlmongo_repo = https://github.com/SergejJurecko/erlmongo +pkg_erlmongo_commit = master + +PACKAGES += erlog +pkg_erlog_name = erlog +pkg_erlog_description = Prolog interpreter in and for Erlang +pkg_erlog_homepage = https://github.com/rvirding/erlog +pkg_erlog_fetch = git +pkg_erlog_repo = https://github.com/rvirding/erlog +pkg_erlog_commit = master + +PACKAGES += erlpass +pkg_erlpass_name = erlpass +pkg_erlpass_description = A library to handle password hashing and changing in a safe manner, independent from any kind of storage whatsoever. +pkg_erlpass_homepage = https://github.com/ferd/erlpass +pkg_erlpass_fetch = git +pkg_erlpass_repo = https://github.com/ferd/erlpass +pkg_erlpass_commit = master + +PACKAGES += erlport +pkg_erlport_name = erlport +pkg_erlport_description = ErlPort - connect Erlang to other languages +pkg_erlport_homepage = https://github.com/hdima/erlport +pkg_erlport_fetch = git +pkg_erlport_repo = https://github.com/hdima/erlport +pkg_erlport_commit = master + +PACKAGES += erlsh +pkg_erlsh_name = erlsh +pkg_erlsh_description = Erlang shell tools +pkg_erlsh_homepage = https://github.com/proger/erlsh +pkg_erlsh_fetch = git +pkg_erlsh_repo = https://github.com/proger/erlsh +pkg_erlsh_commit = master + +PACKAGES += erlsha2 +pkg_erlsha2_name = erlsha2 +pkg_erlsha2_description = SHA-224, SHA-256, SHA-384, SHA-512 implemented in Erlang NIFs. +pkg_erlsha2_homepage = https://github.com/vinoski/erlsha2 +pkg_erlsha2_fetch = git +pkg_erlsha2_repo = https://github.com/vinoski/erlsha2 +pkg_erlsha2_commit = master + +PACKAGES += erlsom +pkg_erlsom_name = erlsom +pkg_erlsom_description = XML parser for Erlang +pkg_erlsom_homepage = https://github.com/willemdj/erlsom +pkg_erlsom_fetch = git +pkg_erlsom_repo = https://github.com/willemdj/erlsom +pkg_erlsom_commit = master + +PACKAGES += erlubi +pkg_erlubi_name = erlubi +pkg_erlubi_description = Ubigraph Erlang Client (and Process Visualizer) +pkg_erlubi_homepage = https://github.com/krestenkrab/erlubi +pkg_erlubi_fetch = git +pkg_erlubi_repo = https://github.com/krestenkrab/erlubi +pkg_erlubi_commit = master + +PACKAGES += erlvolt +pkg_erlvolt_name = erlvolt +pkg_erlvolt_description = VoltDB Erlang Client Driver +pkg_erlvolt_homepage = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_fetch = git +pkg_erlvolt_repo = https://github.com/VoltDB/voltdb-client-erlang +pkg_erlvolt_commit = master + +PACKAGES += erlware_commons +pkg_erlware_commons_name = erlware_commons +pkg_erlware_commons_description = Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components. +pkg_erlware_commons_homepage = https://github.com/erlware/erlware_commons +pkg_erlware_commons_fetch = git +pkg_erlware_commons_repo = https://github.com/erlware/erlware_commons +pkg_erlware_commons_commit = master + +PACKAGES += erlydtl +pkg_erlydtl_name = erlydtl +pkg_erlydtl_description = Django Template Language for Erlang. +pkg_erlydtl_homepage = https://github.com/erlydtl/erlydtl +pkg_erlydtl_fetch = git +pkg_erlydtl_repo = https://github.com/erlydtl/erlydtl +pkg_erlydtl_commit = master + +PACKAGES += errd +pkg_errd_name = errd +pkg_errd_description = Erlang RRDTool library +pkg_errd_homepage = https://github.com/archaelus/errd +pkg_errd_fetch = git +pkg_errd_repo = https://github.com/archaelus/errd +pkg_errd_commit = master + +PACKAGES += erserve +pkg_erserve_name = erserve +pkg_erserve_description = Erlang/Rserve communication interface +pkg_erserve_homepage = https://github.com/del/erserve +pkg_erserve_fetch = git +pkg_erserve_repo = https://github.com/del/erserve +pkg_erserve_commit = master + +PACKAGES += erwa +pkg_erwa_name = erwa +pkg_erwa_description = A WAMP router and client written in Erlang. +pkg_erwa_homepage = https://github.com/bwegh/erwa +pkg_erwa_fetch = git +pkg_erwa_repo = https://github.com/bwegh/erwa +pkg_erwa_commit = master + +PACKAGES += escalus +pkg_escalus_name = escalus +pkg_escalus_description = An XMPP client library in Erlang for conveniently testing XMPP servers +pkg_escalus_homepage = https://github.com/esl/escalus +pkg_escalus_fetch = git +pkg_escalus_repo = https://github.com/esl/escalus +pkg_escalus_commit = master + +PACKAGES += espec +pkg_espec_name = espec +pkg_espec_description = ESpec: Behaviour driven development framework for Erlang +pkg_espec_homepage = https://github.com/lucaspiller/espec +pkg_espec_fetch = git +pkg_espec_repo = https://github.com/lucaspiller/espec +pkg_espec_commit = master + +PACKAGES += estatsd +pkg_estatsd_name = estatsd +pkg_estatsd_description = Erlang stats aggregation app that periodically flushes data to graphite +pkg_estatsd_homepage = https://github.com/RJ/estatsd +pkg_estatsd_fetch = git +pkg_estatsd_repo = https://github.com/RJ/estatsd +pkg_estatsd_commit = master + +PACKAGES += etap +pkg_etap_name = etap +pkg_etap_description = etap is a simple erlang testing library that provides TAP compliant output. +pkg_etap_homepage = https://github.com/ngerakines/etap +pkg_etap_fetch = git +pkg_etap_repo = https://github.com/ngerakines/etap +pkg_etap_commit = master + +PACKAGES += etest +pkg_etest_name = etest +pkg_etest_description = A lightweight, convention over configuration test framework for Erlang +pkg_etest_homepage = https://github.com/wooga/etest +pkg_etest_fetch = git +pkg_etest_repo = https://github.com/wooga/etest +pkg_etest_commit = master + +PACKAGES += etest_http +pkg_etest_http_name = etest_http +pkg_etest_http_description = etest Assertions around HTTP (client-side) +pkg_etest_http_homepage = https://github.com/wooga/etest_http +pkg_etest_http_fetch = git +pkg_etest_http_repo = https://github.com/wooga/etest_http +pkg_etest_http_commit = master + +PACKAGES += etoml +pkg_etoml_name = etoml +pkg_etoml_description = TOML language erlang parser +pkg_etoml_homepage = https://github.com/kalta/etoml +pkg_etoml_fetch = git +pkg_etoml_repo = https://github.com/kalta/etoml +pkg_etoml_commit = master + +PACKAGES += eunit +pkg_eunit_name = eunit +pkg_eunit_description = The EUnit lightweight unit testing framework for Erlang - this is the canonical development repository. +pkg_eunit_homepage = https://github.com/richcarl/eunit +pkg_eunit_fetch = git +pkg_eunit_repo = https://github.com/richcarl/eunit +pkg_eunit_commit = master + +PACKAGES += eunit_formatters +pkg_eunit_formatters_name = eunit_formatters +pkg_eunit_formatters_description = Because eunit's output sucks. Let's make it better. +pkg_eunit_formatters_homepage = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_fetch = git +pkg_eunit_formatters_repo = https://github.com/seancribbs/eunit_formatters +pkg_eunit_formatters_commit = master + +PACKAGES += euthanasia +pkg_euthanasia_name = euthanasia +pkg_euthanasia_description = Merciful killer for your Erlang processes +pkg_euthanasia_homepage = https://github.com/doubleyou/euthanasia +pkg_euthanasia_fetch = git +pkg_euthanasia_repo = https://github.com/doubleyou/euthanasia +pkg_euthanasia_commit = master + +PACKAGES += evum +pkg_evum_name = evum +pkg_evum_description = Spawn Linux VMs as Erlang processes in the Erlang VM +pkg_evum_homepage = https://github.com/msantos/evum +pkg_evum_fetch = git +pkg_evum_repo = https://github.com/msantos/evum +pkg_evum_commit = master + +PACKAGES += exec +pkg_exec_name = erlexec +pkg_exec_description = Execute and control OS processes from Erlang/OTP. +pkg_exec_homepage = http://saleyn.github.com/erlexec +pkg_exec_fetch = git +pkg_exec_repo = https://github.com/saleyn/erlexec +pkg_exec_commit = master + +PACKAGES += exml +pkg_exml_name = exml +pkg_exml_description = XML parsing library in Erlang +pkg_exml_homepage = https://github.com/paulgray/exml +pkg_exml_fetch = git +pkg_exml_repo = https://github.com/paulgray/exml +pkg_exml_commit = master + +PACKAGES += exometer +pkg_exometer_name = exometer +pkg_exometer_description = Basic measurement objects and probe behavior +pkg_exometer_homepage = https://github.com/Feuerlabs/exometer +pkg_exometer_fetch = git +pkg_exometer_repo = https://github.com/Feuerlabs/exometer +pkg_exometer_commit = master + +PACKAGES += exs1024 +pkg_exs1024_name = exs1024 +pkg_exs1024_description = Xorshift1024star pseudo random number generator for Erlang. +pkg_exs1024_homepage = https://github.com/jj1bdx/exs1024 +pkg_exs1024_fetch = git +pkg_exs1024_repo = https://github.com/jj1bdx/exs1024 +pkg_exs1024_commit = master + +PACKAGES += exs64 +pkg_exs64_name = exs64 +pkg_exs64_description = Xorshift64star pseudo random number generator for Erlang. +pkg_exs64_homepage = https://github.com/jj1bdx/exs64 +pkg_exs64_fetch = git +pkg_exs64_repo = https://github.com/jj1bdx/exs64 +pkg_exs64_commit = master + +PACKAGES += exsplus116 +pkg_exsplus116_name = exsplus116 +pkg_exsplus116_description = Xorshift116plus for Erlang +pkg_exsplus116_homepage = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_fetch = git +pkg_exsplus116_repo = https://github.com/jj1bdx/exsplus116 +pkg_exsplus116_commit = master + +PACKAGES += exsplus128 +pkg_exsplus128_name = exsplus128 +pkg_exsplus128_description = Xorshift128plus pseudo random number generator for Erlang. +pkg_exsplus128_homepage = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_fetch = git +pkg_exsplus128_repo = https://github.com/jj1bdx/exsplus128 +pkg_exsplus128_commit = master + +PACKAGES += ezmq +pkg_ezmq_name = ezmq +pkg_ezmq_description = zMQ implemented in Erlang +pkg_ezmq_homepage = https://github.com/RoadRunnr/ezmq +pkg_ezmq_fetch = git +pkg_ezmq_repo = https://github.com/RoadRunnr/ezmq +pkg_ezmq_commit = master + +PACKAGES += ezmtp +pkg_ezmtp_name = ezmtp +pkg_ezmtp_description = ZMTP protocol in pure Erlang. +pkg_ezmtp_homepage = https://github.com/a13x/ezmtp +pkg_ezmtp_fetch = git +pkg_ezmtp_repo = https://github.com/a13x/ezmtp +pkg_ezmtp_commit = master + +PACKAGES += fast_disk_log +pkg_fast_disk_log_name = fast_disk_log +pkg_fast_disk_log_description = Pool-based asynchronous Erlang disk logger +pkg_fast_disk_log_homepage = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_fetch = git +pkg_fast_disk_log_repo = https://github.com/lpgauth/fast_disk_log +pkg_fast_disk_log_commit = master + +PACKAGES += feeder +pkg_feeder_name = feeder +pkg_feeder_description = Stream parse RSS and Atom formatted XML feeds. +pkg_feeder_homepage = https://github.com/michaelnisi/feeder +pkg_feeder_fetch = git +pkg_feeder_repo = https://github.com/michaelnisi/feeder +pkg_feeder_commit = master + +PACKAGES += find_crate +pkg_find_crate_name = find_crate +pkg_find_crate_description = Find Rust libs and exes in Erlang application priv directory +pkg_find_crate_homepage = https://github.com/goertzenator/find_crate +pkg_find_crate_fetch = git +pkg_find_crate_repo = https://github.com/goertzenator/find_crate +pkg_find_crate_commit = master + +PACKAGES += fix +pkg_fix_name = fix +pkg_fix_description = http://fixprotocol.org/ implementation. +pkg_fix_homepage = https://github.com/maxlapshin/fix +pkg_fix_fetch = git +pkg_fix_repo = https://github.com/maxlapshin/fix +pkg_fix_commit = master + +PACKAGES += flower +pkg_flower_name = flower +pkg_flower_description = FlowER - a Erlang OpenFlow development platform +pkg_flower_homepage = https://github.com/travelping/flower +pkg_flower_fetch = git +pkg_flower_repo = https://github.com/travelping/flower +pkg_flower_commit = master + +PACKAGES += fn +pkg_fn_name = fn +pkg_fn_description = Function utilities for Erlang +pkg_fn_homepage = https://github.com/reiddraper/fn +pkg_fn_fetch = git +pkg_fn_repo = https://github.com/reiddraper/fn +pkg_fn_commit = master + +PACKAGES += folsom +pkg_folsom_name = folsom +pkg_folsom_description = Expose Erlang Events and Metrics +pkg_folsom_homepage = https://github.com/boundary/folsom +pkg_folsom_fetch = git +pkg_folsom_repo = https://github.com/boundary/folsom +pkg_folsom_commit = master + +PACKAGES += folsom_cowboy +pkg_folsom_cowboy_name = folsom_cowboy +pkg_folsom_cowboy_description = A Cowboy based Folsom HTTP Wrapper. +pkg_folsom_cowboy_homepage = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_fetch = git +pkg_folsom_cowboy_repo = https://github.com/boundary/folsom_cowboy +pkg_folsom_cowboy_commit = master + +PACKAGES += folsomite +pkg_folsomite_name = folsomite +pkg_folsomite_description = blow up your graphite / riemann server with folsom metrics +pkg_folsomite_homepage = https://github.com/campanja/folsomite +pkg_folsomite_fetch = git +pkg_folsomite_repo = https://github.com/campanja/folsomite +pkg_folsomite_commit = master + +PACKAGES += fs +pkg_fs_name = fs +pkg_fs_description = Erlang FileSystem Listener +pkg_fs_homepage = https://github.com/synrc/fs +pkg_fs_fetch = git +pkg_fs_repo = https://github.com/synrc/fs +pkg_fs_commit = master + +PACKAGES += fuse +pkg_fuse_name = fuse +pkg_fuse_description = A Circuit Breaker for Erlang +pkg_fuse_homepage = https://github.com/jlouis/fuse +pkg_fuse_fetch = git +pkg_fuse_repo = https://github.com/jlouis/fuse +pkg_fuse_commit = master + +PACKAGES += gcm +pkg_gcm_name = gcm +pkg_gcm_description = An Erlang application for Google Cloud Messaging +pkg_gcm_homepage = https://github.com/pdincau/gcm-erlang +pkg_gcm_fetch = git +pkg_gcm_repo = https://github.com/pdincau/gcm-erlang +pkg_gcm_commit = master + +PACKAGES += gcprof +pkg_gcprof_name = gcprof +pkg_gcprof_description = Garbage Collection profiler for Erlang +pkg_gcprof_homepage = https://github.com/knutin/gcprof +pkg_gcprof_fetch = git +pkg_gcprof_repo = https://github.com/knutin/gcprof +pkg_gcprof_commit = master + +PACKAGES += geas +pkg_geas_name = geas +pkg_geas_description = Guess Erlang Application Scattering +pkg_geas_homepage = https://github.com/crownedgrouse/geas +pkg_geas_fetch = git +pkg_geas_repo = https://github.com/crownedgrouse/geas +pkg_geas_commit = master + +PACKAGES += geef +pkg_geef_name = geef +pkg_geef_description = Git NEEEEF (Erlang NIF) +pkg_geef_homepage = https://github.com/carlosmn/geef +pkg_geef_fetch = git +pkg_geef_repo = https://github.com/carlosmn/geef +pkg_geef_commit = master + +PACKAGES += gen_coap +pkg_gen_coap_name = gen_coap +pkg_gen_coap_description = Generic Erlang CoAP Client/Server +pkg_gen_coap_homepage = https://github.com/gotthardp/gen_coap +pkg_gen_coap_fetch = git +pkg_gen_coap_repo = https://github.com/gotthardp/gen_coap +pkg_gen_coap_commit = master + +PACKAGES += gen_cycle +pkg_gen_cycle_name = gen_cycle +pkg_gen_cycle_description = Simple, generic OTP behaviour for recurring tasks +pkg_gen_cycle_homepage = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_fetch = git +pkg_gen_cycle_repo = https://github.com/aerosol/gen_cycle +pkg_gen_cycle_commit = develop + +PACKAGES += gen_icmp +pkg_gen_icmp_name = gen_icmp +pkg_gen_icmp_description = Erlang interface to ICMP sockets +pkg_gen_icmp_homepage = https://github.com/msantos/gen_icmp +pkg_gen_icmp_fetch = git +pkg_gen_icmp_repo = https://github.com/msantos/gen_icmp +pkg_gen_icmp_commit = master + +PACKAGES += gen_nb_server +pkg_gen_nb_server_name = gen_nb_server +pkg_gen_nb_server_description = OTP behavior for writing non-blocking servers +pkg_gen_nb_server_homepage = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_fetch = git +pkg_gen_nb_server_repo = https://github.com/kevsmith/gen_nb_server +pkg_gen_nb_server_commit = master + +PACKAGES += gen_paxos +pkg_gen_paxos_name = gen_paxos +pkg_gen_paxos_description = An Erlang/OTP-style implementation of the PAXOS distributed consensus protocol +pkg_gen_paxos_homepage = https://github.com/gburd/gen_paxos +pkg_gen_paxos_fetch = git +pkg_gen_paxos_repo = https://github.com/gburd/gen_paxos +pkg_gen_paxos_commit = master + +PACKAGES += gen_smtp +pkg_gen_smtp_name = gen_smtp +pkg_gen_smtp_description = A generic Erlang SMTP server and client that can be extended via callback modules +pkg_gen_smtp_homepage = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_fetch = git +pkg_gen_smtp_repo = https://github.com/Vagabond/gen_smtp +pkg_gen_smtp_commit = master + +PACKAGES += gen_tracker +pkg_gen_tracker_name = gen_tracker +pkg_gen_tracker_description = supervisor with ets handling of children and their metadata +pkg_gen_tracker_homepage = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_fetch = git +pkg_gen_tracker_repo = https://github.com/erlyvideo/gen_tracker +pkg_gen_tracker_commit = master + +PACKAGES += gen_unix +pkg_gen_unix_name = gen_unix +pkg_gen_unix_description = Erlang Unix socket interface +pkg_gen_unix_homepage = https://github.com/msantos/gen_unix +pkg_gen_unix_fetch = git +pkg_gen_unix_repo = https://github.com/msantos/gen_unix +pkg_gen_unix_commit = master + +PACKAGES += geode +pkg_geode_name = geode +pkg_geode_description = geohash/proximity lookup in pure, uncut erlang. +pkg_geode_homepage = https://github.com/bradfordw/geode +pkg_geode_fetch = git +pkg_geode_repo = https://github.com/bradfordw/geode +pkg_geode_commit = master + +PACKAGES += getopt +pkg_getopt_name = getopt +pkg_getopt_description = Module to parse command line arguments using the GNU getopt syntax +pkg_getopt_homepage = https://github.com/jcomellas/getopt +pkg_getopt_fetch = git +pkg_getopt_repo = https://github.com/jcomellas/getopt +pkg_getopt_commit = master + +PACKAGES += gettext +pkg_gettext_name = gettext +pkg_gettext_description = Erlang internationalization library. +pkg_gettext_homepage = https://github.com/etnt/gettext +pkg_gettext_fetch = git +pkg_gettext_repo = https://github.com/etnt/gettext +pkg_gettext_commit = master + +PACKAGES += giallo +pkg_giallo_name = giallo +pkg_giallo_description = Small and flexible web framework on top of Cowboy +pkg_giallo_homepage = https://github.com/kivra/giallo +pkg_giallo_fetch = git +pkg_giallo_repo = https://github.com/kivra/giallo +pkg_giallo_commit = master + +PACKAGES += gin +pkg_gin_name = gin +pkg_gin_description = The guards and for Erlang parse_transform +pkg_gin_homepage = https://github.com/mad-cocktail/gin +pkg_gin_fetch = git +pkg_gin_repo = https://github.com/mad-cocktail/gin +pkg_gin_commit = master + +PACKAGES += gitty +pkg_gitty_name = gitty +pkg_gitty_description = Git access in erlang +pkg_gitty_homepage = https://github.com/maxlapshin/gitty +pkg_gitty_fetch = git +pkg_gitty_repo = https://github.com/maxlapshin/gitty +pkg_gitty_commit = master + +PACKAGES += gold_fever +pkg_gold_fever_name = gold_fever +pkg_gold_fever_description = A Treasure Hunt for Erlangers +pkg_gold_fever_homepage = https://github.com/inaka/gold_fever +pkg_gold_fever_fetch = git +pkg_gold_fever_repo = https://github.com/inaka/gold_fever +pkg_gold_fever_commit = master + +PACKAGES += gpb +pkg_gpb_name = gpb +pkg_gpb_description = A Google Protobuf implementation for Erlang +pkg_gpb_homepage = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_fetch = git +pkg_gpb_repo = https://github.com/tomas-abrahamsson/gpb +pkg_gpb_commit = master + +PACKAGES += gproc +pkg_gproc_name = gproc +pkg_gproc_description = Extended process registry for Erlang +pkg_gproc_homepage = https://github.com/uwiger/gproc +pkg_gproc_fetch = git +pkg_gproc_repo = https://github.com/uwiger/gproc +pkg_gproc_commit = master + +PACKAGES += grapherl +pkg_grapherl_name = grapherl +pkg_grapherl_description = Create graphs of Erlang systems and programs +pkg_grapherl_homepage = https://github.com/eproxus/grapherl +pkg_grapherl_fetch = git +pkg_grapherl_repo = https://github.com/eproxus/grapherl +pkg_grapherl_commit = master + +PACKAGES += grpc +pkg_grpc_name = grpc +pkg_grpc_description = gRPC server in Erlang +pkg_grpc_homepage = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_fetch = git +pkg_grpc_repo = https://github.com/Bluehouse-Technology/grpc +pkg_grpc_commit = master + +PACKAGES += grpc_client +pkg_grpc_client_name = grpc_client +pkg_grpc_client_description = gRPC client in Erlang +pkg_grpc_client_homepage = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_fetch = git +pkg_grpc_client_repo = https://github.com/Bluehouse-Technology/grpc_client +pkg_grpc_client_commit = master + +PACKAGES += gun +pkg_gun_name = gun +pkg_gun_description = Asynchronous SPDY, HTTP and Websocket client written in Erlang. +pkg_gun_homepage = http//ninenines.eu +pkg_gun_fetch = git +pkg_gun_repo = https://github.com/ninenines/gun +pkg_gun_commit = master + +PACKAGES += gut +pkg_gut_name = gut +pkg_gut_description = gut is a template printing, aka scaffolding, tool for Erlang. Like rails generate or yeoman +pkg_gut_homepage = https://github.com/unbalancedparentheses/gut +pkg_gut_fetch = git +pkg_gut_repo = https://github.com/unbalancedparentheses/gut +pkg_gut_commit = master + +PACKAGES += hackney +pkg_hackney_name = hackney +pkg_hackney_description = simple HTTP client in Erlang +pkg_hackney_homepage = https://github.com/benoitc/hackney +pkg_hackney_fetch = git +pkg_hackney_repo = https://github.com/benoitc/hackney +pkg_hackney_commit = master + +PACKAGES += hamcrest +pkg_hamcrest_name = hamcrest +pkg_hamcrest_description = Erlang port of Hamcrest +pkg_hamcrest_homepage = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_fetch = git +pkg_hamcrest_repo = https://github.com/hyperthunk/hamcrest-erlang +pkg_hamcrest_commit = master + +PACKAGES += hanoidb +pkg_hanoidb_name = hanoidb +pkg_hanoidb_description = Erlang LSM BTree Storage +pkg_hanoidb_homepage = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_fetch = git +pkg_hanoidb_repo = https://github.com/krestenkrab/hanoidb +pkg_hanoidb_commit = master + +PACKAGES += hottub +pkg_hottub_name = hottub +pkg_hottub_description = Permanent Erlang Worker Pool +pkg_hottub_homepage = https://github.com/bfrog/hottub +pkg_hottub_fetch = git +pkg_hottub_repo = https://github.com/bfrog/hottub +pkg_hottub_commit = master + +PACKAGES += hpack +pkg_hpack_name = hpack +pkg_hpack_description = HPACK Implementation for Erlang +pkg_hpack_homepage = https://github.com/joedevivo/hpack +pkg_hpack_fetch = git +pkg_hpack_repo = https://github.com/joedevivo/hpack +pkg_hpack_commit = master + +PACKAGES += hyper +pkg_hyper_name = hyper +pkg_hyper_description = Erlang implementation of HyperLogLog +pkg_hyper_homepage = https://github.com/GameAnalytics/hyper +pkg_hyper_fetch = git +pkg_hyper_repo = https://github.com/GameAnalytics/hyper +pkg_hyper_commit = master + +PACKAGES += i18n +pkg_i18n_name = i18n +pkg_i18n_description = International components for unicode from Erlang (unicode, date, string, number, format, locale, localization, transliteration, icu4e) +pkg_i18n_homepage = https://github.com/erlang-unicode/i18n +pkg_i18n_fetch = git +pkg_i18n_repo = https://github.com/erlang-unicode/i18n +pkg_i18n_commit = master + +PACKAGES += ibrowse +pkg_ibrowse_name = ibrowse +pkg_ibrowse_description = Erlang HTTP client +pkg_ibrowse_homepage = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_fetch = git +pkg_ibrowse_repo = https://github.com/cmullaparthi/ibrowse +pkg_ibrowse_commit = master + +PACKAGES += idna +pkg_idna_name = idna +pkg_idna_description = Erlang IDNA lib +pkg_idna_homepage = https://github.com/benoitc/erlang-idna +pkg_idna_fetch = git +pkg_idna_repo = https://github.com/benoitc/erlang-idna +pkg_idna_commit = master + +PACKAGES += ierlang +pkg_ierlang_name = ierlang +pkg_ierlang_description = An Erlang language kernel for IPython. +pkg_ierlang_homepage = https://github.com/robbielynch/ierlang +pkg_ierlang_fetch = git +pkg_ierlang_repo = https://github.com/robbielynch/ierlang +pkg_ierlang_commit = master + +PACKAGES += iota +pkg_iota_name = iota +pkg_iota_description = iota (Inter-dependency Objective Testing Apparatus) - a tool to enforce clean separation of responsibilities in Erlang code +pkg_iota_homepage = https://github.com/jpgneves/iota +pkg_iota_fetch = git +pkg_iota_repo = https://github.com/jpgneves/iota +pkg_iota_commit = master + +PACKAGES += irc_lib +pkg_irc_lib_name = irc_lib +pkg_irc_lib_description = Erlang irc client library +pkg_irc_lib_homepage = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_fetch = git +pkg_irc_lib_repo = https://github.com/OtpChatBot/irc_lib +pkg_irc_lib_commit = master + +PACKAGES += ircd +pkg_ircd_name = ircd +pkg_ircd_description = A pluggable IRC daemon application/library for Erlang. +pkg_ircd_homepage = https://github.com/tonyg/erlang-ircd +pkg_ircd_fetch = git +pkg_ircd_repo = https://github.com/tonyg/erlang-ircd +pkg_ircd_commit = master + +PACKAGES += iris +pkg_iris_name = iris +pkg_iris_description = Iris Erlang binding +pkg_iris_homepage = https://github.com/project-iris/iris-erl +pkg_iris_fetch = git +pkg_iris_repo = https://github.com/project-iris/iris-erl +pkg_iris_commit = master + +PACKAGES += iso8601 +pkg_iso8601_name = iso8601 +pkg_iso8601_description = Erlang ISO 8601 date formatter/parser +pkg_iso8601_homepage = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_fetch = git +pkg_iso8601_repo = https://github.com/seansawyer/erlang_iso8601 +pkg_iso8601_commit = master + +PACKAGES += jamdb_sybase +pkg_jamdb_sybase_name = jamdb_sybase +pkg_jamdb_sybase_description = Erlang driver for SAP Sybase ASE +pkg_jamdb_sybase_homepage = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_fetch = git +pkg_jamdb_sybase_repo = https://github.com/erlangbureau/jamdb_sybase +pkg_jamdb_sybase_commit = master + +PACKAGES += jerg +pkg_jerg_name = jerg +pkg_jerg_description = JSON Schema to Erlang Records Generator +pkg_jerg_homepage = https://github.com/ddossot/jerg +pkg_jerg_fetch = git +pkg_jerg_repo = https://github.com/ddossot/jerg +pkg_jerg_commit = master + +PACKAGES += jesse +pkg_jesse_name = jesse +pkg_jesse_description = jesse (JSon Schema Erlang) is an implementation of a json schema validator for Erlang. +pkg_jesse_homepage = https://github.com/for-GET/jesse +pkg_jesse_fetch = git +pkg_jesse_repo = https://github.com/for-GET/jesse +pkg_jesse_commit = master + +PACKAGES += jiffy +pkg_jiffy_name = jiffy +pkg_jiffy_description = JSON NIFs for Erlang. +pkg_jiffy_homepage = https://github.com/davisp/jiffy +pkg_jiffy_fetch = git +pkg_jiffy_repo = https://github.com/davisp/jiffy +pkg_jiffy_commit = master + +PACKAGES += jiffy_v +pkg_jiffy_v_name = jiffy_v +pkg_jiffy_v_description = JSON validation utility +pkg_jiffy_v_homepage = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_fetch = git +pkg_jiffy_v_repo = https://github.com/shizzard/jiffy-v +pkg_jiffy_v_commit = master + +PACKAGES += jobs +pkg_jobs_name = jobs +pkg_jobs_description = a Job scheduler for load regulation +pkg_jobs_homepage = https://github.com/esl/jobs +pkg_jobs_fetch = git +pkg_jobs_repo = https://github.com/esl/jobs +pkg_jobs_commit = master + +PACKAGES += joxa +pkg_joxa_name = joxa +pkg_joxa_description = A Modern Lisp for the Erlang VM +pkg_joxa_homepage = https://github.com/joxa/joxa +pkg_joxa_fetch = git +pkg_joxa_repo = https://github.com/joxa/joxa +pkg_joxa_commit = master + +PACKAGES += json +pkg_json_name = json +pkg_json_description = a high level json library for erlang (17.0+) +pkg_json_homepage = https://github.com/talentdeficit/json +pkg_json_fetch = git +pkg_json_repo = https://github.com/talentdeficit/json +pkg_json_commit = master + +PACKAGES += json_rec +pkg_json_rec_name = json_rec +pkg_json_rec_description = JSON to erlang record +pkg_json_rec_homepage = https://github.com/justinkirby/json_rec +pkg_json_rec_fetch = git +pkg_json_rec_repo = https://github.com/justinkirby/json_rec +pkg_json_rec_commit = master + +PACKAGES += jsone +pkg_jsone_name = jsone +pkg_jsone_description = An Erlang library for encoding, decoding JSON data. +pkg_jsone_homepage = https://github.com/sile/jsone.git +pkg_jsone_fetch = git +pkg_jsone_repo = https://github.com/sile/jsone.git +pkg_jsone_commit = master + +PACKAGES += jsonerl +pkg_jsonerl_name = jsonerl +pkg_jsonerl_description = yet another but slightly different erlang <-> json encoder/decoder +pkg_jsonerl_homepage = https://github.com/lambder/jsonerl +pkg_jsonerl_fetch = git +pkg_jsonerl_repo = https://github.com/lambder/jsonerl +pkg_jsonerl_commit = master + +PACKAGES += jsonpath +pkg_jsonpath_name = jsonpath +pkg_jsonpath_description = Fast Erlang JSON data retrieval and updates via javascript-like notation +pkg_jsonpath_homepage = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_fetch = git +pkg_jsonpath_repo = https://github.com/GeneStevens/jsonpath +pkg_jsonpath_commit = master + +PACKAGES += jsonx +pkg_jsonx_name = jsonx +pkg_jsonx_description = JSONX is an Erlang library for efficient decode and encode JSON, written in C. +pkg_jsonx_homepage = https://github.com/iskra/jsonx +pkg_jsonx_fetch = git +pkg_jsonx_repo = https://github.com/iskra/jsonx +pkg_jsonx_commit = master + +PACKAGES += jsx +pkg_jsx_name = jsx +pkg_jsx_description = An Erlang application for consuming, producing and manipulating JSON. +pkg_jsx_homepage = https://github.com/talentdeficit/jsx +pkg_jsx_fetch = git +pkg_jsx_repo = https://github.com/talentdeficit/jsx +pkg_jsx_commit = master + +PACKAGES += kafka +pkg_kafka_name = kafka +pkg_kafka_description = Kafka consumer and producer in Erlang +pkg_kafka_homepage = https://github.com/wooga/kafka-erlang +pkg_kafka_fetch = git +pkg_kafka_repo = https://github.com/wooga/kafka-erlang +pkg_kafka_commit = master + +PACKAGES += kafka_protocol +pkg_kafka_protocol_name = kafka_protocol +pkg_kafka_protocol_description = Kafka protocol Erlang library +pkg_kafka_protocol_homepage = https://github.com/klarna/kafka_protocol +pkg_kafka_protocol_fetch = git +pkg_kafka_protocol_repo = https://github.com/klarna/kafka_protocol.git +pkg_kafka_protocol_commit = master + +PACKAGES += kai +pkg_kai_name = kai +pkg_kai_description = DHT storage by Takeshi Inoue +pkg_kai_homepage = https://github.com/synrc/kai +pkg_kai_fetch = git +pkg_kai_repo = https://github.com/synrc/kai +pkg_kai_commit = master + +PACKAGES += katja +pkg_katja_name = katja +pkg_katja_description = A simple Riemann client written in Erlang. +pkg_katja_homepage = https://github.com/nifoc/katja +pkg_katja_fetch = git +pkg_katja_repo = https://github.com/nifoc/katja +pkg_katja_commit = master + +PACKAGES += kdht +pkg_kdht_name = kdht +pkg_kdht_description = kdht is an erlang DHT implementation +pkg_kdht_homepage = https://github.com/kevinlynx/kdht +pkg_kdht_fetch = git +pkg_kdht_repo = https://github.com/kevinlynx/kdht +pkg_kdht_commit = master + +PACKAGES += key2value +pkg_key2value_name = key2value +pkg_key2value_description = Erlang 2-way map +pkg_key2value_homepage = https://github.com/okeuday/key2value +pkg_key2value_fetch = git +pkg_key2value_repo = https://github.com/okeuday/key2value +pkg_key2value_commit = master + +PACKAGES += keys1value +pkg_keys1value_name = keys1value +pkg_keys1value_description = Erlang set associative map for key lists +pkg_keys1value_homepage = https://github.com/okeuday/keys1value +pkg_keys1value_fetch = git +pkg_keys1value_repo = https://github.com/okeuday/keys1value +pkg_keys1value_commit = master + +PACKAGES += kinetic +pkg_kinetic_name = kinetic +pkg_kinetic_description = Erlang Kinesis Client +pkg_kinetic_homepage = https://github.com/AdRoll/kinetic +pkg_kinetic_fetch = git +pkg_kinetic_repo = https://github.com/AdRoll/kinetic +pkg_kinetic_commit = master + +PACKAGES += kjell +pkg_kjell_name = kjell +pkg_kjell_description = Erlang Shell +pkg_kjell_homepage = https://github.com/karlll/kjell +pkg_kjell_fetch = git +pkg_kjell_repo = https://github.com/karlll/kjell +pkg_kjell_commit = master + +PACKAGES += kraken +pkg_kraken_name = kraken +pkg_kraken_description = Distributed Pubsub Server for Realtime Apps +pkg_kraken_homepage = https://github.com/Asana/kraken +pkg_kraken_fetch = git +pkg_kraken_repo = https://github.com/Asana/kraken +pkg_kraken_commit = master + +PACKAGES += kucumberl +pkg_kucumberl_name = kucumberl +pkg_kucumberl_description = A pure-erlang, open-source, implementation of Cucumber +pkg_kucumberl_homepage = https://github.com/openshine/kucumberl +pkg_kucumberl_fetch = git +pkg_kucumberl_repo = https://github.com/openshine/kucumberl +pkg_kucumberl_commit = master + +PACKAGES += kvc +pkg_kvc_name = kvc +pkg_kvc_description = KVC - Key Value Coding for Erlang data structures +pkg_kvc_homepage = https://github.com/etrepum/kvc +pkg_kvc_fetch = git +pkg_kvc_repo = https://github.com/etrepum/kvc +pkg_kvc_commit = master + +PACKAGES += kvlists +pkg_kvlists_name = kvlists +pkg_kvlists_description = Lists of key-value pairs (decoded JSON) in Erlang +pkg_kvlists_homepage = https://github.com/jcomellas/kvlists +pkg_kvlists_fetch = git +pkg_kvlists_repo = https://github.com/jcomellas/kvlists +pkg_kvlists_commit = master + +PACKAGES += kvs +pkg_kvs_name = kvs +pkg_kvs_description = Container and Iterator +pkg_kvs_homepage = https://github.com/synrc/kvs +pkg_kvs_fetch = git +pkg_kvs_repo = https://github.com/synrc/kvs +pkg_kvs_commit = master + +PACKAGES += lager +pkg_lager_name = lager +pkg_lager_description = A logging framework for Erlang/OTP. +pkg_lager_homepage = https://github.com/erlang-lager/lager +pkg_lager_fetch = git +pkg_lager_repo = https://github.com/erlang-lager/lager +pkg_lager_commit = master + +PACKAGES += lager_amqp_backend +pkg_lager_amqp_backend_name = lager_amqp_backend +pkg_lager_amqp_backend_description = AMQP RabbitMQ Lager backend +pkg_lager_amqp_backend_homepage = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_fetch = git +pkg_lager_amqp_backend_repo = https://github.com/jbrisbin/lager_amqp_backend +pkg_lager_amqp_backend_commit = master + +PACKAGES += lager_syslog +pkg_lager_syslog_name = lager_syslog +pkg_lager_syslog_description = Syslog backend for lager +pkg_lager_syslog_homepage = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_fetch = git +pkg_lager_syslog_repo = https://github.com/erlang-lager/lager_syslog +pkg_lager_syslog_commit = master + +PACKAGES += lambdapad +pkg_lambdapad_name = lambdapad +pkg_lambdapad_description = Static site generator using Erlang. Yes, Erlang. +pkg_lambdapad_homepage = https://github.com/gar1t/lambdapad +pkg_lambdapad_fetch = git +pkg_lambdapad_repo = https://github.com/gar1t/lambdapad +pkg_lambdapad_commit = master + +PACKAGES += lasp +pkg_lasp_name = lasp +pkg_lasp_description = A Language for Distributed, Eventually Consistent Computations +pkg_lasp_homepage = http://lasp-lang.org/ +pkg_lasp_fetch = git +pkg_lasp_repo = https://github.com/lasp-lang/lasp +pkg_lasp_commit = master + +PACKAGES += lasse +pkg_lasse_name = lasse +pkg_lasse_description = SSE handler for Cowboy +pkg_lasse_homepage = https://github.com/inaka/lasse +pkg_lasse_fetch = git +pkg_lasse_repo = https://github.com/inaka/lasse +pkg_lasse_commit = master + +PACKAGES += ldap +pkg_ldap_name = ldap +pkg_ldap_description = LDAP server written in Erlang +pkg_ldap_homepage = https://github.com/spawnproc/ldap +pkg_ldap_fetch = git +pkg_ldap_repo = https://github.com/spawnproc/ldap +pkg_ldap_commit = master + +PACKAGES += lethink +pkg_lethink_name = lethink +pkg_lethink_description = erlang driver for rethinkdb +pkg_lethink_homepage = https://github.com/taybin/lethink +pkg_lethink_fetch = git +pkg_lethink_repo = https://github.com/taybin/lethink +pkg_lethink_commit = master + +PACKAGES += lfe +pkg_lfe_name = lfe +pkg_lfe_description = Lisp Flavoured Erlang (LFE) +pkg_lfe_homepage = https://github.com/rvirding/lfe +pkg_lfe_fetch = git +pkg_lfe_repo = https://github.com/rvirding/lfe +pkg_lfe_commit = master + +PACKAGES += ling +pkg_ling_name = ling +pkg_ling_description = Erlang on Xen +pkg_ling_homepage = https://github.com/cloudozer/ling +pkg_ling_fetch = git +pkg_ling_repo = https://github.com/cloudozer/ling +pkg_ling_commit = master + +PACKAGES += live +pkg_live_name = live +pkg_live_description = Automated module and configuration reloader. +pkg_live_homepage = http://ninenines.eu +pkg_live_fetch = git +pkg_live_repo = https://github.com/ninenines/live +pkg_live_commit = master + +PACKAGES += lmq +pkg_lmq_name = lmq +pkg_lmq_description = Lightweight Message Queue +pkg_lmq_homepage = https://github.com/iij/lmq +pkg_lmq_fetch = git +pkg_lmq_repo = https://github.com/iij/lmq +pkg_lmq_commit = master + +PACKAGES += locker +pkg_locker_name = locker +pkg_locker_description = Atomic distributed 'check and set' for short-lived keys +pkg_locker_homepage = https://github.com/wooga/locker +pkg_locker_fetch = git +pkg_locker_repo = https://github.com/wooga/locker +pkg_locker_commit = master + +PACKAGES += locks +pkg_locks_name = locks +pkg_locks_description = A scalable, deadlock-resolving resource locker +pkg_locks_homepage = https://github.com/uwiger/locks +pkg_locks_fetch = git +pkg_locks_repo = https://github.com/uwiger/locks +pkg_locks_commit = master + +PACKAGES += log4erl +pkg_log4erl_name = log4erl +pkg_log4erl_description = A logger for erlang in the spirit of Log4J. +pkg_log4erl_homepage = https://github.com/ahmednawras/log4erl +pkg_log4erl_fetch = git +pkg_log4erl_repo = https://github.com/ahmednawras/log4erl +pkg_log4erl_commit = master + +PACKAGES += lol +pkg_lol_name = lol +pkg_lol_description = Lisp on erLang, and programming is fun again +pkg_lol_homepage = https://github.com/b0oh/lol +pkg_lol_fetch = git +pkg_lol_repo = https://github.com/b0oh/lol +pkg_lol_commit = master + +PACKAGES += lucid +pkg_lucid_name = lucid +pkg_lucid_description = HTTP/2 server written in Erlang +pkg_lucid_homepage = https://github.com/tatsuhiro-t/lucid +pkg_lucid_fetch = git +pkg_lucid_repo = https://github.com/tatsuhiro-t/lucid +pkg_lucid_commit = master + +PACKAGES += luerl +pkg_luerl_name = luerl +pkg_luerl_description = Lua in Erlang +pkg_luerl_homepage = https://github.com/rvirding/luerl +pkg_luerl_fetch = git +pkg_luerl_repo = https://github.com/rvirding/luerl +pkg_luerl_commit = develop + +PACKAGES += luwak +pkg_luwak_name = luwak +pkg_luwak_description = Large-object storage interface for Riak +pkg_luwak_homepage = https://github.com/basho/luwak +pkg_luwak_fetch = git +pkg_luwak_repo = https://github.com/basho/luwak +pkg_luwak_commit = master + +PACKAGES += lux +pkg_lux_name = lux +pkg_lux_description = Lux (LUcid eXpect scripting) simplifies test automation and provides an Expect-style execution of commands +pkg_lux_homepage = https://github.com/hawk/lux +pkg_lux_fetch = git +pkg_lux_repo = https://github.com/hawk/lux +pkg_lux_commit = master + +PACKAGES += machi +pkg_machi_name = machi +pkg_machi_description = Machi file store +pkg_machi_homepage = https://github.com/basho/machi +pkg_machi_fetch = git +pkg_machi_repo = https://github.com/basho/machi +pkg_machi_commit = master + +PACKAGES += mad +pkg_mad_name = mad +pkg_mad_description = Small and Fast Rebar Replacement +pkg_mad_homepage = https://github.com/synrc/mad +pkg_mad_fetch = git +pkg_mad_repo = https://github.com/synrc/mad +pkg_mad_commit = master + +PACKAGES += marina +pkg_marina_name = marina +pkg_marina_description = Non-blocking Erlang Cassandra CQL3 client +pkg_marina_homepage = https://github.com/lpgauth/marina +pkg_marina_fetch = git +pkg_marina_repo = https://github.com/lpgauth/marina +pkg_marina_commit = master + +PACKAGES += mavg +pkg_mavg_name = mavg +pkg_mavg_description = Erlang :: Exponential moving average library +pkg_mavg_homepage = https://github.com/EchoTeam/mavg +pkg_mavg_fetch = git +pkg_mavg_repo = https://github.com/EchoTeam/mavg +pkg_mavg_commit = master + +PACKAGES += mc_erl +pkg_mc_erl_name = mc_erl +pkg_mc_erl_description = mc-erl is a server for Minecraft 1.4.7 written in Erlang. +pkg_mc_erl_homepage = https://github.com/clonejo/mc-erl +pkg_mc_erl_fetch = git +pkg_mc_erl_repo = https://github.com/clonejo/mc-erl +pkg_mc_erl_commit = master + +PACKAGES += mcd +pkg_mcd_name = mcd +pkg_mcd_description = Fast memcached protocol client in pure Erlang +pkg_mcd_homepage = https://github.com/EchoTeam/mcd +pkg_mcd_fetch = git +pkg_mcd_repo = https://github.com/EchoTeam/mcd +pkg_mcd_commit = master + +PACKAGES += mcerlang +pkg_mcerlang_name = mcerlang +pkg_mcerlang_description = The McErlang model checker for Erlang +pkg_mcerlang_homepage = https://github.com/fredlund/McErlang +pkg_mcerlang_fetch = git +pkg_mcerlang_repo = https://github.com/fredlund/McErlang +pkg_mcerlang_commit = master + +PACKAGES += meck +pkg_meck_name = meck +pkg_meck_description = A mocking library for Erlang +pkg_meck_homepage = https://github.com/eproxus/meck +pkg_meck_fetch = git +pkg_meck_repo = https://github.com/eproxus/meck +pkg_meck_commit = master + +PACKAGES += mekao +pkg_mekao_name = mekao +pkg_mekao_description = SQL constructor +pkg_mekao_homepage = https://github.com/ddosia/mekao +pkg_mekao_fetch = git +pkg_mekao_repo = https://github.com/ddosia/mekao +pkg_mekao_commit = master + +PACKAGES += memo +pkg_memo_name = memo +pkg_memo_description = Erlang memoization server +pkg_memo_homepage = https://github.com/tuncer/memo +pkg_memo_fetch = git +pkg_memo_repo = https://github.com/tuncer/memo +pkg_memo_commit = master + +PACKAGES += merge_index +pkg_merge_index_name = merge_index +pkg_merge_index_description = MergeIndex is an Erlang library for storing ordered sets on disk. It is very similar to an SSTable (in Google's Bigtable) or an HFile (in Hadoop). +pkg_merge_index_homepage = https://github.com/basho/merge_index +pkg_merge_index_fetch = git +pkg_merge_index_repo = https://github.com/basho/merge_index +pkg_merge_index_commit = master + +PACKAGES += merl +pkg_merl_name = merl +pkg_merl_description = Metaprogramming in Erlang +pkg_merl_homepage = https://github.com/richcarl/merl +pkg_merl_fetch = git +pkg_merl_repo = https://github.com/richcarl/merl +pkg_merl_commit = master + +PACKAGES += mimerl +pkg_mimerl_name = mimerl +pkg_mimerl_description = library to handle mimetypes +pkg_mimerl_homepage = https://github.com/benoitc/mimerl +pkg_mimerl_fetch = git +pkg_mimerl_repo = https://github.com/benoitc/mimerl +pkg_mimerl_commit = master + +PACKAGES += mimetypes +pkg_mimetypes_name = mimetypes +pkg_mimetypes_description = Erlang MIME types library +pkg_mimetypes_homepage = https://github.com/spawngrid/mimetypes +pkg_mimetypes_fetch = git +pkg_mimetypes_repo = https://github.com/spawngrid/mimetypes +pkg_mimetypes_commit = master + +PACKAGES += mixer +pkg_mixer_name = mixer +pkg_mixer_description = Mix in functions from other modules +pkg_mixer_homepage = https://github.com/chef/mixer +pkg_mixer_fetch = git +pkg_mixer_repo = https://github.com/chef/mixer +pkg_mixer_commit = master + +PACKAGES += mochiweb +pkg_mochiweb_name = mochiweb +pkg_mochiweb_description = MochiWeb is an Erlang library for building lightweight HTTP servers. +pkg_mochiweb_homepage = https://github.com/mochi/mochiweb +pkg_mochiweb_fetch = git +pkg_mochiweb_repo = https://github.com/mochi/mochiweb +pkg_mochiweb_commit = master + +PACKAGES += mochiweb_xpath +pkg_mochiweb_xpath_name = mochiweb_xpath +pkg_mochiweb_xpath_description = XPath support for mochiweb's html parser +pkg_mochiweb_xpath_homepage = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_fetch = git +pkg_mochiweb_xpath_repo = https://github.com/retnuh/mochiweb_xpath +pkg_mochiweb_xpath_commit = master + +PACKAGES += mockgyver +pkg_mockgyver_name = mockgyver +pkg_mockgyver_description = A mocking library for Erlang +pkg_mockgyver_homepage = https://github.com/klajo/mockgyver +pkg_mockgyver_fetch = git +pkg_mockgyver_repo = https://github.com/klajo/mockgyver +pkg_mockgyver_commit = master + +PACKAGES += modlib +pkg_modlib_name = modlib +pkg_modlib_description = Web framework based on Erlang's inets httpd +pkg_modlib_homepage = https://github.com/gar1t/modlib +pkg_modlib_fetch = git +pkg_modlib_repo = https://github.com/gar1t/modlib +pkg_modlib_commit = master + +PACKAGES += mongodb +pkg_mongodb_name = mongodb +pkg_mongodb_description = MongoDB driver for Erlang +pkg_mongodb_homepage = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_fetch = git +pkg_mongodb_repo = https://github.com/comtihon/mongodb-erlang +pkg_mongodb_commit = master + +PACKAGES += mongooseim +pkg_mongooseim_name = mongooseim +pkg_mongooseim_description = Jabber / XMPP server with focus on performance and scalability, by Erlang Solutions +pkg_mongooseim_homepage = https://www.erlang-solutions.com/products/mongooseim-massively-scalable-ejabberd-platform +pkg_mongooseim_fetch = git +pkg_mongooseim_repo = https://github.com/esl/MongooseIM +pkg_mongooseim_commit = master + +PACKAGES += moyo +pkg_moyo_name = moyo +pkg_moyo_description = Erlang utility functions library +pkg_moyo_homepage = https://github.com/dwango/moyo +pkg_moyo_fetch = git +pkg_moyo_repo = https://github.com/dwango/moyo +pkg_moyo_commit = master + +PACKAGES += msgpack +pkg_msgpack_name = msgpack +pkg_msgpack_description = MessagePack (de)serializer implementation for Erlang +pkg_msgpack_homepage = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_fetch = git +pkg_msgpack_repo = https://github.com/msgpack/msgpack-erlang +pkg_msgpack_commit = master + +PACKAGES += mu2 +pkg_mu2_name = mu2 +pkg_mu2_description = Erlang mutation testing tool +pkg_mu2_homepage = https://github.com/ramsay-t/mu2 +pkg_mu2_fetch = git +pkg_mu2_repo = https://github.com/ramsay-t/mu2 +pkg_mu2_commit = master + +PACKAGES += mustache +pkg_mustache_name = mustache +pkg_mustache_description = Mustache template engine for Erlang. +pkg_mustache_homepage = https://github.com/mojombo/mustache.erl +pkg_mustache_fetch = git +pkg_mustache_repo = https://github.com/mojombo/mustache.erl +pkg_mustache_commit = master + +PACKAGES += myproto +pkg_myproto_name = myproto +pkg_myproto_description = MySQL Server Protocol in Erlang +pkg_myproto_homepage = https://github.com/altenwald/myproto +pkg_myproto_fetch = git +pkg_myproto_repo = https://github.com/altenwald/myproto +pkg_myproto_commit = master + +PACKAGES += mysql +pkg_mysql_name = mysql +pkg_mysql_description = Erlang MySQL Driver (from code.google.com) +pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_fetch = git +pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_commit = master + +PACKAGES += n2o +pkg_n2o_name = n2o +pkg_n2o_description = WebSocket Application Server +pkg_n2o_homepage = https://github.com/5HT/n2o +pkg_n2o_fetch = git +pkg_n2o_repo = https://github.com/5HT/n2o +pkg_n2o_commit = master + +PACKAGES += nat_upnp +pkg_nat_upnp_name = nat_upnp +pkg_nat_upnp_description = Erlang library to map your internal port to an external using UNP IGD +pkg_nat_upnp_homepage = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_fetch = git +pkg_nat_upnp_repo = https://github.com/benoitc/nat_upnp +pkg_nat_upnp_commit = master + +PACKAGES += neo4j +pkg_neo4j_name = neo4j +pkg_neo4j_description = Erlang client library for Neo4J. +pkg_neo4j_homepage = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_fetch = git +pkg_neo4j_repo = https://github.com/dmitriid/neo4j-erlang +pkg_neo4j_commit = master + +PACKAGES += neotoma +pkg_neotoma_name = neotoma +pkg_neotoma_description = Erlang library and packrat parser-generator for parsing expression grammars. +pkg_neotoma_homepage = https://github.com/seancribbs/neotoma +pkg_neotoma_fetch = git +pkg_neotoma_repo = https://github.com/seancribbs/neotoma +pkg_neotoma_commit = master + +PACKAGES += newrelic +pkg_newrelic_name = newrelic +pkg_newrelic_description = Erlang library for sending metrics to New Relic +pkg_newrelic_homepage = https://github.com/wooga/newrelic-erlang +pkg_newrelic_fetch = git +pkg_newrelic_repo = https://github.com/wooga/newrelic-erlang +pkg_newrelic_commit = master + +PACKAGES += nifty +pkg_nifty_name = nifty +pkg_nifty_description = Erlang NIF wrapper generator +pkg_nifty_homepage = https://github.com/parapluu/nifty +pkg_nifty_fetch = git +pkg_nifty_repo = https://github.com/parapluu/nifty +pkg_nifty_commit = master + +PACKAGES += nitrogen_core +pkg_nitrogen_core_name = nitrogen_core +pkg_nitrogen_core_description = The core Nitrogen library. +pkg_nitrogen_core_homepage = http://nitrogenproject.com/ +pkg_nitrogen_core_fetch = git +pkg_nitrogen_core_repo = https://github.com/nitrogen/nitrogen_core +pkg_nitrogen_core_commit = master + +PACKAGES += nkbase +pkg_nkbase_name = nkbase +pkg_nkbase_description = NkBASE distributed database +pkg_nkbase_homepage = https://github.com/Nekso/nkbase +pkg_nkbase_fetch = git +pkg_nkbase_repo = https://github.com/Nekso/nkbase +pkg_nkbase_commit = develop + +PACKAGES += nkdocker +pkg_nkdocker_name = nkdocker +pkg_nkdocker_description = Erlang Docker client +pkg_nkdocker_homepage = https://github.com/Nekso/nkdocker +pkg_nkdocker_fetch = git +pkg_nkdocker_repo = https://github.com/Nekso/nkdocker +pkg_nkdocker_commit = master + +PACKAGES += nkpacket +pkg_nkpacket_name = nkpacket +pkg_nkpacket_description = Generic Erlang transport layer +pkg_nkpacket_homepage = https://github.com/Nekso/nkpacket +pkg_nkpacket_fetch = git +pkg_nkpacket_repo = https://github.com/Nekso/nkpacket +pkg_nkpacket_commit = master + +PACKAGES += nksip +pkg_nksip_name = nksip +pkg_nksip_description = Erlang SIP application server +pkg_nksip_homepage = https://github.com/kalta/nksip +pkg_nksip_fetch = git +pkg_nksip_repo = https://github.com/kalta/nksip +pkg_nksip_commit = master + +PACKAGES += nodefinder +pkg_nodefinder_name = nodefinder +pkg_nodefinder_description = automatic node discovery via UDP multicast +pkg_nodefinder_homepage = https://github.com/erlanger/nodefinder +pkg_nodefinder_fetch = git +pkg_nodefinder_repo = https://github.com/okeuday/nodefinder +pkg_nodefinder_commit = master + +PACKAGES += nprocreg +pkg_nprocreg_name = nprocreg +pkg_nprocreg_description = Minimal Distributed Erlang Process Registry +pkg_nprocreg_homepage = http://nitrogenproject.com/ +pkg_nprocreg_fetch = git +pkg_nprocreg_repo = https://github.com/nitrogen/nprocreg +pkg_nprocreg_commit = master + +PACKAGES += oauth +pkg_oauth_name = oauth +pkg_oauth_description = An Erlang OAuth 1.0 implementation +pkg_oauth_homepage = https://github.com/tim/erlang-oauth +pkg_oauth_fetch = git +pkg_oauth_repo = https://github.com/tim/erlang-oauth +pkg_oauth_commit = master + +PACKAGES += oauth2 +pkg_oauth2_name = oauth2 +pkg_oauth2_description = Erlang Oauth2 implementation +pkg_oauth2_homepage = https://github.com/kivra/oauth2 +pkg_oauth2_fetch = git +pkg_oauth2_repo = https://github.com/kivra/oauth2 +pkg_oauth2_commit = master + +PACKAGES += observer_cli +pkg_observer_cli_name = observer_cli +pkg_observer_cli_description = Visualize Erlang/Elixir Nodes On The Command Line +pkg_observer_cli_homepage = http://zhongwencool.github.io/observer_cli +pkg_observer_cli_fetch = git +pkg_observer_cli_repo = https://github.com/zhongwencool/observer_cli +pkg_observer_cli_commit = master + +PACKAGES += octopus +pkg_octopus_name = octopus +pkg_octopus_description = Small and flexible pool manager written in Erlang +pkg_octopus_homepage = https://github.com/erlangbureau/octopus +pkg_octopus_fetch = git +pkg_octopus_repo = https://github.com/erlangbureau/octopus +pkg_octopus_commit = master + +PACKAGES += of_protocol +pkg_of_protocol_name = of_protocol +pkg_of_protocol_description = OpenFlow Protocol Library for Erlang +pkg_of_protocol_homepage = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_fetch = git +pkg_of_protocol_repo = https://github.com/FlowForwarding/of_protocol +pkg_of_protocol_commit = master + +PACKAGES += opencouch +pkg_opencouch_name = couch +pkg_opencouch_description = A embeddable document oriented database compatible with Apache CouchDB +pkg_opencouch_homepage = https://github.com/benoitc/opencouch +pkg_opencouch_fetch = git +pkg_opencouch_repo = https://github.com/benoitc/opencouch +pkg_opencouch_commit = master + +PACKAGES += openflow +pkg_openflow_name = openflow +pkg_openflow_description = An OpenFlow controller written in pure erlang +pkg_openflow_homepage = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_fetch = git +pkg_openflow_repo = https://github.com/renatoaguiar/erlang-openflow +pkg_openflow_commit = master + +PACKAGES += openid +pkg_openid_name = openid +pkg_openid_description = Erlang OpenID +pkg_openid_homepage = https://github.com/brendonh/erl_openid +pkg_openid_fetch = git +pkg_openid_repo = https://github.com/brendonh/erl_openid +pkg_openid_commit = master + +PACKAGES += openpoker +pkg_openpoker_name = openpoker +pkg_openpoker_description = Genesis Texas hold'em Game Server +pkg_openpoker_homepage = https://github.com/hpyhacking/openpoker +pkg_openpoker_fetch = git +pkg_openpoker_repo = https://github.com/hpyhacking/openpoker +pkg_openpoker_commit = master + +PACKAGES += otpbp +pkg_otpbp_name = otpbp +pkg_otpbp_description = Parse transformer for use new OTP functions in old Erlang/OTP releases (R15, R16, 17, 18, 19) +pkg_otpbp_homepage = https://github.com/Ledest/otpbp +pkg_otpbp_fetch = git +pkg_otpbp_repo = https://github.com/Ledest/otpbp +pkg_otpbp_commit = master + +PACKAGES += pal +pkg_pal_name = pal +pkg_pal_description = Pragmatic Authentication Library +pkg_pal_homepage = https://github.com/manifest/pal +pkg_pal_fetch = git +pkg_pal_repo = https://github.com/manifest/pal +pkg_pal_commit = master + +PACKAGES += parse_trans +pkg_parse_trans_name = parse_trans +pkg_parse_trans_description = Parse transform utilities for Erlang +pkg_parse_trans_homepage = https://github.com/uwiger/parse_trans +pkg_parse_trans_fetch = git +pkg_parse_trans_repo = https://github.com/uwiger/parse_trans +pkg_parse_trans_commit = master + +PACKAGES += parsexml +pkg_parsexml_name = parsexml +pkg_parsexml_description = Simple DOM XML parser with convenient and very simple API +pkg_parsexml_homepage = https://github.com/maxlapshin/parsexml +pkg_parsexml_fetch = git +pkg_parsexml_repo = https://github.com/maxlapshin/parsexml +pkg_parsexml_commit = master + +PACKAGES += pegjs +pkg_pegjs_name = pegjs +pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. +pkg_pegjs_homepage = https://github.com/dmitriid/pegjs +pkg_pegjs_fetch = git +pkg_pegjs_repo = https://github.com/dmitriid/pegjs +pkg_pegjs_commit = master + +PACKAGES += percept2 +pkg_percept2_name = percept2 +pkg_percept2_description = Concurrent profiling tool for Erlang +pkg_percept2_homepage = https://github.com/huiqing/percept2 +pkg_percept2_fetch = git +pkg_percept2_repo = https://github.com/huiqing/percept2 +pkg_percept2_commit = master + +PACKAGES += pgsql +pkg_pgsql_name = pgsql +pkg_pgsql_description = Erlang PostgreSQL driver +pkg_pgsql_homepage = https://github.com/semiocast/pgsql +pkg_pgsql_fetch = git +pkg_pgsql_repo = https://github.com/semiocast/pgsql +pkg_pgsql_commit = master + +PACKAGES += pkgx +pkg_pkgx_name = pkgx +pkg_pkgx_description = Build .deb packages from Erlang releases +pkg_pkgx_homepage = https://github.com/arjan/pkgx +pkg_pkgx_fetch = git +pkg_pkgx_repo = https://github.com/arjan/pkgx +pkg_pkgx_commit = master + +PACKAGES += pkt +pkg_pkt_name = pkt +pkg_pkt_description = Erlang network protocol library +pkg_pkt_homepage = https://github.com/msantos/pkt +pkg_pkt_fetch = git +pkg_pkt_repo = https://github.com/msantos/pkt +pkg_pkt_commit = master + +PACKAGES += plain_fsm +pkg_plain_fsm_name = plain_fsm +pkg_plain_fsm_description = A behaviour/support library for writing plain Erlang FSMs. +pkg_plain_fsm_homepage = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_fetch = git +pkg_plain_fsm_repo = https://github.com/uwiger/plain_fsm +pkg_plain_fsm_commit = master + +PACKAGES += plumtree +pkg_plumtree_name = plumtree +pkg_plumtree_description = Epidemic Broadcast Trees +pkg_plumtree_homepage = https://github.com/helium/plumtree +pkg_plumtree_fetch = git +pkg_plumtree_repo = https://github.com/helium/plumtree +pkg_plumtree_commit = master + +PACKAGES += pmod_transform +pkg_pmod_transform_name = pmod_transform +pkg_pmod_transform_description = Parse transform for parameterized modules +pkg_pmod_transform_homepage = https://github.com/erlang/pmod_transform +pkg_pmod_transform_fetch = git +pkg_pmod_transform_repo = https://github.com/erlang/pmod_transform +pkg_pmod_transform_commit = master + +PACKAGES += pobox +pkg_pobox_name = pobox +pkg_pobox_description = External buffer processes to protect against mailbox overflow in Erlang +pkg_pobox_homepage = https://github.com/ferd/pobox +pkg_pobox_fetch = git +pkg_pobox_repo = https://github.com/ferd/pobox +pkg_pobox_commit = master + +PACKAGES += ponos +pkg_ponos_name = ponos +pkg_ponos_description = ponos is a simple yet powerful load generator written in erlang +pkg_ponos_homepage = https://github.com/klarna/ponos +pkg_ponos_fetch = git +pkg_ponos_repo = https://github.com/klarna/ponos +pkg_ponos_commit = master + +PACKAGES += poolboy +pkg_poolboy_name = poolboy +pkg_poolboy_description = A hunky Erlang worker pool factory +pkg_poolboy_homepage = https://github.com/devinus/poolboy +pkg_poolboy_fetch = git +pkg_poolboy_repo = https://github.com/devinus/poolboy +pkg_poolboy_commit = master + +PACKAGES += pooler +pkg_pooler_name = pooler +pkg_pooler_description = An OTP Process Pool Application +pkg_pooler_homepage = https://github.com/seth/pooler +pkg_pooler_fetch = git +pkg_pooler_repo = https://github.com/seth/pooler +pkg_pooler_commit = master + +PACKAGES += pqueue +pkg_pqueue_name = pqueue +pkg_pqueue_description = Erlang Priority Queues +pkg_pqueue_homepage = https://github.com/okeuday/pqueue +pkg_pqueue_fetch = git +pkg_pqueue_repo = https://github.com/okeuday/pqueue +pkg_pqueue_commit = master + +PACKAGES += procket +pkg_procket_name = procket +pkg_procket_description = Erlang interface to low level socket operations +pkg_procket_homepage = http://blog.listincomprehension.com/search/label/procket +pkg_procket_fetch = git +pkg_procket_repo = https://github.com/msantos/procket +pkg_procket_commit = master + +PACKAGES += prop +pkg_prop_name = prop +pkg_prop_description = An Erlang code scaffolding and generator system. +pkg_prop_homepage = https://github.com/nuex/prop +pkg_prop_fetch = git +pkg_prop_repo = https://github.com/nuex/prop +pkg_prop_commit = master + +PACKAGES += proper +pkg_proper_name = proper +pkg_proper_description = PropEr: a QuickCheck-inspired property-based testing tool for Erlang. +pkg_proper_homepage = http://proper.softlab.ntua.gr +pkg_proper_fetch = git +pkg_proper_repo = https://github.com/manopapad/proper +pkg_proper_commit = master + +PACKAGES += props +pkg_props_name = props +pkg_props_description = Property structure library +pkg_props_homepage = https://github.com/greyarea/props +pkg_props_fetch = git +pkg_props_repo = https://github.com/greyarea/props +pkg_props_commit = master + +PACKAGES += protobuffs +pkg_protobuffs_name = protobuffs +pkg_protobuffs_description = An implementation of Google's Protocol Buffers for Erlang, based on ngerakines/erlang_protobuffs. +pkg_protobuffs_homepage = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_fetch = git +pkg_protobuffs_repo = https://github.com/basho/erlang_protobuffs +pkg_protobuffs_commit = master + +PACKAGES += psycho +pkg_psycho_name = psycho +pkg_psycho_description = HTTP server that provides a WSGI-like interface for applications and middleware. +pkg_psycho_homepage = https://github.com/gar1t/psycho +pkg_psycho_fetch = git +pkg_psycho_repo = https://github.com/gar1t/psycho +pkg_psycho_commit = master + +PACKAGES += purity +pkg_purity_name = purity +pkg_purity_description = A side-effect analyzer for Erlang +pkg_purity_homepage = https://github.com/mpitid/purity +pkg_purity_fetch = git +pkg_purity_repo = https://github.com/mpitid/purity +pkg_purity_commit = master + +PACKAGES += push_service +pkg_push_service_name = push_service +pkg_push_service_description = Push service +pkg_push_service_homepage = https://github.com/hairyhum/push_service +pkg_push_service_fetch = git +pkg_push_service_repo = https://github.com/hairyhum/push_service +pkg_push_service_commit = master + +PACKAGES += qdate +pkg_qdate_name = qdate +pkg_qdate_description = Date, time, and timezone parsing, formatting, and conversion for Erlang. +pkg_qdate_homepage = https://github.com/choptastic/qdate +pkg_qdate_fetch = git +pkg_qdate_repo = https://github.com/choptastic/qdate +pkg_qdate_commit = master + +PACKAGES += qrcode +pkg_qrcode_name = qrcode +pkg_qrcode_description = QR Code encoder in Erlang +pkg_qrcode_homepage = https://github.com/komone/qrcode +pkg_qrcode_fetch = git +pkg_qrcode_repo = https://github.com/komone/qrcode +pkg_qrcode_commit = master + +PACKAGES += quest +pkg_quest_name = quest +pkg_quest_description = Learn Erlang through this set of challenges. An interactive system for getting to know Erlang. +pkg_quest_homepage = https://github.com/eriksoe/ErlangQuest +pkg_quest_fetch = git +pkg_quest_repo = https://github.com/eriksoe/ErlangQuest +pkg_quest_commit = master + +PACKAGES += quickrand +pkg_quickrand_name = quickrand +pkg_quickrand_description = Quick Erlang Random Number Generation +pkg_quickrand_homepage = https://github.com/okeuday/quickrand +pkg_quickrand_fetch = git +pkg_quickrand_repo = https://github.com/okeuday/quickrand +pkg_quickrand_commit = master + +PACKAGES += rabbit +pkg_rabbit_name = rabbit +pkg_rabbit_description = RabbitMQ Server +pkg_rabbit_homepage = https://www.rabbitmq.com/ +pkg_rabbit_fetch = git +pkg_rabbit_repo = https://github.com/rabbitmq/rabbitmq-server.git +pkg_rabbit_commit = master + +PACKAGES += rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_name = rabbit_exchange_type_riak +pkg_rabbit_exchange_type_riak_description = Custom RabbitMQ exchange type for sticking messages in Riak +pkg_rabbit_exchange_type_riak_homepage = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_fetch = git +pkg_rabbit_exchange_type_riak_repo = https://github.com/jbrisbin/riak-exchange +pkg_rabbit_exchange_type_riak_commit = master + +PACKAGES += rack +pkg_rack_name = rack +pkg_rack_description = Rack handler for erlang +pkg_rack_homepage = https://github.com/erlyvideo/rack +pkg_rack_fetch = git +pkg_rack_repo = https://github.com/erlyvideo/rack +pkg_rack_commit = master + +PACKAGES += radierl +pkg_radierl_name = radierl +pkg_radierl_description = RADIUS protocol stack implemented in Erlang. +pkg_radierl_homepage = https://github.com/vances/radierl +pkg_radierl_fetch = git +pkg_radierl_repo = https://github.com/vances/radierl +pkg_radierl_commit = master + +PACKAGES += rafter +pkg_rafter_name = rafter +pkg_rafter_description = An Erlang library application which implements the Raft consensus protocol +pkg_rafter_homepage = https://github.com/andrewjstone/rafter +pkg_rafter_fetch = git +pkg_rafter_repo = https://github.com/andrewjstone/rafter +pkg_rafter_commit = master + +PACKAGES += ranch +pkg_ranch_name = ranch +pkg_ranch_description = Socket acceptor pool for TCP protocols. +pkg_ranch_homepage = http://ninenines.eu +pkg_ranch_fetch = git +pkg_ranch_repo = https://github.com/ninenines/ranch +pkg_ranch_commit = 1.2.1 + +PACKAGES += rbeacon +pkg_rbeacon_name = rbeacon +pkg_rbeacon_description = LAN discovery and presence in Erlang. +pkg_rbeacon_homepage = https://github.com/refuge/rbeacon +pkg_rbeacon_fetch = git +pkg_rbeacon_repo = https://github.com/refuge/rbeacon +pkg_rbeacon_commit = master + +PACKAGES += rebar +pkg_rebar_name = rebar +pkg_rebar_description = Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. +pkg_rebar_homepage = http://www.rebar3.org +pkg_rebar_fetch = git +pkg_rebar_repo = https://github.com/rebar/rebar3 +pkg_rebar_commit = master + +PACKAGES += rebus +pkg_rebus_name = rebus +pkg_rebus_description = A stupid simple, internal, pub/sub event bus written in- and for Erlang. +pkg_rebus_homepage = https://github.com/olle/rebus +pkg_rebus_fetch = git +pkg_rebus_repo = https://github.com/olle/rebus +pkg_rebus_commit = master + +PACKAGES += rec2json +pkg_rec2json_name = rec2json +pkg_rec2json_description = Compile erlang record definitions into modules to convert them to/from json easily. +pkg_rec2json_homepage = https://github.com/lordnull/rec2json +pkg_rec2json_fetch = git +pkg_rec2json_repo = https://github.com/lordnull/rec2json +pkg_rec2json_commit = master + +PACKAGES += recon +pkg_recon_name = recon +pkg_recon_description = Collection of functions and scripts to debug Erlang in production. +pkg_recon_homepage = https://github.com/ferd/recon +pkg_recon_fetch = git +pkg_recon_repo = https://github.com/ferd/recon +pkg_recon_commit = master + +PACKAGES += record_info +pkg_record_info_name = record_info +pkg_record_info_description = Convert between record and proplist +pkg_record_info_homepage = https://github.com/bipthelin/erlang-record_info +pkg_record_info_fetch = git +pkg_record_info_repo = https://github.com/bipthelin/erlang-record_info +pkg_record_info_commit = master + +PACKAGES += redgrid +pkg_redgrid_name = redgrid +pkg_redgrid_description = automatic Erlang node discovery via redis +pkg_redgrid_homepage = https://github.com/jkvor/redgrid +pkg_redgrid_fetch = git +pkg_redgrid_repo = https://github.com/jkvor/redgrid +pkg_redgrid_commit = master + +PACKAGES += redo +pkg_redo_name = redo +pkg_redo_description = pipelined erlang redis client +pkg_redo_homepage = https://github.com/jkvor/redo +pkg_redo_fetch = git +pkg_redo_repo = https://github.com/jkvor/redo +pkg_redo_commit = master + +PACKAGES += reload_mk +pkg_reload_mk_name = reload_mk +pkg_reload_mk_description = Live reload plugin for erlang.mk. +pkg_reload_mk_homepage = https://github.com/bullno1/reload.mk +pkg_reload_mk_fetch = git +pkg_reload_mk_repo = https://github.com/bullno1/reload.mk +pkg_reload_mk_commit = master + +PACKAGES += reltool_util +pkg_reltool_util_name = reltool_util +pkg_reltool_util_description = Erlang reltool utility functionality application +pkg_reltool_util_homepage = https://github.com/okeuday/reltool_util +pkg_reltool_util_fetch = git +pkg_reltool_util_repo = https://github.com/okeuday/reltool_util +pkg_reltool_util_commit = master + +PACKAGES += relx +pkg_relx_name = relx +pkg_relx_description = Sane, simple release creation for Erlang +pkg_relx_homepage = https://github.com/erlware/relx +pkg_relx_fetch = git +pkg_relx_repo = https://github.com/erlware/relx +pkg_relx_commit = master + +PACKAGES += resource_discovery +pkg_resource_discovery_name = resource_discovery +pkg_resource_discovery_description = An application used to dynamically discover resources present in an Erlang node cluster. +pkg_resource_discovery_homepage = http://erlware.org/ +pkg_resource_discovery_fetch = git +pkg_resource_discovery_repo = https://github.com/erlware/resource_discovery +pkg_resource_discovery_commit = master + +PACKAGES += restc +pkg_restc_name = restc +pkg_restc_description = Erlang Rest Client +pkg_restc_homepage = https://github.com/kivra/restclient +pkg_restc_fetch = git +pkg_restc_repo = https://github.com/kivra/restclient +pkg_restc_commit = master + +PACKAGES += rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_name = rfc4627_jsonrpc +pkg_rfc4627_jsonrpc_description = Erlang RFC4627 (JSON) codec and JSON-RPC server implementation. +pkg_rfc4627_jsonrpc_homepage = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_fetch = git +pkg_rfc4627_jsonrpc_repo = https://github.com/tonyg/erlang-rfc4627 +pkg_rfc4627_jsonrpc_commit = master + +PACKAGES += riak_control +pkg_riak_control_name = riak_control +pkg_riak_control_description = Webmachine-based administration interface for Riak. +pkg_riak_control_homepage = https://github.com/basho/riak_control +pkg_riak_control_fetch = git +pkg_riak_control_repo = https://github.com/basho/riak_control +pkg_riak_control_commit = master + +PACKAGES += riak_core +pkg_riak_core_name = riak_core +pkg_riak_core_description = Distributed systems infrastructure used by Riak. +pkg_riak_core_homepage = https://github.com/basho/riak_core +pkg_riak_core_fetch = git +pkg_riak_core_repo = https://github.com/basho/riak_core +pkg_riak_core_commit = master + +PACKAGES += riak_dt +pkg_riak_dt_name = riak_dt +pkg_riak_dt_description = Convergent replicated datatypes in Erlang +pkg_riak_dt_homepage = https://github.com/basho/riak_dt +pkg_riak_dt_fetch = git +pkg_riak_dt_repo = https://github.com/basho/riak_dt +pkg_riak_dt_commit = master + +PACKAGES += riak_ensemble +pkg_riak_ensemble_name = riak_ensemble +pkg_riak_ensemble_description = Multi-Paxos framework in Erlang +pkg_riak_ensemble_homepage = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_fetch = git +pkg_riak_ensemble_repo = https://github.com/basho/riak_ensemble +pkg_riak_ensemble_commit = master + +PACKAGES += riak_kv +pkg_riak_kv_name = riak_kv +pkg_riak_kv_description = Riak Key/Value Store +pkg_riak_kv_homepage = https://github.com/basho/riak_kv +pkg_riak_kv_fetch = git +pkg_riak_kv_repo = https://github.com/basho/riak_kv +pkg_riak_kv_commit = master + +PACKAGES += riak_pg +pkg_riak_pg_name = riak_pg +pkg_riak_pg_description = Distributed process groups with riak_core. +pkg_riak_pg_homepage = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_fetch = git +pkg_riak_pg_repo = https://github.com/cmeiklejohn/riak_pg +pkg_riak_pg_commit = master + +PACKAGES += riak_pipe +pkg_riak_pipe_name = riak_pipe +pkg_riak_pipe_description = Riak Pipelines +pkg_riak_pipe_homepage = https://github.com/basho/riak_pipe +pkg_riak_pipe_fetch = git +pkg_riak_pipe_repo = https://github.com/basho/riak_pipe +pkg_riak_pipe_commit = master + +PACKAGES += riak_sysmon +pkg_riak_sysmon_name = riak_sysmon +pkg_riak_sysmon_description = Simple OTP app for managing Erlang VM system_monitor event messages +pkg_riak_sysmon_homepage = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_fetch = git +pkg_riak_sysmon_repo = https://github.com/basho/riak_sysmon +pkg_riak_sysmon_commit = master + +PACKAGES += riak_test +pkg_riak_test_name = riak_test +pkg_riak_test_description = I'm in your cluster, testing your riaks +pkg_riak_test_homepage = https://github.com/basho/riak_test +pkg_riak_test_fetch = git +pkg_riak_test_repo = https://github.com/basho/riak_test +pkg_riak_test_commit = master + +PACKAGES += riakc +pkg_riakc_name = riakc +pkg_riakc_description = Erlang clients for Riak. +pkg_riakc_homepage = https://github.com/basho/riak-erlang-client +pkg_riakc_fetch = git +pkg_riakc_repo = https://github.com/basho/riak-erlang-client +pkg_riakc_commit = master + +PACKAGES += riakhttpc +pkg_riakhttpc_name = riakhttpc +pkg_riakhttpc_description = Riak Erlang client using the HTTP interface +pkg_riakhttpc_homepage = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_fetch = git +pkg_riakhttpc_repo = https://github.com/basho/riak-erlang-http-client +pkg_riakhttpc_commit = master + +PACKAGES += riaknostic +pkg_riaknostic_name = riaknostic +pkg_riaknostic_description = A diagnostic tool for Riak installations, to find common errors asap +pkg_riaknostic_homepage = https://github.com/basho/riaknostic +pkg_riaknostic_fetch = git +pkg_riaknostic_repo = https://github.com/basho/riaknostic +pkg_riaknostic_commit = master + +PACKAGES += riakpool +pkg_riakpool_name = riakpool +pkg_riakpool_description = erlang riak client pool +pkg_riakpool_homepage = https://github.com/dweldon/riakpool +pkg_riakpool_fetch = git +pkg_riakpool_repo = https://github.com/dweldon/riakpool +pkg_riakpool_commit = master + +PACKAGES += rivus_cep +pkg_rivus_cep_name = rivus_cep +pkg_rivus_cep_description = Complex event processing in Erlang +pkg_rivus_cep_homepage = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_fetch = git +pkg_rivus_cep_repo = https://github.com/vascokk/rivus_cep +pkg_rivus_cep_commit = master + +PACKAGES += rlimit +pkg_rlimit_name = rlimit +pkg_rlimit_description = Magnus Klaar's rate limiter code from etorrent +pkg_rlimit_homepage = https://github.com/jlouis/rlimit +pkg_rlimit_fetch = git +pkg_rlimit_repo = https://github.com/jlouis/rlimit +pkg_rlimit_commit = master + +PACKAGES += rust_mk +pkg_rust_mk_name = rust_mk +pkg_rust_mk_description = Build Rust crates in an Erlang application +pkg_rust_mk_homepage = https://github.com/goertzenator/rust.mk +pkg_rust_mk_fetch = git +pkg_rust_mk_repo = https://github.com/goertzenator/rust.mk +pkg_rust_mk_commit = master + +PACKAGES += safetyvalve +pkg_safetyvalve_name = safetyvalve +pkg_safetyvalve_description = A safety valve for your erlang node +pkg_safetyvalve_homepage = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_fetch = git +pkg_safetyvalve_repo = https://github.com/jlouis/safetyvalve +pkg_safetyvalve_commit = master + +PACKAGES += seestar +pkg_seestar_name = seestar +pkg_seestar_description = The Erlang client for Cassandra 1.2+ binary protocol +pkg_seestar_homepage = https://github.com/iamaleksey/seestar +pkg_seestar_fetch = git +pkg_seestar_repo = https://github.com/iamaleksey/seestar +pkg_seestar_commit = master + +PACKAGES += service +pkg_service_name = service +pkg_service_description = A minimal Erlang behavior for creating CloudI internal services +pkg_service_homepage = http://cloudi.org/ +pkg_service_fetch = git +pkg_service_repo = https://github.com/CloudI/service +pkg_service_commit = master + +PACKAGES += setup +pkg_setup_name = setup +pkg_setup_description = Generic setup utility for Erlang-based systems +pkg_setup_homepage = https://github.com/uwiger/setup +pkg_setup_fetch = git +pkg_setup_repo = https://github.com/uwiger/setup +pkg_setup_commit = master + +PACKAGES += sext +pkg_sext_name = sext +pkg_sext_description = Sortable Erlang Term Serialization +pkg_sext_homepage = https://github.com/uwiger/sext +pkg_sext_fetch = git +pkg_sext_repo = https://github.com/uwiger/sext +pkg_sext_commit = master + +PACKAGES += sfmt +pkg_sfmt_name = sfmt +pkg_sfmt_description = SFMT pseudo random number generator for Erlang. +pkg_sfmt_homepage = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_fetch = git +pkg_sfmt_repo = https://github.com/jj1bdx/sfmt-erlang +pkg_sfmt_commit = master + +PACKAGES += sgte +pkg_sgte_name = sgte +pkg_sgte_description = A simple Erlang Template Engine +pkg_sgte_homepage = https://github.com/filippo/sgte +pkg_sgte_fetch = git +pkg_sgte_repo = https://github.com/filippo/sgte +pkg_sgte_commit = master + +PACKAGES += sheriff +pkg_sheriff_name = sheriff +pkg_sheriff_description = Parse transform for type based validation. +pkg_sheriff_homepage = http://ninenines.eu +pkg_sheriff_fetch = git +pkg_sheriff_repo = https://github.com/extend/sheriff +pkg_sheriff_commit = master + +PACKAGES += shotgun +pkg_shotgun_name = shotgun +pkg_shotgun_description = better than just a gun +pkg_shotgun_homepage = https://github.com/inaka/shotgun +pkg_shotgun_fetch = git +pkg_shotgun_repo = https://github.com/inaka/shotgun +pkg_shotgun_commit = master + +PACKAGES += sidejob +pkg_sidejob_name = sidejob +pkg_sidejob_description = Parallel worker and capacity limiting library for Erlang +pkg_sidejob_homepage = https://github.com/basho/sidejob +pkg_sidejob_fetch = git +pkg_sidejob_repo = https://github.com/basho/sidejob +pkg_sidejob_commit = master + +PACKAGES += sieve +pkg_sieve_name = sieve +pkg_sieve_description = sieve is a simple TCP routing proxy (layer 7) in erlang +pkg_sieve_homepage = https://github.com/benoitc/sieve +pkg_sieve_fetch = git +pkg_sieve_repo = https://github.com/benoitc/sieve +pkg_sieve_commit = master + +PACKAGES += sighandler +pkg_sighandler_name = sighandler +pkg_sighandler_description = Handle UNIX signals in Er lang +pkg_sighandler_homepage = https://github.com/jkingsbery/sighandler +pkg_sighandler_fetch = git +pkg_sighandler_repo = https://github.com/jkingsbery/sighandler +pkg_sighandler_commit = master + +PACKAGES += simhash +pkg_simhash_name = simhash +pkg_simhash_description = Simhashing for Erlang -- hashing algorithm to find near-duplicates in binary data. +pkg_simhash_homepage = https://github.com/ferd/simhash +pkg_simhash_fetch = git +pkg_simhash_repo = https://github.com/ferd/simhash +pkg_simhash_commit = master + +PACKAGES += simple_bridge +pkg_simple_bridge_name = simple_bridge +pkg_simple_bridge_description = A simple, standardized interface library to Erlang HTTP Servers. +pkg_simple_bridge_homepage = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_fetch = git +pkg_simple_bridge_repo = https://github.com/nitrogen/simple_bridge +pkg_simple_bridge_commit = master + +PACKAGES += simple_oauth2 +pkg_simple_oauth2_name = simple_oauth2 +pkg_simple_oauth2_description = Simple erlang OAuth2 client module for any http server framework (Google, Facebook, Yandex, Vkontakte are preconfigured) +pkg_simple_oauth2_homepage = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_fetch = git +pkg_simple_oauth2_repo = https://github.com/virtan/simple_oauth2 +pkg_simple_oauth2_commit = master + +PACKAGES += skel +pkg_skel_name = skel +pkg_skel_description = A Streaming Process-based Skeleton Library for Erlang +pkg_skel_homepage = https://github.com/ParaPhrase/skel +pkg_skel_fetch = git +pkg_skel_repo = https://github.com/ParaPhrase/skel +pkg_skel_commit = master + +PACKAGES += slack +pkg_slack_name = slack +pkg_slack_description = Minimal slack notification OTP library. +pkg_slack_homepage = https://github.com/DonBranson/slack +pkg_slack_fetch = git +pkg_slack_repo = https://github.com/DonBranson/slack.git +pkg_slack_commit = master + +PACKAGES += smother +pkg_smother_name = smother +pkg_smother_description = Extended code coverage metrics for Erlang. +pkg_smother_homepage = https://ramsay-t.github.io/Smother/ +pkg_smother_fetch = git +pkg_smother_repo = https://github.com/ramsay-t/Smother +pkg_smother_commit = master + +PACKAGES += snappyer +pkg_snappyer_name = snappyer +pkg_snappyer_description = Snappy as nif for Erlang +pkg_snappyer_homepage = https://github.com/zmstone/snappyer +pkg_snappyer_fetch = git +pkg_snappyer_repo = https://github.com/zmstone/snappyer.git +pkg_snappyer_commit = master + +PACKAGES += social +pkg_social_name = social +pkg_social_description = Cowboy handler for social login via OAuth2 providers +pkg_social_homepage = https://github.com/dvv/social +pkg_social_fetch = git +pkg_social_repo = https://github.com/dvv/social +pkg_social_commit = master + +PACKAGES += spapi_router +pkg_spapi_router_name = spapi_router +pkg_spapi_router_description = Partially-connected Erlang clustering +pkg_spapi_router_homepage = https://github.com/spilgames/spapi-router +pkg_spapi_router_fetch = git +pkg_spapi_router_repo = https://github.com/spilgames/spapi-router +pkg_spapi_router_commit = master + +PACKAGES += sqerl +pkg_sqerl_name = sqerl +pkg_sqerl_description = An Erlang-flavoured SQL DSL +pkg_sqerl_homepage = https://github.com/hairyhum/sqerl +pkg_sqerl_fetch = git +pkg_sqerl_repo = https://github.com/hairyhum/sqerl +pkg_sqerl_commit = master + +PACKAGES += srly +pkg_srly_name = srly +pkg_srly_description = Native Erlang Unix serial interface +pkg_srly_homepage = https://github.com/msantos/srly +pkg_srly_fetch = git +pkg_srly_repo = https://github.com/msantos/srly +pkg_srly_commit = master + +PACKAGES += sshrpc +pkg_sshrpc_name = sshrpc +pkg_sshrpc_description = Erlang SSH RPC module (experimental) +pkg_sshrpc_homepage = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_fetch = git +pkg_sshrpc_repo = https://github.com/jj1bdx/sshrpc +pkg_sshrpc_commit = master + +PACKAGES += stable +pkg_stable_name = stable +pkg_stable_description = Library of assorted helpers for Cowboy web server. +pkg_stable_homepage = https://github.com/dvv/stable +pkg_stable_fetch = git +pkg_stable_repo = https://github.com/dvv/stable +pkg_stable_commit = master + +PACKAGES += statebox +pkg_statebox_name = statebox +pkg_statebox_description = Erlang state monad with merge/conflict-resolution capabilities. Useful for Riak. +pkg_statebox_homepage = https://github.com/mochi/statebox +pkg_statebox_fetch = git +pkg_statebox_repo = https://github.com/mochi/statebox +pkg_statebox_commit = master + +PACKAGES += statebox_riak +pkg_statebox_riak_name = statebox_riak +pkg_statebox_riak_description = Convenience library that makes it easier to use statebox with riak, extracted from best practices in our production code at Mochi Media. +pkg_statebox_riak_homepage = https://github.com/mochi/statebox_riak +pkg_statebox_riak_fetch = git +pkg_statebox_riak_repo = https://github.com/mochi/statebox_riak +pkg_statebox_riak_commit = master + +PACKAGES += statman +pkg_statman_name = statman +pkg_statman_description = Efficiently collect massive volumes of metrics inside the Erlang VM +pkg_statman_homepage = https://github.com/knutin/statman +pkg_statman_fetch = git +pkg_statman_repo = https://github.com/knutin/statman +pkg_statman_commit = master + +PACKAGES += statsderl +pkg_statsderl_name = statsderl +pkg_statsderl_description = StatsD client (erlang) +pkg_statsderl_homepage = https://github.com/lpgauth/statsderl +pkg_statsderl_fetch = git +pkg_statsderl_repo = https://github.com/lpgauth/statsderl +pkg_statsderl_commit = master + +PACKAGES += stdinout_pool +pkg_stdinout_pool_name = stdinout_pool +pkg_stdinout_pool_description = stdinout_pool : stuff goes in, stuff goes out. there's never any miscommunication. +pkg_stdinout_pool_homepage = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_fetch = git +pkg_stdinout_pool_repo = https://github.com/mattsta/erlang-stdinout-pool +pkg_stdinout_pool_commit = master + +PACKAGES += stockdb +pkg_stockdb_name = stockdb +pkg_stockdb_description = Database for storing Stock Exchange quotes in erlang +pkg_stockdb_homepage = https://github.com/maxlapshin/stockdb +pkg_stockdb_fetch = git +pkg_stockdb_repo = https://github.com/maxlapshin/stockdb +pkg_stockdb_commit = master + +PACKAGES += stripe +pkg_stripe_name = stripe +pkg_stripe_description = Erlang interface to the stripe.com API +pkg_stripe_homepage = https://github.com/mattsta/stripe-erlang +pkg_stripe_fetch = git +pkg_stripe_repo = https://github.com/mattsta/stripe-erlang +pkg_stripe_commit = v1 + +PACKAGES += subproc +pkg_subproc_name = subproc +pkg_subproc_description = unix subprocess manager with {active,once|false} modes +pkg_subproc_homepage = http://dozzie.jarowit.net/trac/wiki/subproc +pkg_subproc_fetch = git +pkg_subproc_repo = https://github.com/dozzie/subproc +pkg_subproc_commit = v0.1.0 + +PACKAGES += supervisor3 +pkg_supervisor3_name = supervisor3 +pkg_supervisor3_description = OTP supervisor with additional strategies +pkg_supervisor3_homepage = https://github.com/klarna/supervisor3 +pkg_supervisor3_fetch = git +pkg_supervisor3_repo = https://github.com/klarna/supervisor3.git +pkg_supervisor3_commit = master + +PACKAGES += surrogate +pkg_surrogate_name = surrogate +pkg_surrogate_description = Proxy server written in erlang. Supports reverse proxy load balancing and forward proxy with http (including CONNECT), socks4, socks5, and transparent proxy modes. +pkg_surrogate_homepage = https://github.com/skruger/Surrogate +pkg_surrogate_fetch = git +pkg_surrogate_repo = https://github.com/skruger/Surrogate +pkg_surrogate_commit = master + +PACKAGES += swab +pkg_swab_name = swab +pkg_swab_description = General purpose buffer handling module +pkg_swab_homepage = https://github.com/crownedgrouse/swab +pkg_swab_fetch = git +pkg_swab_repo = https://github.com/crownedgrouse/swab +pkg_swab_commit = master + +PACKAGES += swarm +pkg_swarm_name = swarm +pkg_swarm_description = Fast and simple acceptor pool for Erlang +pkg_swarm_homepage = https://github.com/jeremey/swarm +pkg_swarm_fetch = git +pkg_swarm_repo = https://github.com/jeremey/swarm +pkg_swarm_commit = master + +PACKAGES += switchboard +pkg_switchboard_name = switchboard +pkg_switchboard_description = A framework for processing email using worker plugins. +pkg_switchboard_homepage = https://github.com/thusfresh/switchboard +pkg_switchboard_fetch = git +pkg_switchboard_repo = https://github.com/thusfresh/switchboard +pkg_switchboard_commit = master + +PACKAGES += syn +pkg_syn_name = syn +pkg_syn_description = A global Process Registry and Process Group manager for Erlang. +pkg_syn_homepage = https://github.com/ostinelli/syn +pkg_syn_fetch = git +pkg_syn_repo = https://github.com/ostinelli/syn +pkg_syn_commit = master + +PACKAGES += sync +pkg_sync_name = sync +pkg_sync_description = On-the-fly recompiling and reloading in Erlang. +pkg_sync_homepage = https://github.com/rustyio/sync +pkg_sync_fetch = git +pkg_sync_repo = https://github.com/rustyio/sync +pkg_sync_commit = master + +PACKAGES += syntaxerl +pkg_syntaxerl_name = syntaxerl +pkg_syntaxerl_description = Syntax checker for Erlang +pkg_syntaxerl_homepage = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_fetch = git +pkg_syntaxerl_repo = https://github.com/ten0s/syntaxerl +pkg_syntaxerl_commit = master + +PACKAGES += syslog +pkg_syslog_name = syslog +pkg_syslog_description = Erlang port driver for interacting with syslog via syslog(3) +pkg_syslog_homepage = https://github.com/Vagabond/erlang-syslog +pkg_syslog_fetch = git +pkg_syslog_repo = https://github.com/Vagabond/erlang-syslog +pkg_syslog_commit = master + +PACKAGES += taskforce +pkg_taskforce_name = taskforce +pkg_taskforce_description = Erlang worker pools for controlled parallelisation of arbitrary tasks. +pkg_taskforce_homepage = https://github.com/g-andrade/taskforce +pkg_taskforce_fetch = git +pkg_taskforce_repo = https://github.com/g-andrade/taskforce +pkg_taskforce_commit = master + +PACKAGES += tddreloader +pkg_tddreloader_name = tddreloader +pkg_tddreloader_description = Shell utility for recompiling, reloading, and testing code as it changes +pkg_tddreloader_homepage = https://github.com/version2beta/tddreloader +pkg_tddreloader_fetch = git +pkg_tddreloader_repo = https://github.com/version2beta/tddreloader +pkg_tddreloader_commit = master + +PACKAGES += tempo +pkg_tempo_name = tempo +pkg_tempo_description = NIF-based date and time parsing and formatting for Erlang. +pkg_tempo_homepage = https://github.com/selectel/tempo +pkg_tempo_fetch = git +pkg_tempo_repo = https://github.com/selectel/tempo +pkg_tempo_commit = master + +PACKAGES += ticktick +pkg_ticktick_name = ticktick +pkg_ticktick_description = Ticktick is an id generator for message service. +pkg_ticktick_homepage = https://github.com/ericliang/ticktick +pkg_ticktick_fetch = git +pkg_ticktick_repo = https://github.com/ericliang/ticktick +pkg_ticktick_commit = master + +PACKAGES += tinymq +pkg_tinymq_name = tinymq +pkg_tinymq_description = TinyMQ - a diminutive, in-memory message queue +pkg_tinymq_homepage = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_fetch = git +pkg_tinymq_repo = https://github.com/ChicagoBoss/tinymq +pkg_tinymq_commit = master + +PACKAGES += tinymt +pkg_tinymt_name = tinymt +pkg_tinymt_description = TinyMT pseudo random number generator for Erlang. +pkg_tinymt_homepage = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_fetch = git +pkg_tinymt_repo = https://github.com/jj1bdx/tinymt-erlang +pkg_tinymt_commit = master + +PACKAGES += tirerl +pkg_tirerl_name = tirerl +pkg_tirerl_description = Erlang interface to Elastic Search +pkg_tirerl_homepage = https://github.com/inaka/tirerl +pkg_tirerl_fetch = git +pkg_tirerl_repo = https://github.com/inaka/tirerl +pkg_tirerl_commit = master + +PACKAGES += toml +pkg_toml_name = toml +pkg_toml_description = TOML (0.4.0) config parser +pkg_toml_homepage = http://dozzie.jarowit.net/trac/wiki/TOML +pkg_toml_fetch = git +pkg_toml_repo = https://github.com/dozzie/toml +pkg_toml_commit = v0.2.0 + +PACKAGES += traffic_tools +pkg_traffic_tools_name = traffic_tools +pkg_traffic_tools_description = Simple traffic limiting library +pkg_traffic_tools_homepage = https://github.com/systra/traffic_tools +pkg_traffic_tools_fetch = git +pkg_traffic_tools_repo = https://github.com/systra/traffic_tools +pkg_traffic_tools_commit = master + +PACKAGES += trails +pkg_trails_name = trails +pkg_trails_description = A couple of improvements over Cowboy Routes +pkg_trails_homepage = http://inaka.github.io/cowboy-trails/ +pkg_trails_fetch = git +pkg_trails_repo = https://github.com/inaka/cowboy-trails +pkg_trails_commit = master + +PACKAGES += trane +pkg_trane_name = trane +pkg_trane_description = SAX style broken HTML parser in Erlang +pkg_trane_homepage = https://github.com/massemanet/trane +pkg_trane_fetch = git +pkg_trane_repo = https://github.com/massemanet/trane +pkg_trane_commit = master + +PACKAGES += transit +pkg_transit_name = transit +pkg_transit_description = transit format for erlang +pkg_transit_homepage = https://github.com/isaiah/transit-erlang +pkg_transit_fetch = git +pkg_transit_repo = https://github.com/isaiah/transit-erlang +pkg_transit_commit = master + +PACKAGES += trie +pkg_trie_name = trie +pkg_trie_description = Erlang Trie Implementation +pkg_trie_homepage = https://github.com/okeuday/trie +pkg_trie_fetch = git +pkg_trie_repo = https://github.com/okeuday/trie +pkg_trie_commit = master + +PACKAGES += triq +pkg_triq_name = triq +pkg_triq_description = Trifork QuickCheck +pkg_triq_homepage = https://triq.gitlab.io +pkg_triq_fetch = git +pkg_triq_repo = https://gitlab.com/triq/triq.git +pkg_triq_commit = master + +PACKAGES += tunctl +pkg_tunctl_name = tunctl +pkg_tunctl_description = Erlang TUN/TAP interface +pkg_tunctl_homepage = https://github.com/msantos/tunctl +pkg_tunctl_fetch = git +pkg_tunctl_repo = https://github.com/msantos/tunctl +pkg_tunctl_commit = master + +PACKAGES += twerl +pkg_twerl_name = twerl +pkg_twerl_description = Erlang client for the Twitter Streaming API +pkg_twerl_homepage = https://github.com/lucaspiller/twerl +pkg_twerl_fetch = git +pkg_twerl_repo = https://github.com/lucaspiller/twerl +pkg_twerl_commit = oauth + +PACKAGES += twitter_erlang +pkg_twitter_erlang_name = twitter_erlang +pkg_twitter_erlang_description = An Erlang twitter client +pkg_twitter_erlang_homepage = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_fetch = git +pkg_twitter_erlang_repo = https://github.com/ngerakines/erlang_twitter +pkg_twitter_erlang_commit = master + +PACKAGES += ucol_nif +pkg_ucol_nif_name = ucol_nif +pkg_ucol_nif_description = ICU based collation Erlang module +pkg_ucol_nif_homepage = https://github.com/refuge/ucol_nif +pkg_ucol_nif_fetch = git +pkg_ucol_nif_repo = https://github.com/refuge/ucol_nif +pkg_ucol_nif_commit = master + +PACKAGES += unicorn +pkg_unicorn_name = unicorn +pkg_unicorn_description = Generic configuration server +pkg_unicorn_homepage = https://github.com/shizzard/unicorn +pkg_unicorn_fetch = git +pkg_unicorn_repo = https://github.com/shizzard/unicorn +pkg_unicorn_commit = master + +PACKAGES += unsplit +pkg_unsplit_name = unsplit +pkg_unsplit_description = Resolves conflicts in Mnesia after network splits +pkg_unsplit_homepage = https://github.com/uwiger/unsplit +pkg_unsplit_fetch = git +pkg_unsplit_repo = https://github.com/uwiger/unsplit +pkg_unsplit_commit = master + +PACKAGES += uuid +pkg_uuid_name = uuid +pkg_uuid_description = Erlang UUID Implementation +pkg_uuid_homepage = https://github.com/okeuday/uuid +pkg_uuid_fetch = git +pkg_uuid_repo = https://github.com/okeuday/uuid +pkg_uuid_commit = master + +PACKAGES += ux +pkg_ux_name = ux +pkg_ux_description = Unicode eXtention for Erlang (Strings, Collation) +pkg_ux_homepage = https://github.com/erlang-unicode/ux +pkg_ux_fetch = git +pkg_ux_repo = https://github.com/erlang-unicode/ux +pkg_ux_commit = master + +PACKAGES += vert +pkg_vert_name = vert +pkg_vert_description = Erlang binding to libvirt virtualization API +pkg_vert_homepage = https://github.com/msantos/erlang-libvirt +pkg_vert_fetch = git +pkg_vert_repo = https://github.com/msantos/erlang-libvirt +pkg_vert_commit = master + +PACKAGES += verx +pkg_verx_name = verx +pkg_verx_description = Erlang implementation of the libvirtd remote protocol +pkg_verx_homepage = https://github.com/msantos/verx +pkg_verx_fetch = git +pkg_verx_repo = https://github.com/msantos/verx +pkg_verx_commit = master + +PACKAGES += vmq_acl +pkg_vmq_acl_name = vmq_acl +pkg_vmq_acl_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_acl_homepage = https://verne.mq/ +pkg_vmq_acl_fetch = git +pkg_vmq_acl_repo = https://github.com/erlio/vmq_acl +pkg_vmq_acl_commit = master + +PACKAGES += vmq_bridge +pkg_vmq_bridge_name = vmq_bridge +pkg_vmq_bridge_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_bridge_homepage = https://verne.mq/ +pkg_vmq_bridge_fetch = git +pkg_vmq_bridge_repo = https://github.com/erlio/vmq_bridge +pkg_vmq_bridge_commit = master + +PACKAGES += vmq_graphite +pkg_vmq_graphite_name = vmq_graphite +pkg_vmq_graphite_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_graphite_homepage = https://verne.mq/ +pkg_vmq_graphite_fetch = git +pkg_vmq_graphite_repo = https://github.com/erlio/vmq_graphite +pkg_vmq_graphite_commit = master + +PACKAGES += vmq_passwd +pkg_vmq_passwd_name = vmq_passwd +pkg_vmq_passwd_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_passwd_homepage = https://verne.mq/ +pkg_vmq_passwd_fetch = git +pkg_vmq_passwd_repo = https://github.com/erlio/vmq_passwd +pkg_vmq_passwd_commit = master + +PACKAGES += vmq_server +pkg_vmq_server_name = vmq_server +pkg_vmq_server_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_server_homepage = https://verne.mq/ +pkg_vmq_server_fetch = git +pkg_vmq_server_repo = https://github.com/erlio/vmq_server +pkg_vmq_server_commit = master + +PACKAGES += vmq_snmp +pkg_vmq_snmp_name = vmq_snmp +pkg_vmq_snmp_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_snmp_homepage = https://verne.mq/ +pkg_vmq_snmp_fetch = git +pkg_vmq_snmp_repo = https://github.com/erlio/vmq_snmp +pkg_vmq_snmp_commit = master + +PACKAGES += vmq_systree +pkg_vmq_systree_name = vmq_systree +pkg_vmq_systree_description = Component of VerneMQ: A distributed MQTT message broker +pkg_vmq_systree_homepage = https://verne.mq/ +pkg_vmq_systree_fetch = git +pkg_vmq_systree_repo = https://github.com/erlio/vmq_systree +pkg_vmq_systree_commit = master + +PACKAGES += vmstats +pkg_vmstats_name = vmstats +pkg_vmstats_description = tiny Erlang app that works in conjunction with statsderl in order to generate information on the Erlang VM for graphite logs. +pkg_vmstats_homepage = https://github.com/ferd/vmstats +pkg_vmstats_fetch = git +pkg_vmstats_repo = https://github.com/ferd/vmstats +pkg_vmstats_commit = master + +PACKAGES += walrus +pkg_walrus_name = walrus +pkg_walrus_description = Walrus - Mustache-like Templating +pkg_walrus_homepage = https://github.com/devinus/walrus +pkg_walrus_fetch = git +pkg_walrus_repo = https://github.com/devinus/walrus +pkg_walrus_commit = master + +PACKAGES += webmachine +pkg_webmachine_name = webmachine +pkg_webmachine_description = A REST-based system for building web applications. +pkg_webmachine_homepage = https://github.com/basho/webmachine +pkg_webmachine_fetch = git +pkg_webmachine_repo = https://github.com/basho/webmachine +pkg_webmachine_commit = master + +PACKAGES += websocket_client +pkg_websocket_client_name = websocket_client +pkg_websocket_client_description = Erlang websocket client (ws and wss supported) +pkg_websocket_client_homepage = https://github.com/jeremyong/websocket_client +pkg_websocket_client_fetch = git +pkg_websocket_client_repo = https://github.com/jeremyong/websocket_client +pkg_websocket_client_commit = master + +PACKAGES += worker_pool +pkg_worker_pool_name = worker_pool +pkg_worker_pool_description = a simple erlang worker pool +pkg_worker_pool_homepage = https://github.com/inaka/worker_pool +pkg_worker_pool_fetch = git +pkg_worker_pool_repo = https://github.com/inaka/worker_pool +pkg_worker_pool_commit = master + +PACKAGES += wrangler +pkg_wrangler_name = wrangler +pkg_wrangler_description = Import of the Wrangler svn repository. +pkg_wrangler_homepage = http://www.cs.kent.ac.uk/projects/wrangler/Home.html +pkg_wrangler_fetch = git +pkg_wrangler_repo = https://github.com/RefactoringTools/wrangler +pkg_wrangler_commit = master + +PACKAGES += wsock +pkg_wsock_name = wsock +pkg_wsock_description = Erlang library to build WebSocket clients and servers +pkg_wsock_homepage = https://github.com/madtrick/wsock +pkg_wsock_fetch = git +pkg_wsock_repo = https://github.com/madtrick/wsock +pkg_wsock_commit = master + +PACKAGES += xhttpc +pkg_xhttpc_name = xhttpc +pkg_xhttpc_description = Extensible HTTP Client for Erlang +pkg_xhttpc_homepage = https://github.com/seriyps/xhttpc +pkg_xhttpc_fetch = git +pkg_xhttpc_repo = https://github.com/seriyps/xhttpc +pkg_xhttpc_commit = master + +PACKAGES += xref_runner +pkg_xref_runner_name = xref_runner +pkg_xref_runner_description = Erlang Xref Runner (inspired in rebar xref) +pkg_xref_runner_homepage = https://github.com/inaka/xref_runner +pkg_xref_runner_fetch = git +pkg_xref_runner_repo = https://github.com/inaka/xref_runner +pkg_xref_runner_commit = master + +PACKAGES += yamerl +pkg_yamerl_name = yamerl +pkg_yamerl_description = YAML 1.2 parser in pure Erlang +pkg_yamerl_homepage = https://github.com/yakaz/yamerl +pkg_yamerl_fetch = git +pkg_yamerl_repo = https://github.com/yakaz/yamerl +pkg_yamerl_commit = master + +PACKAGES += yamler +pkg_yamler_name = yamler +pkg_yamler_description = libyaml-based yaml loader for Erlang +pkg_yamler_homepage = https://github.com/goertzenator/yamler +pkg_yamler_fetch = git +pkg_yamler_repo = https://github.com/goertzenator/yamler +pkg_yamler_commit = master + +PACKAGES += yaws +pkg_yaws_name = yaws +pkg_yaws_description = Yaws webserver +pkg_yaws_homepage = http://yaws.hyber.org +pkg_yaws_fetch = git +pkg_yaws_repo = https://github.com/klacke/yaws +pkg_yaws_commit = master + +PACKAGES += zab_engine +pkg_zab_engine_name = zab_engine +pkg_zab_engine_description = zab propotocol implement by erlang +pkg_zab_engine_homepage = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_fetch = git +pkg_zab_engine_repo = https://github.com/xinmingyao/zab_engine +pkg_zab_engine_commit = master + +PACKAGES += zabbix_sender +pkg_zabbix_sender_name = zabbix_sender +pkg_zabbix_sender_description = Zabbix trapper for sending data to Zabbix in pure Erlang +pkg_zabbix_sender_homepage = https://github.com/stalkermn/zabbix_sender +pkg_zabbix_sender_fetch = git +pkg_zabbix_sender_repo = https://github.com/stalkermn/zabbix_sender.git +pkg_zabbix_sender_commit = master + +PACKAGES += zeta +pkg_zeta_name = zeta +pkg_zeta_description = HTTP access log parser in Erlang +pkg_zeta_homepage = https://github.com/s1n4/zeta +pkg_zeta_fetch = git +pkg_zeta_repo = https://github.com/s1n4/zeta +pkg_zeta_commit = master + +PACKAGES += zippers +pkg_zippers_name = zippers +pkg_zippers_description = A library for functional zipper data structures in Erlang. Read more on zippers +pkg_zippers_homepage = https://github.com/ferd/zippers +pkg_zippers_fetch = git +pkg_zippers_repo = https://github.com/ferd/zippers +pkg_zippers_commit = master + +PACKAGES += zlists +pkg_zlists_name = zlists +pkg_zlists_description = Erlang lazy lists library. +pkg_zlists_homepage = https://github.com/vjache/erlang-zlists +pkg_zlists_fetch = git +pkg_zlists_repo = https://github.com/vjache/erlang-zlists +pkg_zlists_commit = master + +PACKAGES += zraft_lib +pkg_zraft_lib_name = zraft_lib +pkg_zraft_lib_description = Erlang raft consensus protocol implementation +pkg_zraft_lib_homepage = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_fetch = git +pkg_zraft_lib_repo = https://github.com/dreyk/zraft_lib +pkg_zraft_lib_commit = master + +PACKAGES += zucchini +pkg_zucchini_name = zucchini +pkg_zucchini_description = An Erlang INI parser +pkg_zucchini_homepage = https://github.com/devinus/zucchini +pkg_zucchini_fetch = git +pkg_zucchini_repo = https://github.com/devinus/zucchini +pkg_zucchini_commit = master + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: search + +define pkg_print + $(verbose) printf "%s\n" \ + $(if $(call core_eq,$(1),$(pkg_$(1)_name)),,"Pkg name: $(1)") \ + "App name: $(pkg_$(1)_name)" \ + "Description: $(pkg_$(1)_description)" \ + "Home page: $(pkg_$(1)_homepage)" \ + "Fetch with: $(pkg_$(1)_fetch)" \ + "Repository: $(pkg_$(1)_repo)" \ + "Commit: $(pkg_$(1)_commit)" \ + "" + +endef + +search: +ifdef q + $(foreach p,$(PACKAGES), \ + $(if $(findstring $(call core_lc,$(q)),$(call core_lc,$(pkg_$(p)_name) $(pkg_$(p)_description))), \ + $(call pkg_print,$(p)))) +else + $(foreach p,$(PACKAGES),$(call pkg_print,$(p))) +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-deps clean-tmp-deps.log + +# Configuration. + +ifdef OTP_DEPS +$(warning The variable OTP_DEPS is deprecated in favor of LOCAL_DEPS.) +endif + +IGNORE_DEPS ?= +export IGNORE_DEPS + +APPS_DIR ?= $(CURDIR)/apps +export APPS_DIR + +DEPS_DIR ?= $(CURDIR)/deps +export DEPS_DIR + +REBAR_DEPS_DIR = $(DEPS_DIR) +export REBAR_DEPS_DIR + +# External "early" plugins (see core/plugins.mk for regular plugins). +# They both use the core_dep_plugin macro. + +define core_dep_plugin +ifeq ($(2),$(PROJECT)) +-include $$(patsubst $(PROJECT)/%,%,$(1)) +else +-include $(DEPS_DIR)/$(1) + +$(DEPS_DIR)/$(1): $(DEPS_DIR)/$(2) ; +endif +endef + +DEP_EARLY_PLUGINS ?= + +$(foreach p,$(DEP_EARLY_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/early-plugins.mk,$p)))) + +dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) +dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ + $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) + +LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) +ALL_APPS_DIRS = $(if $(wildcard $(APPS_DIR)/),$(filter-out $(APPS_DIR),$(shell find $(APPS_DIR) -maxdepth 1 -type d))) +ALL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(foreach dep,$(filter-out $(IGNORE_DEPS),$(BUILD_DEPS) $(DEPS)),$(call dep_name,$(dep)))) + +ifeq ($(filter $(APPS_DIR) $(DEPS_DIR),$(subst :, ,$(ERL_LIBS))),) +ifeq ($(ERL_LIBS),) + ERL_LIBS = $(APPS_DIR):$(DEPS_DIR) +else + ERL_LIBS := $(ERL_LIBS):$(APPS_DIR):$(DEPS_DIR) +endif +endif +export ERL_LIBS + +export NO_AUTOPATCH + +# Verbosity. + +dep_verbose_0 = @echo " DEP $1 ($(call dep_commit,$1))"; +dep_verbose_2 = set -x; +dep_verbose = $(dep_verbose_$(V)) + +# Core targets. + +apps:: $(ALL_APPS_DIRS) clean-tmp-deps.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/apps.log +endif + $(verbose) mkdir -p $(ERLANG_MK_TMP) +# Create ebin directory for all apps to make sure Erlang recognizes them +# as proper OTP applications when using -include_lib. This is a temporary +# fix, a proper fix would be to compile apps/* in the right order. +ifndef IS_APP + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + mkdir -p $$dep/ebin; \ + done +endif +# at the toplevel: if LOCAL_DEPS is defined with at least one local app, only +# compile that list of apps. otherwise, compile everything. +# within an app: compile all LOCAL_DEPS that are (uncompiled) local apps + $(verbose) set -e; for dep in $(if $(LOCAL_DEPS_DIRS)$(IS_APP),$(LOCAL_DEPS_DIRS),$(ALL_APPS_DIRS)) ; do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/apps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/apps.log; \ + $(MAKE) -C $$dep IS_APP=1; \ + fi \ + done + +clean-tmp-deps.log: +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/deps.log +endif + +ifneq ($(SKIP_DEPS),) +deps:: +else +deps:: $(ALL_DEPS_DIRS) apps clean-tmp-deps.log + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) set -e; for dep in $(ALL_DEPS_DIRS) ; do \ + if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \ + :; \ + else \ + echo $$dep >> $(ERLANG_MK_TMP)/deps.log; \ + if [ -f $$dep/GNUmakefile ] || [ -f $$dep/makefile ] || [ -f $$dep/Makefile ]; then \ + $(MAKE) -C $$dep IS_DEP=1; \ + else \ + echo "Error: No Makefile to build dependency $$dep." >&2; \ + exit 2; \ + fi \ + fi \ + done +endif + +# Deps related targets. + +# @todo rename GNUmakefile and makefile into Makefile first, if they exist +# While Makefile file could be GNUmakefile or makefile, +# in practice only Makefile is needed so far. +define dep_autopatch + if [ -f $(DEPS_DIR)/$(1)/erlang.mk ]; then \ + rm -rf $(DEPS_DIR)/$1/ebin/; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + $(call dep_autopatch_erlang_mk,$(1)); \ + elif [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + if [ -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch2,$1); \ + elif [ 0 != `grep -c "include ../\w*\.mk" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ 0 != `grep -ci "^[^#].*rebar" $(DEPS_DIR)/$(1)/Makefile` ]; then \ + $(call dep_autopatch2,$(1)); \ + elif [ -n "`find $(DEPS_DIR)/$(1)/ -type f -name \*.mk -not -name erlang.mk -exec grep -i "^[^#].*rebar" '{}' \;`" ]; then \ + $(call dep_autopatch2,$(1)); \ + fi \ + else \ + if [ ! -d $(DEPS_DIR)/$(1)/src/ ]; then \ + $(call dep_autopatch_noop,$(1)); \ + else \ + $(call dep_autopatch2,$(1)); \ + fi \ + fi +endef + +define dep_autopatch2 + ! test -f $(DEPS_DIR)/$1/ebin/$1.app || \ + mv -n $(DEPS_DIR)/$1/ebin/$1.app $(DEPS_DIR)/$1/src/$1.app.src; \ + rm -f $(DEPS_DIR)/$1/ebin/$1.app; \ + if [ -f $(DEPS_DIR)/$1/src/$1.app.src.script ]; then \ + $(call erlang,$(call dep_autopatch_appsrc_script.erl,$(1))); \ + fi; \ + $(call erlang,$(call dep_autopatch_appsrc.erl,$(1))); \ + if [ -f $(DEPS_DIR)/$(1)/rebar -o -f $(DEPS_DIR)/$(1)/rebar.config -o -f $(DEPS_DIR)/$(1)/rebar.config.script -o -f $(DEPS_DIR)/$1/rebar.lock ]; then \ + $(call dep_autopatch_fetch_rebar); \ + $(call dep_autopatch_rebar,$(1)); \ + else \ + $(call dep_autopatch_gen,$(1)); \ + fi +endef + +define dep_autopatch_noop + printf "noop:\n" > $(DEPS_DIR)/$(1)/Makefile +endef + +# Replace "include erlang.mk" with a line that will load the parent Erlang.mk +# if given. Do it for all 3 possible Makefile file names. +ifeq ($(NO_AUTOPATCH_ERLANG_MK),) +define dep_autopatch_erlang_mk + for f in Makefile makefile GNUmakefile; do \ + if [ -f $(DEPS_DIR)/$1/$$f ]; then \ + sed -i.bak s/'include *erlang.mk'/'include $$(if $$(ERLANG_MK_FILENAME),$$(ERLANG_MK_FILENAME),erlang.mk)'/ $(DEPS_DIR)/$1/$$f; \ + fi \ + done +endef +else +define dep_autopatch_erlang_mk + : +endef +endif + +define dep_autopatch_gen + printf "%s\n" \ + "ERLC_OPTS = +debug_info" \ + "include ../../erlang.mk" > $(DEPS_DIR)/$(1)/Makefile +endef + +define dep_autopatch_fetch_rebar + mkdir -p $(ERLANG_MK_TMP); \ + if [ ! -d $(ERLANG_MK_TMP)/rebar ]; then \ + git clone -q -n -- https://github.com/rebar/rebar $(ERLANG_MK_TMP)/rebar; \ + cd $(ERLANG_MK_TMP)/rebar; \ + git checkout -q 576e12171ab8d69b048b827b92aa65d067deea01; \ + $(MAKE); \ + cd -; \ + fi +endef + +define dep_autopatch_rebar + if [ -f $(DEPS_DIR)/$(1)/Makefile ]; then \ + mv $(DEPS_DIR)/$(1)/Makefile $(DEPS_DIR)/$(1)/Makefile.orig.mk; \ + fi; \ + $(call erlang,$(call dep_autopatch_rebar.erl,$(1))); \ + rm -f $(DEPS_DIR)/$(1)/ebin/$(1).app +endef + +define dep_autopatch_rebar.erl + application:load(rebar), + application:set_env(rebar, log_level, debug), + rmemo:start(), + Conf1 = case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config)") of + {ok, Conf0} -> Conf0; + _ -> [] + end, + {Conf, OsEnv} = fun() -> + case filelib:is_file("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)") of + false -> {Conf1, []}; + true -> + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf1, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', "$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings1), + Before = os:getenv(), + {ok, Conf2} = file:script("$(call core_native_path,$(DEPS_DIR)/$1/rebar.config.script)", Bindings), + {Conf2, lists:foldl(fun(E, Acc) -> lists:delete(E, Acc) end, os:getenv(), Before)} + end + end(), + Write = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/Makefile)", Text, [append]) + end, + Escape = fun (Text) -> + re:replace(Text, "\\\\$$", "\$$$$", [global, {return, list}]) + end, + Write("IGNORE_DEPS += edown eper eunit_formatters meck node_package " + "rebar_lock_deps_plugin rebar_vsn_plugin reltool_util\n"), + Write("C_SRC_DIR = /path/do/not/exist\n"), + Write("C_SRC_TYPE = rebar\n"), + Write("DRV_CFLAGS = -fPIC\nexport DRV_CFLAGS\n"), + Write(["ERLANG_ARCH = ", rebar_utils:wordsize(), "\nexport ERLANG_ARCH\n"]), + ToList = fun + (V) when is_atom(V) -> atom_to_list(V); + (V) when is_list(V) -> "'\\"" ++ V ++ "\\"'" + end, + fun() -> + Write("ERLC_OPTS = +debug_info\nexport ERLC_OPTS\n"), + case lists:keyfind(erl_opts, 1, Conf) of + false -> ok; + {_, ErlOpts} -> + lists:foreach(fun + ({d, D}) -> + Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + ({d, DKey, DVal}) -> + Write("ERLC_OPTS += -D" ++ ToList(DKey) ++ "=" ++ ToList(DVal) ++ "\n"); + ({i, I}) -> + Write(["ERLC_OPTS += -I ", I, "\n"]); + ({platform_define, Regex, D}) -> + case rebar_utils:is_arch(Regex) of + true -> Write("ERLC_OPTS += -D" ++ ToList(D) ++ "=1\n"); + false -> ok + end; + ({parse_transform, PT}) -> + Write("ERLC_OPTS += +'{parse_transform, " ++ ToList(PT) ++ "}'\n"); + (_) -> ok + end, ErlOpts) + end, + Write("\n") + end(), + GetHexVsn = fun(N) -> + case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of + {ok, Lock} -> + io:format("~p~n", [Lock]), + case lists:keyfind("1.1.0", 1, Lock) of + {_, LockPkgs} -> + io:format("~p~n", [LockPkgs]), + case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of + {_, {pkg, _, Vsn}, _} -> + io:format("~p~n", [Vsn]), + {N, {hex, binary_to_list(Vsn)}}; + _ -> + false + end; + _ -> + false + end; + _ -> + false + end + end, + fun() -> + File = case lists:keyfind(deps, 1, Conf) of + false -> []; + {_, Deps} -> + [begin case case Dep of + N when is_atom(N) -> GetHexVsn(N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, S}}; + {N, S} when is_tuple(S) -> {N, S}; + {N, _, S} -> {N, S}; + {N, _, S, _} -> {N, S}; + _ -> false + end of + false -> ok; + {Name, Source} -> + {Method, Repo, Commit} = case Source of + {hex, V} -> {hex, V, undefined}; + {git, R} -> {git, R, master}; + {M, R, {branch, C}} -> {M, R, C}; + {M, R, {ref, C}} -> {M, R, C}; + {M, R, {tag, C}} -> {M, R, C}; + {M, R, C} -> {M, R, C} + end, + Write(io_lib:format("DEPS += ~s\ndep_~s = ~s ~s ~s~n", [Name, Name, Method, Repo, Commit])) + end end || Dep <- Deps] + end + end(), + fun() -> + case lists:keyfind(erl_first_files, 1, Conf) of + false -> ok; + {_, Files} -> + Names = [[" ", case lists:reverse(F) of + "lre." ++ Elif -> lists:reverse(Elif); + Elif -> lists:reverse(Elif) + end] || "src/" ++ F <- Files], + Write(io_lib:format("COMPILE_FIRST +=~s\n", [Names])) + end + end(), + Write("\n\nrebar_dep: preprocess pre-deps deps pre-app app\n"), + Write("\npreprocess::\n"), + Write("\npre-deps::\n"), + Write("\npre-app::\n"), + PatchHook = fun(Cmd) -> + Cmd2 = re:replace(Cmd, "^([g]?make)(.*)( -C.*)", "\\\\1\\\\3\\\\2", [{return, list}]), + case Cmd2 of + "make -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "gmake -C" ++ Cmd1 -> "$$\(MAKE) -C" ++ Escape(Cmd1); + "make " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + "gmake " ++ Cmd1 -> "$$\(MAKE) -f Makefile.orig.mk " ++ Escape(Cmd1); + _ -> Escape(Cmd) + end + end, + fun() -> + case lists:keyfind(pre_hooks, 1, Conf) of + false -> ok; + {_, Hooks} -> + [case H of + {'get-deps', Cmd} -> + Write("\npre-deps::\n\t" ++ PatchHook(Cmd) ++ "\n"); + {compile, Cmd} -> + Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + {Regex, compile, Cmd} -> + case rebar_utils:is_arch(Regex) of + true -> Write("\npre-app::\n\tCC=$$\(CC) " ++ PatchHook(Cmd) ++ "\n"); + false -> ok + end; + _ -> ok + end || H <- Hooks] + end + end(), + ShellToMk = fun(V) -> + re:replace(re:replace(V, "(\\\\$$)(\\\\w*)", "\\\\1(\\\\2)", [global]), + "-Werror\\\\b", "", [{return, list}, global]) + end, + PortSpecs = fun() -> + case lists:keyfind(port_specs, 1, Conf) of + false -> + case filelib:is_dir("$(call core_native_path,$(DEPS_DIR)/$1/c_src)") of + false -> []; + true -> + [{"priv/" ++ proplists:get_value(so_name, Conf, "$(1)_drv.so"), + proplists:get_value(port_sources, Conf, ["c_src/*.c"]), []}] + end; + {_, Specs} -> + lists:flatten([case S of + {Output, Input} -> {ShellToMk(Output), Input, []}; + {Regex, Output, Input} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, []}; + false -> [] + end; + {Regex, Output, Input, [{env, Env}]} -> + case rebar_utils:is_arch(Regex) of + true -> {ShellToMk(Output), Input, Env}; + false -> [] + end + end || S <- Specs]) + end + end(), + PortSpecWrite = fun (Text) -> + file:write_file("$(call core_native_path,$(DEPS_DIR)/$1/c_src/Makefile.erlang.mk)", Text, [append]) + end, + case PortSpecs of + [] -> ok; + _ -> + Write("\npre-app::\n\t$$\(MAKE) -f c_src/Makefile.erlang.mk\n"), + PortSpecWrite(io_lib:format("ERL_CFLAGS ?= -finline-functions -Wall -fPIC -I \\"~s/erts-~s/include\\" -I \\"~s\\"\n", + [code:root_dir(), erlang:system_info(version), code:lib_dir(erl_interface, include)])), + PortSpecWrite(io_lib:format("ERL_LDFLAGS ?= -L \\"~s\\" -lerl_interface -lei\n", + [code:lib_dir(erl_interface, lib)])), + [PortSpecWrite(["\n", E, "\n"]) || E <- OsEnv], + FilterEnv = fun(Env) -> + lists:flatten([case E of + {_, _} -> E; + {Regex, K, V} -> + case rebar_utils:is_arch(Regex) of + true -> {K, V}; + false -> [] + end + end || E <- Env]) + end, + MergeEnv = fun(Env) -> + lists:foldl(fun ({K, V}, Acc) -> + case lists:keyfind(K, 1, Acc) of + false -> [{K, rebar_utils:expand_env_variable(V, K, "")}|Acc]; + {_, V0} -> [{K, rebar_utils:expand_env_variable(V, K, V0)}|Acc] + end + end, [], Env) + end, + PortEnv = case lists:keyfind(port_env, 1, Conf) of + false -> []; + {_, PortEnv0} -> FilterEnv(PortEnv0) + end, + PortSpec = fun ({Output, Input0, Env}) -> + filelib:ensure_dir("$(call core_native_path,$(DEPS_DIR)/$1/)" ++ Output), + Input = [[" ", I] || I <- Input0], + PortSpecWrite([ + [["\n", K, " = ", ShellToMk(V)] || {K, V} <- lists:reverse(MergeEnv(PortEnv))], + case $(PLATFORM) of + darwin -> "\n\nLDFLAGS += -flat_namespace -undefined suppress"; + _ -> "" + end, + "\n\nall:: ", Output, "\n\n", + "%.o: %.c\n\t$$\(CC) -c -o $$\@ $$\< $$\(CFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.C\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cc\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + "%.o: %.cpp\n\t$$\(CXX) -c -o $$\@ $$\< $$\(CXXFLAGS) $$\(ERL_CFLAGS) $$\(DRV_CFLAGS) $$\(EXE_CFLAGS)\n\n", + [[Output, ": ", K, " += ", ShellToMk(V), "\n"] || {K, V} <- lists:reverse(MergeEnv(FilterEnv(Env)))], + Output, ": $$\(foreach ext,.c .C .cc .cpp,", + "$$\(patsubst %$$\(ext),%.o,$$\(filter %$$\(ext),$$\(wildcard", Input, "))))\n", + "\t$$\(CC) -o $$\@ $$\? $$\(LDFLAGS) $$\(ERL_LDFLAGS) $$\(DRV_LDFLAGS) $$\(EXE_LDFLAGS)", + case {filename:extension(Output), $(PLATFORM)} of + {[], _} -> "\n"; + {_, darwin} -> "\n"; + _ -> " -shared\n" + end]) + end, + [PortSpec(S) || S <- PortSpecs] + end, + Write("\ninclude $$\(if $$\(ERLANG_MK_FILENAME),$$\(ERLANG_MK_FILENAME),erlang.mk)"), + RunPlugin = fun(Plugin, Step) -> + case erlang:function_exported(Plugin, Step, 2) of + false -> ok; + true -> + c:cd("$(call core_native_path,$(DEPS_DIR)/$1/)"), + Ret = Plugin:Step({config, "", Conf, dict:new(), dict:new(), dict:new(), + dict:store(base_dir, "", dict:new())}, undefined), + io:format("rebar plugin ~p step ~p ret ~p~n", [Plugin, Step, Ret]) + end + end, + fun() -> + case lists:keyfind(plugins, 1, Conf) of + false -> ok; + {_, Plugins} -> + [begin + case lists:keyfind(deps, 1, Conf) of + false -> ok; + {_, Deps} -> + case lists:keyfind(P, 1, Deps) of + false -> ok; + _ -> + Path = "$(call core_native_path,$(DEPS_DIR)/)" ++ atom_to_list(P), + io:format("~s", [os:cmd("$(MAKE) -C $(call core_native_path,$(DEPS_DIR)/$1) " ++ Path)]), + io:format("~s", [os:cmd("$(MAKE) -C " ++ Path ++ " IS_DEP=1")]), + code:add_patha(Path ++ "/ebin") + end + end + end || P <- Plugins], + [case code:load_file(P) of + {module, P} -> ok; + _ -> + case lists:keyfind(plugin_dir, 1, Conf) of + false -> ok; + {_, PluginsDir} -> + ErlFile = "$(call core_native_path,$(DEPS_DIR)/$1/)" ++ PluginsDir ++ "/" ++ atom_to_list(P) ++ ".erl", + {ok, P, Bin} = compile:file(ErlFile, [binary]), + {module, P} = code:load_binary(P, ErlFile, Bin) + end + end || P <- Plugins], + [RunPlugin(P, preprocess) || P <- Plugins], + [RunPlugin(P, pre_compile) || P <- Plugins], + [RunPlugin(P, compile) || P <- Plugins] + end + end(), + halt() +endef + +define dep_autopatch_appsrc_script.erl + AppSrc = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcScript = AppSrc ++ ".script", + {ok, Conf0} = file:consult(AppSrc), + Bindings0 = erl_eval:new_bindings(), + Bindings1 = erl_eval:add_binding('CONFIG', Conf0, Bindings0), + Bindings = erl_eval:add_binding('SCRIPT', AppSrcScript, Bindings1), + Conf = case file:script(AppSrcScript, Bindings) of + {ok, [C]} -> C; + {ok, C} -> C + end, + ok = file:write_file(AppSrc, io_lib:format("~p.~n", [Conf])), + halt() +endef + +define dep_autopatch_appsrc.erl + AppSrcOut = "$(call core_native_path,$(DEPS_DIR)/$1/src/$1.app.src)", + AppSrcIn = case filelib:is_regular(AppSrcOut) of false -> "$(call core_native_path,$(DEPS_DIR)/$1/ebin/$1.app)"; true -> AppSrcOut end, + case filelib:is_regular(AppSrcIn) of + false -> ok; + true -> + {ok, [{application, $(1), L0}]} = file:consult(AppSrcIn), + L1 = lists:keystore(modules, 1, L0, {modules, []}), + L2 = case lists:keyfind(vsn, 1, L1) of + {_, git} -> lists:keyreplace(vsn, 1, L1, {vsn, "git"}); + {_, {cmd, _}} -> lists:keyreplace(vsn, 1, L1, {vsn, "cmd"}); + _ -> L1 + end, + L3 = case lists:keyfind(registered, 1, L2) of false -> [{registered, []}|L2]; _ -> L2 end, + ok = file:write_file(AppSrcOut, io_lib:format("~p.~n", [{application, $(1), L3}])), + case AppSrcOut of AppSrcIn -> ok; _ -> ok = file:delete(AppSrcIn) end + end, + halt() +endef + +define dep_fetch_git + git clone -q -n -- $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && git checkout -q $(call dep_commit,$(1)); +endef + +define dep_fetch_git-submodule + git submodule update --init -- $(DEPS_DIR)/$1; +endef + +define dep_fetch_hg + hg clone -q -U $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); \ + cd $(DEPS_DIR)/$(call dep_name,$(1)) && hg update -q $(call dep_commit,$(1)); +endef + +define dep_fetch_svn + svn checkout -q $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_cp + cp -R $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +define dep_fetch_ln + ln -s $(call dep_repo,$(1)) $(DEPS_DIR)/$(call dep_name,$(1)); +endef + +# Hex only has a package version. No need to look in the Erlang.mk packages. +define dep_fetch_hex + mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ + $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ + https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; +endef + +define dep_fetch_fail + echo "Error: Unknown or invalid dependency: $(1)." >&2; \ + exit 78; +endef + +# Kept for compatibility purposes with older Erlang.mk configuration. +define dep_fetch_legacy + $(warning WARNING: '$(1)' dependency configuration uses deprecated format.) \ + git clone -q -n -- $(word 1,$(dep_$(1))) $(DEPS_DIR)/$(1); \ + cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); +endef + +define dep_fetch + $(if $(dep_$(1)), \ + $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ + $(word 1,$(dep_$(1))), \ + $(if $(IS_DEP),legacy,fail)), \ + $(if $(filter $(1),$(PACKAGES)), \ + $(pkg_$(1)_fetch), \ + fail)) +endef + +define dep_target +$(DEPS_DIR)/$(call dep_name,$1): + $(eval DEP_NAME := $(call dep_name,$1)) + $(eval DEP_STR := $(if $(filter-out $1,$(DEP_NAME)),$1,"$1 ($(DEP_NAME))")) + $(verbose) if test -d $(APPS_DIR)/$(DEP_NAME); then \ + echo "Error: Dependency" $(DEP_STR) "conflicts with application found in $(APPS_DIR)/$(DEP_NAME)." >&2; \ + exit 17; \ + fi + $(verbose) mkdir -p $(DEPS_DIR) + $(dep_verbose) $(call dep_fetch_$(strip $(call dep_fetch,$(1))),$(1)) + $(verbose) if [ -f $(DEPS_DIR)/$(1)/configure.ac -o -f $(DEPS_DIR)/$(1)/configure.in ] \ + && [ ! -f $(DEPS_DIR)/$(1)/configure ]; then \ + echo " AUTO " $(1); \ + cd $(DEPS_DIR)/$(1) && autoreconf -Wall -vif -I m4; \ + fi + - $(verbose) if [ -f $(DEPS_DIR)/$(DEP_NAME)/configure ]; then \ + echo " CONF " $(DEP_STR); \ + cd $(DEPS_DIR)/$(DEP_NAME) && ./configure; \ + fi +ifeq ($(filter $(1),$(NO_AUTOPATCH)),) + $(verbose) if [ "$(1)" = "amqp_client" -a "$(RABBITMQ_CLIENT_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi; \ + if [ ! -d $(DEPS_DIR)/rabbitmq-server ]; then \ + echo " PATCH Downloading rabbitmq-server"; \ + git clone https://github.com/rabbitmq/rabbitmq-server.git $(DEPS_DIR)/rabbitmq-server; \ + fi; \ + ln -s $(DEPS_DIR)/amqp_client/deps/rabbit_common-0.0.0 $(DEPS_DIR)/rabbit_common; \ + elif [ "$(1)" = "rabbit" -a "$(RABBITMQ_SERVER_PATCH)" ]; then \ + if [ ! -d $(DEPS_DIR)/rabbitmq-codegen ]; then \ + echo " PATCH Downloading rabbitmq-codegen"; \ + git clone https://github.com/rabbitmq/rabbitmq-codegen.git $(DEPS_DIR)/rabbitmq-codegen; \ + fi \ + else \ + $$(call dep_autopatch,$(DEP_NAME)) \ + fi +endif +endef + +$(foreach dep,$(BUILD_DEPS) $(DEPS),$(eval $(call dep_target,$(dep)))) + +ifndef IS_APP +clean:: clean-apps + +clean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep clean IS_APP=1; \ + done + +distclean:: distclean-apps + +distclean-apps: + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep distclean IS_APP=1; \ + done +endif + +ifndef SKIP_DEPS +distclean:: distclean-deps + +distclean-deps: + $(gen_verbose) rm -rf $(DEPS_DIR) +endif + +# Forward-declare variables used in core/deps-tools.mk. This is required +# in case plugins use them. + +ERLANG_MK_RECURSIVE_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-deps-list.log +ERLANG_MK_RECURSIVE_DOC_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-doc-deps-list.log +ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log +ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log +ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Verbosity. + +proto_verbose_0 = @echo " PROTO " $(filter %.proto,$(?F)); +proto_verbose = $(proto_verbose_$(V)) + +# Core targets. + +define compile_proto + $(verbose) mkdir -p ebin/ include/ + $(proto_verbose) $(call erlang,$(call compile_proto.erl,$(1))) + $(proto_verbose) erlc +debug_info -o ebin/ ebin/*.erl + $(verbose) rm ebin/*.erl +endef + +define compile_proto.erl + [begin + protobuffs_compile:generate_source(F, + [{output_include_dir, "./include"}, + {output_src_dir, "./ebin"}]) + end || F <- string:tokens("$(1)", " ")], + halt(). +endef + +ifneq ($(wildcard src/),) +ebin/$(PROJECT).app:: $(sort $(call core_find,src/,*.proto)) + $(if $(strip $?),$(call compile_proto,$?)) +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-app + +# Configuration. + +ERLC_OPTS ?= -Werror +debug_info +warn_export_vars +warn_shadow_vars \ + +warn_obsolete_guard # +bin_opt_info +warn_export_all +warn_missing_spec +COMPILE_FIRST ?= +COMPILE_FIRST_PATHS = $(addprefix src/,$(addsuffix .erl,$(COMPILE_FIRST))) +ERLC_EXCLUDE ?= +ERLC_EXCLUDE_PATHS = $(addprefix src/,$(addsuffix .erl,$(ERLC_EXCLUDE))) + +ERLC_ASN1_OPTS ?= + +ERLC_MIB_OPTS ?= +COMPILE_MIB_FIRST ?= +COMPILE_MIB_FIRST_PATHS = $(addprefix mibs/,$(addsuffix .mib,$(COMPILE_MIB_FIRST))) + +# Verbosity. + +app_verbose_0 = @echo " APP " $(PROJECT); +app_verbose_2 = set -x; +app_verbose = $(app_verbose_$(V)) + +appsrc_verbose_0 = @echo " APP " $(PROJECT).app.src; +appsrc_verbose_2 = set -x; +appsrc_verbose = $(appsrc_verbose_$(V)) + +makedep_verbose_0 = @echo " DEPEND" $(PROJECT).d; +makedep_verbose_2 = set -x; +makedep_verbose = $(makedep_verbose_$(V)) + +erlc_verbose_0 = @echo " ERLC " $(filter-out $(patsubst %,%.erl,$(ERLC_EXCLUDE)),\ + $(filter %.erl %.core,$(?F))); +erlc_verbose_2 = set -x; +erlc_verbose = $(erlc_verbose_$(V)) + +xyrl_verbose_0 = @echo " XYRL " $(filter %.xrl %.yrl,$(?F)); +xyrl_verbose_2 = set -x; +xyrl_verbose = $(xyrl_verbose_$(V)) + +asn1_verbose_0 = @echo " ASN1 " $(filter %.asn1,$(?F)); +asn1_verbose_2 = set -x; +asn1_verbose = $(asn1_verbose_$(V)) + +mib_verbose_0 = @echo " MIB " $(filter %.bin %.mib,$(?F)); +mib_verbose_2 = set -x; +mib_verbose = $(mib_verbose_$(V)) + +ifneq ($(wildcard src/),) + +# Targets. + +ifeq ($(wildcard ebin/test),) +app:: deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build +else +app:: clean deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build +endif + +ifeq ($(wildcard src/$(PROJECT_MOD).erl),) +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, []}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +else +define app_file +{application, '$(PROJECT)', [ + {description, "$(PROJECT_DESCRIPTION)"}, + {vsn, "$(PROJECT_VERSION)"},$(if $(IS_DEP), + {id$(comma)$(space)"$(1)"}$(comma)) + {modules, [$(call comma_list,$(2))]}, + {registered, [$(call comma_list,$(PROJECT)_sup $(PROJECT_REGISTERED))]}, + {applications, [$(call comma_list,kernel stdlib $(OTP_DEPS) $(LOCAL_DEPS) $(foreach dep,$(DEPS),$(call dep_name,$(dep))))]}, + {mod, {$(PROJECT_MOD), []}}, + {env, $(subst \,\\,$(PROJECT_ENV))}$(if $(findstring {,$(PROJECT_APP_EXTRA_KEYS)),$(comma)$(newline)$(tab)$(subst \,\\,$(PROJECT_APP_EXTRA_KEYS)),) +]}. +endef +endif + +app-build: ebin/$(PROJECT).app + $(verbose) : + +# Source files. + +ALL_SRC_FILES := $(sort $(call core_find,src/,*)) + +ERL_FILES := $(filter %.erl,$(ALL_SRC_FILES)) +CORE_FILES := $(filter %.core,$(ALL_SRC_FILES)) + +# ASN.1 files. + +ifneq ($(wildcard asn1/),) +ASN1_FILES = $(sort $(call core_find,asn1/,*.asn1)) +ERL_FILES += $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +define compile_asn1 + $(verbose) mkdir -p include/ + $(asn1_verbose) erlc -v -I include/ -o asn1/ +noobj $(ERLC_ASN1_OPTS) $(1) + $(verbose) mv asn1/*.erl src/ + $(verbose) mv asn1/*.hrl include/ + $(verbose) mv asn1/*.asn1db include/ +endef + +$(PROJECT).d:: $(ASN1_FILES) + $(if $(strip $?),$(call compile_asn1,$?)) +endif + +# SNMP MIB files. + +ifneq ($(wildcard mibs/),) +MIB_FILES = $(sort $(call core_find,mibs/,*.mib)) + +$(PROJECT).d:: $(COMPILE_MIB_FIRST_PATHS) $(MIB_FILES) + $(verbose) mkdir -p include/ priv/mibs/ + $(mib_verbose) erlc -v $(ERLC_MIB_OPTS) -o priv/mibs/ -I priv/mibs/ $? + $(mib_verbose) erlc -o include/ -- $(addprefix priv/mibs/,$(patsubst %.mib,%.bin,$(notdir $?))) +endif + +# Leex and Yecc files. + +XRL_FILES := $(filter %.xrl,$(ALL_SRC_FILES)) +XRL_ERL_FILES = $(addprefix src/,$(patsubst %.xrl,%.erl,$(notdir $(XRL_FILES)))) +ERL_FILES += $(XRL_ERL_FILES) + +YRL_FILES := $(filter %.yrl,$(ALL_SRC_FILES)) +YRL_ERL_FILES = $(addprefix src/,$(patsubst %.yrl,%.erl,$(notdir $(YRL_FILES)))) +ERL_FILES += $(YRL_ERL_FILES) + +$(PROJECT).d:: $(XRL_FILES) $(YRL_FILES) + $(if $(strip $?),$(xyrl_verbose) erlc -v -o src/ $(YRL_ERLC_OPTS) $?) + +# Erlang and Core Erlang files. + +define makedep.erl + E = ets:new(makedep, [bag]), + G = digraph:new([acyclic]), + ErlFiles = lists:usort(string:tokens("$(ERL_FILES)", " ")), + DepsDir = "$(call core_native_path,$(DEPS_DIR))", + AppsDir = "$(call core_native_path,$(APPS_DIR))", + DepsDirsSrc = "$(if $(wildcard $(DEPS_DIR)/*/src), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/src)))", + DepsDirsInc = "$(if $(wildcard $(DEPS_DIR)/*/include), $(call core_native_path,$(wildcard $(DEPS_DIR)/*/include)))", + AppsDirsSrc = "$(if $(wildcard $(APPS_DIR)/*/src), $(call core_native_path,$(wildcard $(APPS_DIR)/*/src)))", + AppsDirsInc = "$(if $(wildcard $(APPS_DIR)/*/include), $(call core_native_path,$(wildcard $(APPS_DIR)/*/include)))", + DepsDirs = lists:usort(string:tokens(DepsDirsSrc++DepsDirsInc, " ")), + AppsDirs = lists:usort(string:tokens(AppsDirsSrc++AppsDirsInc, " ")), + Modules = [{list_to_atom(filename:basename(F, ".erl")), F} || F <- ErlFiles], + Add = fun (Mod, Dep) -> + case lists:keyfind(Dep, 1, Modules) of + false -> ok; + {_, DepFile} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + ets:insert(E, {ModFile, DepFile}), + digraph:add_vertex(G, Mod), + digraph:add_vertex(G, Dep), + digraph:add_edge(G, Mod, Dep) + end + end, + AddHd = fun (F, Mod, DepFile) -> + case file:open(DepFile, [read]) of + {error, enoent} -> + ok; + {ok, Fd} -> + {_, ModFile} = lists:keyfind(Mod, 1, Modules), + case ets:match(E, {ModFile, DepFile}) of + [] -> + ets:insert(E, {ModFile, DepFile}), + F(F, Fd, Mod,0); + _ -> ok + end + end + end, + SearchHrl = fun + F(_Hrl, []) -> {error,enoent}; + F(Hrl, [Dir|Dirs]) -> + HrlF = filename:join([Dir,Hrl]), + case filelib:is_file(HrlF) of + true -> + {ok, HrlF}; + false -> F(Hrl,Dirs) + end + end, + Attr = fun + (_F, Mod, behavior, Dep) -> + Add(Mod, Dep); + (_F, Mod, behaviour, Dep) -> + Add(Mod, Dep); + (_F, Mod, compile, {parse_transform, Dep}) -> + Add(Mod, Dep); + (_F, Mod, compile, Opts) when is_list(Opts) -> + case proplists:get_value(parse_transform, Opts) of + undefined -> ok; + Dep -> Add(Mod, Dep) + end; + (F, Mod, include, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, include_lib, Hrl) -> + case SearchHrl(Hrl, ["src", "include",AppsDir,DepsDir]++AppsDirs++DepsDirs) of + {ok, FoundHrl} -> AddHd(F, Mod, FoundHrl); + {error, _} -> false + end; + (F, Mod, import, {Imp, _}) -> + IsFile = + case lists:keyfind(Imp, 1, Modules) of + false -> false; + {_, FilePath} -> filelib:is_file(FilePath) + end, + case IsFile of + false -> ok; + true -> Add(Mod, Imp) + end; + (_, _, _, _) -> ok + end, + MakeDepend = fun + (F, Fd, Mod, StartLocation) -> + {ok, Filename} = file:pid2name(Fd), + case io:parse_erl_form(Fd, undefined, StartLocation) of + {ok, AbsData, EndLocation} -> + case AbsData of + {attribute, _, Key, Value} -> + Attr(F, Mod, Key, Value), + F(F, Fd, Mod, EndLocation); + _ -> F(F, Fd, Mod, EndLocation) + end; + {eof, _ } -> file:close(Fd); + {error, ErrorDescription } -> + file:close(Fd); + {error, ErrorInfo, ErrorLocation} -> + F(F, Fd, Mod, ErrorLocation) + end, + ok + end, + [begin + Mod = list_to_atom(filename:basename(F, ".erl")), + {ok, Fd} = file:open(F, [read]), + MakeDepend(MakeDepend, Fd, Mod,0) + end || F <- ErlFiles], + Depend = sofs:to_external(sofs:relation_to_family(sofs:relation(ets:tab2list(E)))), + CompileFirst = [X || X <- lists:reverse(digraph_utils:topsort(G)), [] =/= digraph:in_neighbours(G, X)], + TargetPath = fun(Target) -> + case lists:keyfind(Target, 1, Modules) of + false -> ""; + {_, DepFile} -> + DirSubname = tl(string:tokens(filename:dirname(DepFile), "/")), + string:join(DirSubname ++ [atom_to_list(Target)], "/") + end + end, + ok = file:write_file("$(1)", [ + [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], + "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" + ]), + halt() +endef + +ifeq ($(if $(NO_MAKEDEP),$(wildcard $(PROJECT).d),),) +$(PROJECT).d:: $(ERL_FILES) $(call core_find,include/,*.hrl) $(MAKEFILE_LIST) + $(makedep_verbose) $(call erlang,$(call makedep.erl,$@)) +endif + +ifneq ($(words $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES)),0) +# Rebuild everything when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change: $(MAKEFILE_LIST) + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) if test -f $@; then \ + touch $(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES); \ + touch -c $(PROJECT).d; \ + fi + $(verbose) touch $@ + +$(ERL_FILES) $(CORE_FILES) $(ASN1_FILES) $(MIB_FILES) $(XRL_FILES) $(YRL_FILES):: $(ERLANG_MK_TMP)/last-makefile-change +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change +endif + +include $(wildcard $(PROJECT).d) + +ebin/$(PROJECT).app:: ebin/ + +ebin/: + $(verbose) mkdir -p ebin/ + +define compile_erl + $(erlc_verbose) erlc -v $(if $(IS_DEP),$(filter-out -Werror,$(ERLC_OPTS)),$(ERLC_OPTS)) -o ebin/ \ + -pa ebin/ -I include/ $(filter-out $(ERLC_EXCLUDE_PATHS),$(COMPILE_FIRST_PATHS) $(1)) +endef + +ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES) $(wildcard src/$(PROJECT).app.src) + $(eval FILES_TO_COMPILE := $(filter-out src/$(PROJECT).app.src,$?)) + $(if $(strip $(FILES_TO_COMPILE)),$(call compile_erl,$(FILES_TO_COMPILE))) + $(eval GITDESCRIBE := $(shell git describe --dirty --abbrev=7 --tags --always --first-parent 2>/dev/null || true)) + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(filter-out $(ERLC_EXCLUDE_PATHS),$(ERL_FILES) $(CORE_FILES) $(BEAM_FILES))))))) +ifeq ($(wildcard src/$(PROJECT).app.src),) + $(app_verbose) printf '$(subst %,%%,$(subst $(newline),\n,$(subst ','\'',$(call app_file,$(GITDESCRIBE),$(MODULES)))))' \ + > ebin/$(PROJECT).app +else + $(verbose) if [ -z "$$(grep -e '^[^%]*{\s*modules\s*,' src/$(PROJECT).app.src)" ]; then \ + echo "Empty modules entry not found in $(PROJECT).app.src. Please consult the erlang.mk README for instructions." >&2; \ + exit 1; \ + fi + $(appsrc_verbose) cat src/$(PROJECT).app.src \ + | sed "s/{[[:space:]]*modules[[:space:]]*,[[:space:]]*\[\]}/{modules, \[$(call comma_list,$(MODULES))\]}/" \ + | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ + > ebin/$(PROJECT).app +endif + +clean:: clean-app + +clean-app: + $(gen_verbose) rm -rf $(PROJECT).d ebin/ priv/mibs/ $(XRL_ERL_FILES) $(YRL_ERL_FILES) \ + $(addprefix include/,$(patsubst %.mib,%.hrl,$(notdir $(MIB_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.hrl,$(notdir $(ASN1_FILES)))) \ + $(addprefix include/,$(patsubst %.asn1,%.asn1db,$(notdir $(ASN1_FILES)))) \ + $(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES)))) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: docs-deps + +# Configuration. + +ALL_DOC_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(DOC_DEPS)) + +# Targets. + +$(foreach dep,$(DOC_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +doc-deps: +else +doc-deps: $(ALL_DOC_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_DOC_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rel-deps + +# Configuration. + +ALL_REL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(REL_DEPS)) + +# Targets. + +$(foreach dep,$(REL_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +rel-deps: +else +rel-deps: $(ALL_REL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_REL_DEPS_DIRS) ; do $(MAKE) -C $$dep; done +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: test-deps test-dir test-build clean-test-dir + +# Configuration. + +TEST_DIR ?= $(CURDIR)/test + +ALL_TEST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(TEST_DEPS)) + +TEST_ERLC_OPTS ?= +debug_info +warn_export_vars +warn_shadow_vars +warn_obsolete_guard +TEST_ERLC_OPTS += -DTEST=1 + +# Targets. + +$(foreach dep,$(TEST_DEPS),$(eval $(call dep_target,$(dep)))) + +ifneq ($(SKIP_DEPS),) +test-deps: +else +test-deps: $(ALL_TEST_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_TEST_DEPS_DIRS) ; do $(MAKE) -C $$dep IS_DEP=1; done +endif + +ifneq ($(wildcard $(TEST_DIR)),) +test-dir: + $(gen_verbose) erlc -v $(TEST_ERLC_OPTS) -I include/ -o $(TEST_DIR) \ + $(call core_find,$(TEST_DIR)/,*.erl) -pa ebin/ +endif + +ifeq ($(wildcard src),) +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: clean deps test-deps + $(verbose) $(MAKE) --no-print-directory test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +else +ifeq ($(wildcard ebin/test),) +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: clean deps test-deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" + $(gen_verbose) touch ebin/test +else +test-build:: ERLC_OPTS=$(TEST_ERLC_OPTS) +test-build:: deps test-deps $(PROJECT).d + $(verbose) $(MAKE) --no-print-directory app-build test-dir ERLC_OPTS="$(call escape_dquotes,$(TEST_ERLC_OPTS))" +endif + +clean:: clean-test-dir + +clean-test-dir: +ifneq ($(wildcard $(TEST_DIR)/*.beam),) + $(gen_verbose) rm -f $(TEST_DIR)/*.beam +endif +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: rebar.config + +# We strip out -Werror because we don't want to fail due to +# warnings when used as a dependency. + +compat_prepare_erlc_opts = $(shell echo "$1" | sed 's/, */,/g') + +define compat_convert_erlc_opts +$(if $(filter-out -Werror,$1),\ + $(if $(findstring +,$1),\ + $(shell echo $1 | cut -b 2-))) +endef + +define compat_erlc_opts_to_list +[$(call comma_list,$(foreach o,$(call compat_prepare_erlc_opts,$1),$(call compat_convert_erlc_opts,$o)))] +endef + +define compat_rebar_config +{deps, [ +$(call comma_list,$(foreach d,$(DEPS),\ + $(if $(filter hex,$(call dep_fetch,$d)),\ + {$(call dep_name,$d)$(comma)"$(call dep_repo,$d)"},\ + {$(call dep_name,$d)$(comma)".*"$(comma){git,"$(call dep_repo,$d)"$(comma)"$(call dep_commit,$d)"}}))) +]}. +{erl_opts, $(call compat_erlc_opts_to_list,$(ERLC_OPTS))}. +endef + +$(eval _compat_rebar_config = $$(compat_rebar_config)) +$(eval export _compat_rebar_config) + +rebar.config: + $(gen_verbose) echo "$${_compat_rebar_config}" > rebar.config + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter asciideck,$(DEPS) $(DOC_DEPS)),asciideck) + +.PHONY: asciidoc asciidoc-guide asciidoc-manual install-asciidoc distclean-asciidoc-guide distclean-asciidoc-manual + +# Core targets. + +docs:: asciidoc + +distclean:: distclean-asciidoc-guide distclean-asciidoc-manual + +# Plugin-specific targets. + +asciidoc: asciidoc-guide asciidoc-manual + +# User guide. + +ifeq ($(wildcard doc/src/guide/book.asciidoc),) +asciidoc-guide: +else +asciidoc-guide: distclean-asciidoc-guide doc-deps + a2x -v -f pdf doc/src/guide/book.asciidoc && mv doc/src/guide/book.pdf doc/guide.pdf + a2x -v -f chunked doc/src/guide/book.asciidoc && mv doc/src/guide/book.chunked/ doc/html/ + +distclean-asciidoc-guide: + $(gen_verbose) rm -rf doc/html/ doc/guide.pdf +endif + +# Man pages. + +ASCIIDOC_MANUAL_FILES := $(wildcard doc/src/manual/*.asciidoc) + +ifeq ($(ASCIIDOC_MANUAL_FILES),) +asciidoc-manual: +else + +# Configuration. + +MAN_INSTALL_PATH ?= /usr/local/share/man +MAN_SECTIONS ?= 3 7 +MAN_PROJECT ?= $(shell echo $(PROJECT) | sed 's/^./\U&\E/') +MAN_VERSION ?= $(PROJECT_VERSION) + +# Plugin-specific targets. + +define asciidoc2man.erl +try + [begin + io:format(" ADOC ~s~n", [F]), + ok = asciideck:to_manpage(asciideck:parse_file(F), #{ + compress => gzip, + outdir => filename:dirname(F), + extra2 => "$(MAN_PROJECT) $(MAN_VERSION)", + extra3 => "$(MAN_PROJECT) Function Reference" + }) + end || F <- [$(shell echo $(addprefix $(comma)\",$(addsuffix \",$1)) | sed 's/^.//')]], + halt(0) +catch C:E -> + io:format("Exception ~p:~p~nStacktrace: ~p~n", [C, E, erlang:get_stacktrace()]), + halt(1) +end. +endef + +asciidoc-manual:: doc-deps + +asciidoc-manual:: $(ASCIIDOC_MANUAL_FILES) + $(call erlang,$(call asciidoc2man.erl,$?)) + $(foreach s,$(MAN_SECTIONS),mkdir -p doc/man$s/ && mv doc/src/manual/*.$s.gz doc/man$s/;) + +install-docs:: install-asciidoc + +install-asciidoc: asciidoc-manual + $(foreach s,$(MAN_SECTIONS),\ + mkdir -p $(MAN_INSTALL_PATH)/man$s/ && \ + install -g `id -g` -o `id -u` -m 0644 doc/man$s/*.gz $(MAN_INSTALL_PATH)/man$s/;) + +distclean-asciidoc-manual: + $(gen_verbose) rm -rf $(addprefix doc/man,$(MAN_SECTIONS)) +endif +endif + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: bootstrap bootstrap-lib bootstrap-rel new list-templates + +# Core targets. + +help:: + $(verbose) printf "%s\n" "" \ + "Bootstrap targets:" \ + " bootstrap Generate a skeleton of an OTP application" \ + " bootstrap-lib Generate a skeleton of an OTP library" \ + " bootstrap-rel Generate the files needed to build a release" \ + " new-app in=NAME Create a new local OTP application NAME" \ + " new-lib in=NAME Create a new local OTP library NAME" \ + " new t=TPL n=NAME Generate a module NAME based on the template TPL" \ + " new t=T n=N in=APP Generate a module NAME based on the template TPL in APP" \ + " list-templates List available templates" + +# Bootstrap templates. + +define bs_appsrc +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]}, + {mod, {$p_app, []}}, + {env, []} +]}. +endef + +define bs_appsrc_lib +{application, $p, [ + {description, ""}, + {vsn, "0.1.0"}, + {id, "git"}, + {modules, []}, + {registered, []}, + {applications, [ + kernel, + stdlib + ]} +]}. +endef + +# To prevent autocompletion issues with ZSH, we add "include erlang.mk" +# separately during the actual bootstrap. +ifdef SP +define bs_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +# Whitespace to be used when creating files from templates. +SP = $(SP) + +endef +else +define bs_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +endef +endif + +define bs_apps_Makefile +PROJECT = $p +PROJECT_DESCRIPTION = New project +PROJECT_VERSION = 0.1.0 + +include $(call core_relpath,$(dir $(ERLANG_MK_FILENAME)),$(APPS_DIR)/app)/erlang.mk +endef + +define bs_app +-module($p_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + $p_sup:start_link(). + +stop(_State) -> + ok. +endef + +define bs_relx_config +{release, {$p_release, "1"}, [$p, sasl, runtime_tools]}. +{extended_start_script, true}. +{sys_config, "rel/sys.config"}. +{vm_args, "rel/vm.args"}. +endef + +define bs_sys_config +[ +]. +endef + +define bs_vm_args +-name $p@127.0.0.1 +-setcookie $p +-heart +endef + +# Normal templates. + +define tpl_supervisor +-module($(n)). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + Procs = [], + {ok, {{one_for_one, 1, 5}, Procs}}. +endef + +define tpl_gen_server +-module($(n)). +-behaviour(gen_server). + +%% API. +-export([start_link/0]). + +%% gen_server. +-export([init/1]). +-export([handle_call/3]). +-export([handle_cast/2]). +-export([handle_info/2]). +-export([terminate/2]). +-export([code_change/3]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_server:start_link(?MODULE, [], []). + +%% gen_server. + +init([]) -> + {ok, #state{}}. + +handle_call(_Request, _From, State) -> + {reply, ignored, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. +endef + +define tpl_module +-module($(n)). +-export([]). +endef + +define tpl_cowboy_http +-module($(n)). +-behaviour(cowboy_http_handler). + +-export([init/3]). +-export([handle/2]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {ok, Req, #state{}}. + +handle(Req, State=#state{}) -> + {ok, Req2} = cowboy_req:reply(200, Req), + {ok, Req2, State}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_gen_fsm +-module($(n)). +-behaviour(gen_fsm). + +%% API. +-export([start_link/0]). + +%% gen_fsm. +-export([init/1]). +-export([state_name/2]). +-export([handle_event/3]). +-export([state_name/3]). +-export([handle_sync_event/4]). +-export([handle_info/3]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_fsm:start_link(?MODULE, [], []). + +%% gen_fsm. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_Event, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_Event, StateName, StateData) -> + {next_state, StateName, StateData}. + +state_name(_Event, _From, StateData) -> + {reply, ignored, state_name, StateData}. + +handle_sync_event(_Event, _From, StateName, StateData) -> + {reply, ignored, StateName, StateData}. + +handle_info(_Info, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_gen_statem +-module($(n)). +-behaviour(gen_statem). + +%% API. +-export([start_link/0]). + +%% gen_statem. +-export([callback_mode/0]). +-export([init/1]). +-export([state_name/3]). +-export([handle_event/4]). +-export([terminate/3]). +-export([code_change/4]). + +-record(state, { +}). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + gen_statem:start_link(?MODULE, [], []). + +%% gen_statem. + +callback_mode() -> + state_functions. + +init([]) -> + {ok, state_name, #state{}}. + +state_name(_EventType, _EventData, StateData) -> + {next_state, state_name, StateData}. + +handle_event(_EventType, _EventData, StateName, StateData) -> + {next_state, StateName, StateData}. + +terminate(_Reason, _StateName, _StateData) -> + ok. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. +endef + +define tpl_cowboy_loop +-module($(n)). +-behaviour(cowboy_loop_handler). + +-export([init/3]). +-export([info/3]). +-export([terminate/3]). + +-record(state, { +}). + +init(_, Req, _Opts) -> + {loop, Req, #state{}, 5000, hibernate}. + +info(_Info, Req, State) -> + {loop, Req, State, hibernate}. + +terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_cowboy_rest +-module($(n)). + +-export([init/3]). +-export([content_types_provided/2]). +-export([get_html/2]). + +init(_, _Req, _Opts) -> + {upgrade, protocol, cowboy_rest}. + +content_types_provided(Req, State) -> + {[{{<<"text">>, <<"html">>, '*'}, get_html}], Req, State}. + +get_html(Req, State) -> + {<<"This is REST!">>, Req, State}. +endef + +define tpl_cowboy_ws +-module($(n)). +-behaviour(cowboy_websocket_handler). + +-export([init/3]). +-export([websocket_init/3]). +-export([websocket_handle/3]). +-export([websocket_info/3]). +-export([websocket_terminate/3]). + +-record(state, { +}). + +init(_, _, _) -> + {upgrade, protocol, cowboy_websocket}. + +websocket_init(_, Req, _Opts) -> + Req2 = cowboy_req:compact(Req), + {ok, Req2, #state{}}. + +websocket_handle({text, Data}, Req, State) -> + {reply, {text, Data}, Req, State}; +websocket_handle({binary, Data}, Req, State) -> + {reply, {binary, Data}, Req, State}; +websocket_handle(_Frame, Req, State) -> + {ok, Req, State}. + +websocket_info(_Info, Req, State) -> + {ok, Req, State}. + +websocket_terminate(_Reason, _Req, _State) -> + ok. +endef + +define tpl_ranch_protocol +-module($(n)). +-behaviour(ranch_protocol). + +-export([start_link/4]). +-export([init/4]). + +-type opts() :: []. +-export_type([opts/0]). + +-record(state, { + socket :: inet:socket(), + transport :: module() +}). + +start_link(Ref, Socket, Transport, Opts) -> + Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]), + {ok, Pid}. + +-spec init(ranch:ref(), inet:socket(), module(), opts()) -> ok. +init(Ref, Socket, Transport, _Opts) -> + ok = ranch:accept_ack(Ref), + loop(#state{socket=Socket, transport=Transport}). + +loop(State) -> + loop(State). +endef + +# Plugin-specific targets. + +define render_template + $(verbose) printf -- '$(subst $(newline),\n,$(subst %,%%,$(subst ','\'',$(subst $(tab),$(WS),$(call $(1))))))\n' > $(2) +endef + +ifndef WS +ifdef SP +WS = $(subst a,,a $(wordlist 1,$(SP),a a a a a a a a a a a a a a a a a a a a)) +else +WS = $(tab) +endif +endif + +bootstrap: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(eval n := $(PROJECT)_sup) + $(call render_template,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(call render_template,bs_appsrc,src/$(PROJECT).app.src) +endif + $(call render_template,bs_app,src/$(PROJECT)_app.erl) + $(call render_template,tpl_supervisor,src/$(PROJECT)_sup.erl) + +bootstrap-lib: +ifneq ($(wildcard src/),) + $(error Error: src/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(call render_template,bs_Makefile,Makefile) + $(verbose) echo "include erlang.mk" >> Makefile + $(verbose) mkdir src/ +ifdef LEGACY + $(call render_template,bs_appsrc_lib,src/$(PROJECT).app.src) +endif + +bootstrap-rel: +ifneq ($(wildcard relx.config),) + $(error Error: relx.config already exists) +endif +ifneq ($(wildcard rel/),) + $(error Error: rel/ directory already exists) +endif + $(eval p := $(PROJECT)) + $(call render_template,bs_relx_config,relx.config) + $(verbose) mkdir rel/ + $(call render_template,bs_sys_config,rel/sys.config) + $(call render_template,bs_vm_args,rel/vm.args) + +new-app: +ifndef in + $(error Usage: $(MAKE) new-app in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(eval n := $(in)_sup) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(call render_template,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(call render_template,bs_appsrc,$(APPS_DIR)/$p/src/$p.app.src) +endif + $(call render_template,bs_app,$(APPS_DIR)/$p/src/$p_app.erl) + $(call render_template,tpl_supervisor,$(APPS_DIR)/$p/src/$p_sup.erl) + +new-lib: +ifndef in + $(error Usage: $(MAKE) new-lib in=APP) +endif +ifneq ($(wildcard $(APPS_DIR)/$in),) + $(error Error: Application $in already exists) +endif + $(eval p := $(in)) + $(verbose) mkdir -p $(APPS_DIR)/$p/src/ + $(call render_template,bs_apps_Makefile,$(APPS_DIR)/$p/Makefile) +ifdef LEGACY + $(call render_template,bs_appsrc_lib,$(APPS_DIR)/$p/src/$p.app.src) +endif + +new: +ifeq ($(wildcard src/)$(in),) + $(error Error: src/ directory does not exist) +endif +ifndef t + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifndef n + $(error Usage: $(MAKE) new t=TEMPLATE n=NAME [in=APP]) +endif +ifdef in + $(call render_template,tpl_$(t),$(APPS_DIR)/$(in)/src/$(n).erl) +else + $(call render_template,tpl_$(t),src/$(n).erl) +endif + +list-templates: + $(verbose) @echo Available templates: + $(verbose) printf " %s\n" $(sort $(patsubst tpl_%,%,$(filter tpl_%,$(.VARIABLES)))) + +# Copyright (c) 2014-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: clean-c_src distclean-c_src-env + +# Configuration. + +C_SRC_DIR ?= $(CURDIR)/c_src +C_SRC_ENV ?= $(C_SRC_DIR)/env.mk +C_SRC_OUTPUT ?= $(CURDIR)/priv/$(PROJECT) +C_SRC_TYPE ?= shared + +# System type and C compiler/flags. + +ifeq ($(PLATFORM),msys2) + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= .exe + C_SRC_OUTPUT_SHARED_EXTENSION ?= .dll +else + C_SRC_OUTPUT_EXECUTABLE_EXTENSION ?= + C_SRC_OUTPUT_SHARED_EXTENSION ?= .so +endif + +ifeq ($(C_SRC_TYPE),shared) + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_SHARED_EXTENSION) +else + C_SRC_OUTPUT_FILE = $(C_SRC_OUTPUT)$(C_SRC_OUTPUT_EXECUTABLE_EXTENSION) +endif + +ifeq ($(PLATFORM),msys2) +# We hardcode the compiler used on MSYS2. The default CC=cc does +# not produce working code. The "gcc" MSYS2 package also doesn't. + CC = /mingw64/bin/gcc + export CC + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),darwin) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -arch x86_64 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -arch x86_64 -finline-functions -Wall + LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress +else ifeq ($(PLATFORM),freebsd) + CC ?= cc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +else ifeq ($(PLATFORM),linux) + CC ?= gcc + CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes + CXXFLAGS ?= -O3 -finline-functions -Wall +endif + +ifneq ($(PLATFORM),msys2) + CFLAGS += -fPIC + CXXFLAGS += -fPIC +endif + +CFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" +CXXFLAGS += -I"$(ERTS_INCLUDE_DIR)" -I"$(ERL_INTERFACE_INCLUDE_DIR)" + +LDLIBS += -L"$(ERL_INTERFACE_LIB_DIR)" -lerl_interface -lei + +# Verbosity. + +c_verbose_0 = @echo " C " $(?F); +c_verbose = $(c_verbose_$(V)) + +cpp_verbose_0 = @echo " CPP " $(?F); +cpp_verbose = $(cpp_verbose_$(V)) + +link_verbose_0 = @echo " LD " $(@F); +link_verbose = $(link_verbose_$(V)) + +# Targets. + +ifeq ($(wildcard $(C_SRC_DIR)),) +else ifneq ($(wildcard $(C_SRC_DIR)/Makefile),) +app:: app-c_src + +test-build:: app-c_src + +app-c_src: + $(MAKE) -C $(C_SRC_DIR) + +clean:: + $(MAKE) -C $(C_SRC_DIR) clean + +else + +ifeq ($(SOURCES),) +SOURCES := $(sort $(foreach pat,*.c *.C *.cc *.cpp,$(call core_find,$(C_SRC_DIR)/,$(pat)))) +endif +OBJECTS = $(addsuffix .o, $(basename $(SOURCES))) + +COMPILE_C = $(c_verbose) $(CC) $(CFLAGS) $(CPPFLAGS) -c +COMPILE_CPP = $(cpp_verbose) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c + +app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) + +$(C_SRC_OUTPUT_FILE): $(OBJECTS) + $(verbose) mkdir -p priv/ + $(link_verbose) $(CC) $(OBJECTS) \ + $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ + -o $(C_SRC_OUTPUT_FILE) + +%.o: %.c + $(COMPILE_C) $(OUTPUT_OPTION) $< + +%.o: %.cc + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.C + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +%.o: %.cpp + $(COMPILE_CPP) $(OUTPUT_OPTION) $< + +clean:: clean-c_src + +clean-c_src: + $(gen_verbose) rm -f $(C_SRC_OUTPUT_FILE) $(OBJECTS) + +endif + +ifneq ($(wildcard $(C_SRC_DIR)),) +$(C_SRC_ENV): + $(verbose) $(ERL) -eval "file:write_file(\"$(call core_native_path,$(C_SRC_ENV))\", \ + io_lib:format( \ + \"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \ + \"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \ + \"ERL_INTERFACE_LIB_DIR ?= ~s~n\", \ + [code:root_dir(), erlang:system_info(version), \ + code:lib_dir(erl_interface, include), \ + code:lib_dir(erl_interface, lib)])), \ + halt()." + +distclean:: distclean-c_src-env + +distclean-c_src-env: + $(gen_verbose) rm -f $(C_SRC_ENV) + +-include $(C_SRC_ENV) +endif + +# Templates. + +define bs_c_nif +#include "erl_nif.h" + +static int loads = 0; + +static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) +{ + /* Initialize private data. */ + *priv_data = NULL; + + loads++; + + return 0; +} + +static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info) +{ + /* Convert the private data to the new version. */ + *priv_data = *old_priv_data; + + loads++; + + return 0; +} + +static void unload(ErlNifEnv* env, void* priv_data) +{ + if (loads == 1) { + /* Destroy the private data. */ + } + + loads--; +} + +static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + if (enif_is_atom(env, argv[0])) { + return enif_make_tuple2(env, + enif_make_atom(env, "hello"), + argv[0]); + } + + return enif_make_tuple2(env, + enif_make_atom(env, "error"), + enif_make_atom(env, "badarg")); +} + +static ErlNifFunc nif_funcs[] = { + {"hello", 1, hello} +}; + +ERL_NIF_INIT($n, nif_funcs, load, NULL, upgrade, unload) +endef + +define bs_erl_nif +-module($n). + +-export([hello/1]). + +-on_load(on_load/0). +on_load() -> + PrivDir = case code:priv_dir(?MODULE) of + {error, _} -> + AppPath = filename:dirname(filename:dirname(code:which(?MODULE))), + filename:join(AppPath, "priv"); + Path -> + Path + end, + erlang:load_nif(filename:join(PrivDir, atom_to_list(?MODULE)), 0). + +hello(_) -> + erlang:nif_error({not_loaded, ?MODULE}). +endef + +new-nif: +ifneq ($(wildcard $(C_SRC_DIR)/$n.c),) + $(error Error: $(C_SRC_DIR)/$n.c already exists) +endif +ifneq ($(wildcard src/$n.erl),) + $(error Error: src/$n.erl already exists) +endif +ifdef in + $(verbose) $(MAKE) -C $(APPS_DIR)/$(in)/ new-nif n=$n in= +else + $(verbose) mkdir -p $(C_SRC_DIR) src/ + $(call render_template,bs_c_nif,$(C_SRC_DIR)/$n.c) + $(call render_template,bs_erl_nif,src/$n.erl) +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ci ci-prepare ci-setup + +CI_OTP ?= +CI_HIPE ?= +CI_ERLLVM ?= + +ifeq ($(CI_VM),native) +ERLC_OPTS += +native +TEST_ERLC_OPTS += +native +else ifeq ($(CI_VM),erllvm) +ERLC_OPTS += +native +'{hipe, [to_llvm]}' +TEST_ERLC_OPTS += +native +'{hipe, [to_llvm]}' +endif + +ifeq ($(strip $(CI_OTP) $(CI_HIPE) $(CI_ERLLVM)),) +ci:: +else + +ci:: $(addprefix ci-,$(CI_OTP) $(addsuffix -native,$(CI_HIPE)) $(addsuffix -erllvm,$(CI_ERLLVM))) + +ci-prepare: $(addprefix $(KERL_INSTALL_DIR)/,$(CI_OTP) $(addsuffix -native,$(CI_HIPE))) + +ci-setup:: + +ci-extra:: + +ci_verbose_0 = @echo " CI " $(1); +ci_verbose = $(ci_verbose_$(V)) + +define ci_target +ci-$1: $(KERL_INSTALL_DIR)/$2 + $(verbose) $(MAKE) --no-print-directory clean distclean-c_src-env + $(ci_verbose) \ + PATH="$(KERL_INSTALL_DIR)/$2/bin:$(PATH)" \ + CI_OTP_RELEASE="$1" \ + CT_OPTS="-label $1" \ + CI_VM="$3" \ + $(MAKE) ci-setup tests + $(verbose) $(MAKE) --no-print-directory ci-extra +endef + +$(foreach otp,$(CI_OTP),$(eval $(call ci_target,$(otp),$(otp),otp))) +$(foreach otp,$(CI_HIPE),$(eval $(call ci_target,$(otp)-native,$(otp)-native,native))) +$(foreach otp,$(CI_ERLLVM),$(eval $(call ci_target,$(otp)-erllvm,$(otp)-native,erllvm))) + +$(foreach otp,$(CI_OTP),$(eval $(call kerl_otp_target,$(otp)))) +$(foreach otp,$(sort $(CI_HIPE) $(CI_ERLLLVM)),$(eval $(call kerl_hipe_target,$(otp)))) + +help:: + $(verbose) printf "%s\n" "" \ + "Continuous Integration targets:" \ + " ci Run '$(MAKE) tests' on all configured Erlang versions." \ + "" \ + "The CI_OTP variable must be defined with the Erlang versions" \ + "that must be tested. For example: CI_OTP = OTP-17.3.4 OTP-17.5.3" + +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: ct apps-ct distclean-ct + +# Configuration. + +CT_OPTS ?= + +ifneq ($(wildcard $(TEST_DIR)),) +ifndef CT_SUITES +CT_SUITES := $(sort $(subst _SUITE.erl,,$(notdir $(call core_find,$(TEST_DIR)/,*_SUITE.erl)))) +endif +endif +CT_SUITES ?= +CT_LOGS_DIR ?= $(CURDIR)/logs + +# Core targets. + +tests:: ct + +distclean:: distclean-ct + +help:: + $(verbose) printf "%s\n" "" \ + "Common_test targets:" \ + " ct Run all the common_test suites for this project" \ + "" \ + "All your common_test suites have their associated targets." \ + "A suite named http_SUITE can be ran using the ct-http target." + +# Plugin-specific targets. + +CT_RUN = ct_run \ + -no_auto_compile \ + -noinput \ + -pa $(CURDIR)/ebin $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(TEST_DIR) \ + -dir $(TEST_DIR) \ + -logdir $(CT_LOGS_DIR) + +ifeq ($(CT_SUITES),) +ct: $(if $(IS_APP),,apps-ct) +else +# We do not run tests if we are in an apps/* with no test directory. +ifneq ($(IS_APP)$(wildcard $(TEST_DIR)),1) +ct: test-build $(if $(IS_APP),,apps-ct) + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(CT_SUITES)) $(CT_OPTS) +endif +endif + +ifneq ($(ALL_APPS_DIRS),) +define ct_app_target +apps-ct-$1: + $(MAKE) -C $1 ct IS_APP=1 +endef + +$(foreach app,$(ALL_APPS_DIRS),$(eval $(call ct_app_target,$(app)))) + +apps-ct: test-build $(addprefix apps-ct-,$(ALL_APPS_DIRS)) +endif + +ifndef t +CT_EXTRA = +else +ifeq (,$(findstring :,$t)) +CT_EXTRA = -group $t +else +t_words = $(subst :, ,$t) +CT_EXTRA = -group $(firstword $(t_words)) -case $(lastword $(t_words)) +endif +endif + +define ct_suite_target +ct-$(1): test-build + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(gen_verbose) $(CT_RUN) -sname ct_$(PROJECT) -suite $(addsuffix _SUITE,$(1)) $(CT_EXTRA) $(CT_OPTS) +endef + +$(foreach test,$(CT_SUITES),$(eval $(call ct_suite_target,$(test)))) + +distclean-ct: + $(gen_verbose) rm -rf $(CT_LOGS_DIR) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: plt distclean-plt dialyze + +# Configuration. + +DIALYZER_PLT ?= $(CURDIR)/.$(PROJECT).plt +export DIALYZER_PLT + +PLT_APPS ?= +DIALYZER_DIRS ?= --src -r $(wildcard src) $(ALL_APPS_DIRS) +DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs +DIALYZER_PLT_OPTS ?= + +# Core targets. + +check:: dialyze + +distclean:: distclean-plt + +help:: + $(verbose) printf "%s\n" "" \ + "Dialyzer targets:" \ + " plt Build a PLT file for this project" \ + " dialyze Analyze the project using Dialyzer" + +# Plugin-specific targets. + +define filter_opts.erl + Opts = init:get_plain_arguments(), + {Filtered, _} = lists:foldl(fun + (O, {Os, true}) -> {[O|Os], false}; + (O = "-D", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$D, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-I", {Os, _}) -> {[O|Os], true}; + (O = [\\$$-, \\$$I, _ | _], {Os, _}) -> {[O|Os], false}; + (O = "-pa", {Os, _}) -> {[O|Os], true}; + (_, Acc) -> Acc + end, {[], false}, Opts), + io:format("~s~n", [string:join(lists:reverse(Filtered), " ")]), + halt(). +endef + +$(DIALYZER_PLT): deps app + $(eval DEPS_LOG := $(shell test -f $(ERLANG_MK_TMP)/deps.log && \ + while read p; do test -d $$p/ebin && echo $$p/ebin; done <$(ERLANG_MK_TMP)/deps.log)) + $(verbose) dialyzer --build_plt $(DIALYZER_PLT_OPTS) --apps \ + erts kernel stdlib $(PLT_APPS) $(OTP_DEPS) $(LOCAL_DEPS) $(DEPS_LOG) || test $$? -eq 2 + +plt: $(DIALYZER_PLT) + +distclean-plt: + $(gen_verbose) rm -f $(DIALYZER_PLT) + +ifneq ($(wildcard $(DIALYZER_PLT)),) +dialyze: +else +dialyze: $(DIALYZER_PLT) +endif + $(verbose) dialyzer --no_native `$(ERL) -eval "$(subst $(newline),,$(call escape_dquotes,$(call filter_opts.erl)))" -extra $(ERLC_OPTS)` $(DIALYZER_DIRS) $(DIALYZER_OPTS) + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-edoc edoc + +# Configuration. + +EDOC_OPTS ?= +EDOC_SRC_DIRS ?= +EDOC_OUTPUT ?= doc + +define edoc.erl + SrcPaths = lists:foldl(fun(P, Acc) -> + filelib:wildcard(atom_to_list(P) ++ "/{src,c_src}") ++ Acc + end, [], [$(call comma_list,$(patsubst %,'%',$(EDOC_SRC_DIRS)))]), + DefaultOpts = [{dir, "$(EDOC_OUTPUT)"}, {source_path, SrcPaths}, {subpackages, false}], + edoc:application($(1), ".", [$(2)] ++ DefaultOpts), + halt(0). +endef + +# Core targets. + +ifneq ($(strip $(EDOC_SRC_DIRS)$(wildcard doc/overview.edoc)),) +docs:: edoc +endif + +distclean:: distclean-edoc + +# Plugin-specific targets. + +edoc: distclean-edoc doc-deps + $(gen_verbose) $(call erlang,$(call edoc.erl,$(PROJECT),$(EDOC_OPTS))) + +distclean-edoc: + $(gen_verbose) rm -f $(EDOC_OUTPUT)/*.css $(EDOC_OUTPUT)/*.html $(EDOC_OUTPUT)/*.png $(EDOC_OUTPUT)/edoc-info + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Configuration. + +DTL_FULL_PATH ?= +DTL_PATH ?= templates/ +DTL_SUFFIX ?= _dtl +DTL_OPTS ?= + +# Verbosity. + +dtl_verbose_0 = @echo " DTL " $(filter %.dtl,$(?F)); +dtl_verbose = $(dtl_verbose_$(V)) + +# Core targets. + +DTL_PATH := $(abspath $(DTL_PATH)) +DTL_FILES := $(sort $(call core_find,$(DTL_PATH),*.dtl)) + +ifneq ($(DTL_FILES),) + +DTL_NAMES = $(addsuffix $(DTL_SUFFIX),$(DTL_FILES:$(DTL_PATH)/%.dtl=%)) +DTL_MODULES = $(if $(DTL_FULL_PATH),$(subst /,_,$(DTL_NAMES)),$(notdir $(DTL_NAMES))) +BEAM_FILES += $(addsuffix .beam,$(addprefix ebin/,$(DTL_MODULES))) + +ifneq ($(words $(DTL_FILES)),0) +# Rebuild templates when the Makefile changes. +$(ERLANG_MK_TMP)/last-makefile-change-erlydtl: $(MAKEFILE_LIST) + @mkdir -p $(ERLANG_MK_TMP) + @if test -f $@; then \ + touch $(DTL_FILES); \ + fi + @touch $@ + +ebin/$(PROJECT).app:: $(ERLANG_MK_TMP)/last-makefile-change-erlydtl +endif + +define erlydtl_compile.erl + [begin + Module0 = case "$(strip $(DTL_FULL_PATH))" of + "" -> + filename:basename(F, ".dtl"); + _ -> + "$(DTL_PATH)/" ++ F2 = filename:rootname(F, ".dtl"), + re:replace(F2, "/", "_", [{return, list}, global]) + end, + Module = list_to_atom(string:to_lower(Module0) ++ "$(DTL_SUFFIX)"), + case erlydtl:compile(F, Module, [$(DTL_OPTS)] ++ [{out_dir, "ebin/"}, return_errors]) of + ok -> ok; + {ok, _} -> ok + end + end || F <- string:tokens("$(1)", " ")], + halt(). +endef + +ebin/$(PROJECT).app:: $(DTL_FILES) | ebin/ + $(if $(strip $?),\ + $(dtl_verbose) $(call erlang,$(call erlydtl_compile.erl,$(call core_native_path,$?)),\ + -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/)) + +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2014, Dave Cottlehuber +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-escript escript escript-zip + +# Configuration. + +ESCRIPT_NAME ?= $(PROJECT) +ESCRIPT_FILE ?= $(ESCRIPT_NAME) + +ESCRIPT_SHEBANG ?= /usr/bin/env escript +ESCRIPT_COMMENT ?= This is an -*- erlang -*- file +ESCRIPT_EMU_ARGS ?= -escript main $(ESCRIPT_NAME) + +ESCRIPT_ZIP ?= 7z a -tzip -mx=9 -mtc=off $(if $(filter-out 0,$(V)),,> /dev/null) +ESCRIPT_ZIP_FILE ?= $(ERLANG_MK_TMP)/escript.zip + +# Core targets. + +distclean:: distclean-escript + +help:: + $(verbose) printf "%s\n" "" \ + "Escript targets:" \ + " escript Build an executable escript archive" \ + +# Plugin-specific targets. + +escript-zip:: deps app + $(verbose) mkdir -p $(dir $(ESCRIPT_ZIP)) + $(verbose) rm -f $(ESCRIPT_ZIP_FILE) + $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(PROJECT)/ebin/* +ifneq ($(DEPS),) + $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) \ + `cat $(ERLANG_MK_TMP)/deps.log | sed 's/^$(subst /,\/,$(DEPS_DIR))\///' | sed 's/$$/\/ebin\/\*/'` +endif + +escript:: escript-zip + $(gen_verbose) printf "%s\n" \ + "#!$(ESCRIPT_SHEBANG)" \ + "%% $(ESCRIPT_COMMENT)" \ + "%%! $(ESCRIPT_EMU_ARGS)" > $(ESCRIPT_FILE) + $(verbose) cat $(ESCRIPT_ZIP_FILE) >> $(ESCRIPT_FILE) + $(verbose) chmod +x $(ESCRIPT_FILE) + +distclean-escript: + $(gen_verbose) rm -f $(ESCRIPT_FILE) + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, Enrique Fernandez +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: eunit apps-eunit + +# Configuration + +EUNIT_OPTS ?= +EUNIT_ERL_OPTS ?= + +# Core targets. + +tests:: eunit + +help:: + $(verbose) printf "%s\n" "" \ + "EUnit targets:" \ + " eunit Run all the EUnit tests for this project" + +# Plugin-specific targets. + +define eunit.erl + Enabled = case "$(COVER)" of + "" -> false; + _ -> + case filelib:is_dir("ebin") of + false -> false; + true -> + case cover:compile_beam_directory("ebin") of + {error, _} -> halt(1); + _ -> true + end + end + end, + case eunit:test($1, [$(EUNIT_OPTS)]) of + ok -> ok; + error -> halt(2) + end, + case {Enabled, "$(COVER)"} of + {false, _} -> ok; + {_, ""} -> ok; + _ -> + cover:export("$(COVER_DATA_DIR)/eunit.coverdata") + end, + halt() +endef + +EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(CURDIR)/ebin + +ifdef t +ifeq (,$(findstring :,$(t))) +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS)) +else +eunit: test-build cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS)) +endif +else +EUNIT_EBIN_MODS = $(notdir $(basename $(ERL_FILES) $(BEAM_FILES))) +EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl))) + +EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \ + $(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)') + +eunit: test-build $(if $(IS_APP),,apps-eunit) cover-data-dir + $(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS)) + +ifneq ($(ALL_APPS_DIRS),) +apps-eunit: + $(verbose) eunit_retcode=0 ; for app in $(ALL_APPS_DIRS); do $(MAKE) -C $$app eunit IS_APP=1; \ + [ $$? -ne 0 ] && eunit_retcode=1 ; done ; \ + exit $$eunit_retcode +endif +endif + +# Copyright (c) 2015-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter proper,$(DEPS) $(TEST_DEPS)),proper) +.PHONY: proper + +# Targets. + +tests:: proper + +define proper_check.erl + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + Module = fun(M) -> + [true] =:= lists:usort([ + case atom_to_list(F) of + "prop_" ++ _ -> + io:format("Testing ~p:~p/0~n", [M, F]), + proper:quickcheck(M:F(), nocolors); + _ -> + true + end + || {F, 0} <- M:module_info(exports)]) + end, + try + case $(1) of + all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]); + module -> Module($(2)); + function -> proper:quickcheck($(2), nocolors) + end + of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +proper: test-build + $(verbose) $(call erlang,$(call proper_check.erl,module,$(t))) +else +proper: test-build + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call proper_check.erl,function,$(t)())) +endif +else +proper: test-build + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call proper_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2013-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: relx-rel relx-relup distclean-relx-rel run + +# Configuration. + +RELX ?= $(ERLANG_MK_TMP)/relx +RELX_CONFIG ?= $(CURDIR)/relx.config + +RELX_URL ?= https://erlang.mk/res/relx-v3.26.0 +RELX_OPTS ?= +RELX_OUTPUT_DIR ?= _rel +RELX_REL_EXT ?= +RELX_TAR ?= 1 + +ifdef SFX + RELX_TAR = 1 +endif + +ifeq ($(firstword $(RELX_OPTS)),-o) + RELX_OUTPUT_DIR = $(word 2,$(RELX_OPTS)) +else + RELX_OPTS += -o $(RELX_OUTPUT_DIR) +endif + +# Core targets. + +ifeq ($(IS_DEP),) +ifneq ($(wildcard $(RELX_CONFIG)),) +rel:: relx-rel + +relup:: relx-relup +endif +endif + +distclean:: distclean-relx-rel + +# Plugin-specific targets. + +$(RELX): + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(gen_verbose) $(call core_http_get,$(RELX),$(RELX_URL)) + $(verbose) chmod +x $(RELX) + +relx-rel: $(RELX) rel-deps app + $(verbose) $(RELX) -c $(RELX_CONFIG) $(RELX_OPTS) release $(if $(filter 1,$(RELX_TAR)),tar) + +relx-relup: $(RELX) rel-deps app + $(verbose) $(RELX) -c $(RELX_CONFIG) $(RELX_OPTS) release relup $(if $(filter 1,$(RELX_TAR)),tar) + +distclean-relx-rel: + $(gen_verbose) rm -rf $(RELX_OUTPUT_DIR) + +# Run target. + +ifeq ($(wildcard $(RELX_CONFIG)),) +run:: +else + +define get_relx_release.erl + {ok, Config} = file:consult("$(call core_native_path,$(RELX_CONFIG))"), + {release, {Name, Vsn0}, _} = lists:keyfind(release, 1, Config), + Vsn = case Vsn0 of + {cmd, Cmd} -> os:cmd(Cmd); + semver -> ""; + {semver, _} -> ""; + VsnStr -> Vsn0 + end, + io:format("~s ~s", [Name, Vsn]), + halt(0). +endef + +RELX_REL := $(shell $(call erlang,$(get_relx_release.erl))) +RELX_REL_NAME := $(word 1,$(RELX_REL)) +RELX_REL_VSN := $(word 2,$(RELX_REL)) + +ifeq ($(PLATFORM),msys2) +RELX_REL_EXT := .cmd +endif + +run:: all + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) console + +ifdef RELOAD +rel:: + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) ping + $(verbose) $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/bin/$(RELX_REL_NAME)$(RELX_REL_EXT) \ + eval "io:format(\"~p~n\", [c:lm()])" +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Relx targets:" \ + " run Compile the project, build the release and run it" + +endif + +# Copyright (c) 2015-2016, Loïc Hoguin +# Copyright (c) 2014, M Robert Martin +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: shell + +# Configuration. + +SHELL_ERL ?= erl +SHELL_PATHS ?= $(CURDIR)/ebin $(APPS_DIR)/*/ebin $(DEPS_DIR)/*/ebin $(TEST_DIR) +SHELL_OPTS ?= + +ALL_SHELL_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(SHELL_DEPS)) + +# Core targets + +help:: + $(verbose) printf "%s\n" "" \ + "Shell targets:" \ + " shell Run an erlang shell with SHELL_OPTS or reasonable default" + +# Plugin-specific targets. + +$(foreach dep,$(SHELL_DEPS),$(eval $(call dep_target,$(dep)))) + +build-shell-deps: $(ALL_SHELL_DEPS_DIRS) + $(verbose) set -e; for dep in $(ALL_SHELL_DEPS_DIRS) ; do $(MAKE) -C $$dep ; done + +shell: build-shell-deps + $(gen_verbose) $(SHELL_ERL) -pa $(SHELL_PATHS) $(SHELL_OPTS) + +# Copyright 2017, Stanislaw Klekot +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: distclean-sphinx sphinx + +# Configuration. + +SPHINX_BUILD ?= sphinx-build +SPHINX_SOURCE ?= doc +SPHINX_CONFDIR ?= +SPHINX_FORMATS ?= html +SPHINX_DOCTREES ?= $(ERLANG_MK_TMP)/sphinx.doctrees +SPHINX_OPTS ?= + +#sphinx_html_opts = +#sphinx_html_output = html +#sphinx_man_opts = +#sphinx_man_output = man +#sphinx_latex_opts = +#sphinx_latex_output = latex + +# Helpers. + +sphinx_build_0 = @echo " SPHINX" $1; $(SPHINX_BUILD) -N -q +sphinx_build_1 = $(SPHINX_BUILD) -N +sphinx_build_2 = set -x; $(SPHINX_BUILD) +sphinx_build = $(sphinx_build_$(V)) + +define sphinx.build +$(call sphinx_build,$1) -b $1 -d $(SPHINX_DOCTREES) $(if $(SPHINX_CONFDIR),-c $(SPHINX_CONFDIR)) $(SPHINX_OPTS) $(sphinx_$1_opts) -- $(SPHINX_SOURCE) $(call sphinx.output,$1) + +endef + +define sphinx.output +$(if $(sphinx_$1_output),$(sphinx_$1_output),$1) +endef + +# Targets. + +ifneq ($(wildcard $(if $(SPHINX_CONFDIR),$(SPHINX_CONFDIR),$(SPHINX_SOURCE))/conf.py),) +docs:: sphinx +distclean:: distclean-sphinx +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Sphinx targets:" \ + " sphinx Generate Sphinx documentation." \ + "" \ + "ReST sources and 'conf.py' file are expected in directory pointed by" \ + "SPHINX_SOURCE ('doc' by default). SPHINX_FORMATS lists formats to build (only" \ + "'html' format is generated by default); target directory can be specified by" \ + 'setting sphinx_$${format}_output, for example: sphinx_html_output = output/html' \ + "Additional Sphinx options can be set in SPHINX_OPTS." + +# Plugin-specific targets. + +sphinx: + $(foreach F,$(SPHINX_FORMATS),$(call sphinx.build,$F)) + +distclean-sphinx: + $(gen_verbose) rm -rf $(filter-out $(SPHINX_SOURCE),$(foreach F,$(SPHINX_FORMATS),$(call sphinx.output,$F))) + +# Copyright (c) 2017, Jean-Sébastien Pédron +# This file is contributed to erlang.mk and subject to the terms of the ISC License. + +.PHONY: show-ERL_LIBS show-ERLC_OPTS show-TEST_ERLC_OPTS + +show-ERL_LIBS: + @echo $(ERL_LIBS) + +show-ERLC_OPTS: + @$(foreach opt,$(ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +show-TEST_ERLC_OPTS: + @$(foreach opt,$(TEST_ERLC_OPTS) -pa ebin -I include,echo "$(opt)";) + +# Copyright (c) 2015-2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +ifeq ($(filter triq,$(DEPS) $(TEST_DEPS)),triq) +.PHONY: triq + +# Targets. + +tests:: triq + +define triq_check.erl + code:add_pathsa([ + "$(call core_native_path,$(CURDIR)/ebin)", + "$(call core_native_path,$(DEPS_DIR)/*/ebin)", + "$(call core_native_path,$(TEST_DIR))"]), + try + case $(1) of + all -> [true] =:= lists:usort([triq:check(M) || M <- [$(call comma_list,$(3))]]); + module -> triq:check($(2)); + function -> triq:check($(2)) + end + of + true -> halt(0); + _ -> halt(1) + catch error:undef -> + io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]), + halt(0) + end. +endef + +ifdef t +ifeq (,$(findstring :,$(t))) +triq: test-build + $(verbose) $(call erlang,$(call triq_check.erl,module,$(t))) +else +triq: test-build + $(verbose) echo Testing $(t)/0 + $(verbose) $(call erlang,$(call triq_check.erl,function,$(t)())) +endif +else +triq: test-build + $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \ + $(wildcard ebin/*.beam) $(call core_find,$(TEST_DIR)/,*.beam)))))) + $(gen_verbose) $(call erlang,$(call triq_check.erl,all,undefined,$(MODULES))) +endif +endif + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Erlang Solutions Ltd. +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: xref distclean-xref + +# Configuration. + +ifeq ($(XREF_CONFIG),) + XREFR_ARGS := +else + XREFR_ARGS := -c $(XREF_CONFIG) +endif + +XREFR ?= $(CURDIR)/xrefr +export XREFR + +XREFR_URL ?= https://github.com/inaka/xref_runner/releases/download/1.1.0/xrefr + +# Core targets. + +help:: + $(verbose) printf '%s\n' '' \ + 'Xref targets:' \ + ' xref Run Xrefr using $$XREF_CONFIG as config file if defined' + +distclean:: distclean-xref + +# Plugin-specific targets. + +$(XREFR): + $(gen_verbose) $(call core_http_get,$(XREFR),$(XREFR_URL)) + $(verbose) chmod +x $(XREFR) + +xref: deps app $(XREFR) + $(gen_verbose) $(XREFR) $(XREFR_ARGS) + +distclean-xref: + $(gen_verbose) rm -rf $(XREFR) + +# Copyright (c) 2016, Loïc Hoguin +# Copyright (c) 2015, Viktor Söderqvist +# This file is part of erlang.mk and subject to the terms of the ISC License. + +COVER_REPORT_DIR ?= cover +COVER_DATA_DIR ?= $(CURDIR) + +# Hook in coverage to ct + +ifdef COVER +ifdef CT_RUN +ifneq ($(wildcard $(TEST_DIR)),) +test-build:: $(TEST_DIR)/ct.cover.spec + +$(TEST_DIR)/ct.cover.spec: cover-data-dir + $(gen_verbose) printf "%s\n" \ + "{incl_app, '$(PROJECT)', details}." \ + '{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@ + +CT_RUN += -cover $(TEST_DIR)/ct.cover.spec +endif +endif +endif + +# Core targets + +ifdef COVER +ifneq ($(COVER_REPORT_DIR),) +tests:: + $(verbose) $(MAKE) --no-print-directory cover-report +endif + +cover-data-dir: | $(COVER_DATA_DIR) + +$(COVER_DATA_DIR): + $(verbose) mkdir -p $(COVER_DATA_DIR) +else +cover-data-dir: +endif + +clean:: coverdata-clean + +ifneq ($(COVER_REPORT_DIR),) +distclean:: cover-report-clean +endif + +help:: + $(verbose) printf "%s\n" "" \ + "Cover targets:" \ + " cover-report Generate a HTML coverage report from previously collected" \ + " cover data." \ + " all.coverdata Merge all coverdata files into all.coverdata." \ + "" \ + "If COVER=1 is set, coverage data is generated by the targets eunit and ct. The" \ + "target tests additionally generates a HTML coverage report from the combined" \ + "coverdata files from each of these testing tools. HTML reports can be disabled" \ + "by setting COVER_REPORT_DIR to empty." + +# Plugin specific targets + +COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata)) + +.PHONY: coverdata-clean +coverdata-clean: + $(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec + +# Merge all coverdata files into one. +define cover_export.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + cover:export("$(COVER_DATA_DIR)/$@"), halt(0). +endef + +all.coverdata: $(COVERDATA) cover-data-dir + $(gen_verbose) $(call erlang,$(cover_export.erl)) + +# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to +# empty if you want the coverdata files but not the HTML report. +ifneq ($(COVER_REPORT_DIR),) + +.PHONY: cover-report-clean cover-report + +cover-report-clean: + $(gen_verbose) rm -rf $(COVER_REPORT_DIR) + $(if $(shell ls -A $(COVER_DATA_DIR)/),,$(verbose) rmdir $(COVER_DATA_DIR)) + +ifeq ($(COVERDATA),) +cover-report: +else + +# Modules which include eunit.hrl always contain one line without coverage +# because eunit defines test/0 which is never called. We compensate for this. +EUNIT_HRL_MODS = $(subst $(space),$(comma),$(shell \ + grep -H -e '^\s*-include.*include/eunit\.hrl"' src/*.erl \ + | sed "s/^src\/\(.*\)\.erl:.*/'\1'/" | uniq)) + +define cover_report.erl + $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) + Ms = cover:imported_modules(), + [cover:analyse_to_file(M, "$(COVER_REPORT_DIR)/" ++ atom_to_list(M) + ++ ".COVER.html", [html]) || M <- Ms], + Report = [begin {ok, R} = cover:analyse(M, module), R end || M <- Ms], + EunitHrlMods = [$(EUNIT_HRL_MODS)], + Report1 = [{M, {Y, case lists:member(M, EunitHrlMods) of + true -> N - 1; false -> N end}} || {M, {Y, N}} <- Report], + TotalY = lists:sum([Y || {_, {Y, _}} <- Report1]), + TotalN = lists:sum([N || {_, {_, N}} <- Report1]), + Perc = fun(Y, N) -> case Y + N of 0 -> 100; S -> round(100 * Y / S) end end, + TotalPerc = Perc(TotalY, TotalN), + {ok, F} = file:open("$(COVER_REPORT_DIR)/index.html", [write]), + io:format(F, "~n" + "~n" + "Coverage report~n" + "~n", []), + io:format(F, "

Coverage

~n

Total: ~p%

~n", [TotalPerc]), + io:format(F, "~n", []), + [io:format(F, "" + "~n", + [M, M, Perc(Y, N)]) || {M, {Y, N}} <- Report1], + How = "$(subst $(space),$(comma)$(space),$(basename $(COVERDATA)))", + Date = "$(shell date -u "+%Y-%m-%dT%H:%M:%SZ")", + io:format(F, "
ModuleCoverage
~p~p%
~n" + "

Generated using ~s and erlang.mk on ~s.

~n" + "", [How, Date]), + halt(). +endef + +cover-report: + $(verbose) mkdir -p $(COVER_REPORT_DIR) + $(gen_verbose) $(call erlang,$(cover_report.erl)) + +endif +endif # ifneq ($(COVER_REPORT_DIR),) + +# Copyright (c) 2016, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +.PHONY: sfx + +ifdef RELX_REL +ifdef SFX + +# Configuration. + +SFX_ARCHIVE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME)/$(RELX_REL_NAME)-$(RELX_REL_VSN).tar.gz +SFX_OUTPUT_FILE ?= $(RELX_OUTPUT_DIR)/$(RELX_REL_NAME).run + +# Core targets. + +rel:: sfx + +# Plugin-specific targets. + +define sfx_stub +#!/bin/sh + +TMPDIR=`mktemp -d` +ARCHIVE=`awk '/^__ARCHIVE_BELOW__$$/ {print NR + 1; exit 0;}' $$0` +FILENAME=$$(basename $$0) +REL=$${FILENAME%.*} + +tail -n+$$ARCHIVE $$0 | tar -xzf - -C $$TMPDIR + +$$TMPDIR/bin/$$REL console +RET=$$? + +rm -rf $$TMPDIR + +exit $$RET + +__ARCHIVE_BELOW__ +endef + +sfx: + $(call render_template,sfx_stub,$(SFX_OUTPUT_FILE)) + $(gen_verbose) cat $(SFX_ARCHIVE) >> $(SFX_OUTPUT_FILE) + $(verbose) chmod +x $(SFX_OUTPUT_FILE) + +endif +endif + +# Copyright (c) 2013-2017, Loïc Hoguin +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# External plugins. + +DEP_PLUGINS ?= + +$(foreach p,$(DEP_PLUGINS),\ + $(eval $(if $(findstring /,$p),\ + $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ + $(call core_dep_plugin,$p/plugins.mk,$p)))) + +# Copyright (c) 2013-2015, Loïc Hoguin +# Copyright (c) 2015-2016, Jean-Sébastien Pédron +# This file is part of erlang.mk and subject to the terms of the ISC License. + +# Fetch dependencies recursively (without building them). + +.PHONY: fetch-deps fetch-doc-deps fetch-rel-deps fetch-test-deps \ + fetch-shell-deps + +.PHONY: $(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +fetch-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +fetch-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +fetch-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +fetch-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +fetch-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +ifneq ($(SKIP_DEPS),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): + $(verbose) :> $@ +else +# By default, we fetch "normal" dependencies. They are also included no +# matter the type of requested dependencies. +# +# $(ALL_DEPS_DIRS) includes $(BUILD_DEPS). + +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_DOC_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_REL_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_TEST_DEPS_DIRS) +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): $(ALL_DEPS_DIRS) $(ALL_SHELL_DEPS_DIRS) + +# Allow to use fetch-deps and $(DEP_TYPES) to fetch multiple types of +# dependencies with a single target. +ifneq ($(filter doc,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_DOC_DEPS_DIRS) +endif +ifneq ($(filter rel,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_REL_DEPS_DIRS) +endif +ifneq ($(filter test,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_TEST_DEPS_DIRS) +endif +ifneq ($(filter shell,$(DEP_TYPES)),) +$(ERLANG_MK_RECURSIVE_DEPS_LIST): $(ALL_SHELL_DEPS_DIRS) +endif + +ERLANG_MK_RECURSIVE_TMP_LIST := $(abspath $(ERLANG_MK_TMP)/recursive-tmp-deps.log) + +$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ +$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST): +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) mkdir -p $(ERLANG_MK_TMP) + $(verbose) rm -f $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +ifndef IS_APP + $(verbose) set -e; for dep in $(ALL_APPS_DIRS) ; do \ + $(MAKE) -C $$dep $@ \ + IS_APP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + done +endif + $(verbose) set -e; for dep in $^ ; do \ + if ! grep -qs ^$$dep$$ $(ERLANG_MK_RECURSIVE_TMP_LIST); then \ + echo $$dep >> $(ERLANG_MK_RECURSIVE_TMP_LIST); \ + if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \ + $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \ + $(MAKE) -C $$dep fetch-deps \ + IS_DEP=1 \ + ERLANG_MK_RECURSIVE_TMP_LIST=$(ERLANG_MK_RECURSIVE_TMP_LIST); \ + fi \ + fi \ + done +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) sort < $(ERLANG_MK_RECURSIVE_TMP_LIST) | uniq > $@ + $(verbose) rm $(ERLANG_MK_RECURSIVE_TMP_LIST) +endif +endif # ifneq ($(SKIP_DEPS),) + +# List dependencies recursively. + +.PHONY: list-deps list-doc-deps list-rel-deps list-test-deps \ + list-shell-deps + +list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST) +list-doc-deps: $(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST) +list-rel-deps: $(ERLANG_MK_RECURSIVE_REL_DEPS_LIST) +list-test-deps: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) +list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) + +list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: + $(verbose) cat $^ diff --git a/deps/gun/rebar.config b/deps/gun/rebar.config new file mode 100644 index 0000000..347417f --- /dev/null +++ b/deps/gun/rebar.config @@ -0,0 +1,4 @@ +{deps, [ +{cowlib,".*",{git,"https://github.com/ninenines/cowlib","2.6.0"}} +]}. +{erl_opts, [debug_info,warn_export_vars,warn_shadow_vars,warn_obsolete_guard]}. diff --git a/deps/gun/src/gun.app.src b/deps/gun/src/gun.app.src new file mode 100644 index 0000000..81886a8 --- /dev/null +++ b/deps/gun/src/gun.app.src @@ -0,0 +1,8 @@ +{application,gun, + [{description,"HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP."}, + {vsn,"1.3.2"}, + {modules,[]}, + {registered,[gun_sup]}, + {applications,[kernel,stdlib,ssl,cowlib]}, + {mod,{gun_app,[]}}, + {env,[]}]}. diff --git a/deps/gun/src/gun.erl b/deps/gun/src/gun.erl new file mode 100644 index 0000000..1659ee3 --- /dev/null +++ b/deps/gun/src/gun.erl @@ -0,0 +1,980 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun). + +-ifdef(OTP_RELEASE). +-compile({nowarn_deprecated_function, [{erlang, get_stacktrace, 0}]}). +-endif. + +%% Connection. +-export([open/2]). +-export([open/3]). +-export([open_unix/2]). +-export([info/1]). +-export([close/1]). +-export([shutdown/1]). + +%% Requests. +-export([delete/2]). +-export([delete/3]). +-export([delete/4]). +-export([get/2]). +-export([get/3]). +-export([get/4]). +-export([head/2]). +-export([head/3]). +-export([head/4]). +-export([options/2]). +-export([options/3]). +-export([options/4]). +-export([patch/3]). +-export([patch/4]). +-export([patch/5]). +-export([post/3]). +-export([post/4]). +-export([post/5]). +-export([put/3]). +-export([put/4]). +-export([put/5]). +-export([request/4]). +-export([request/5]). +-export([request/6]). + +%% Streaming data. +-export([data/4]). + +%% Tunneling. +-export([connect/2]). +-export([connect/3]). +-export([connect/4]). + +%% Awaiting gun messages. +-export([await/2]). +-export([await/3]). +-export([await/4]). +-export([await_body/2]). +-export([await_body/3]). +-export([await_body/4]). +-export([await_up/1]). +-export([await_up/2]). +-export([await_up/3]). + +%% Flushing gun messages. +-export([flush/1]). + +%% Cancelling a stream. +-export([cancel/2]). + +%% Websocket. +-export([ws_upgrade/2]). +-export([ws_upgrade/3]). +-export([ws_upgrade/4]). +-export([ws_send/2]). + +%% Internals. +-export([start_link/4]). +-export([proc_lib_hack/5]). +-export([system_continue/3]). +-export([system_terminate/4]). +-export([system_code_change/4]). + +-type headers() :: [{binary(), iodata()}]. + +-type ws_close_code() :: 1000..4999. +-type ws_frame() :: close | ping | pong + | {text | binary | close | ping | pong, iodata()} + | {close, ws_close_code(), iodata()}. + +-type opts() :: #{ + connect_timeout => timeout(), + http_opts => http_opts(), + http2_opts => http2_opts(), + protocols => [http | http2], + retry => non_neg_integer(), + retry_timeout => pos_integer(), + trace => boolean(), + transport => tcp | tls | ssl, + transport_opts => [gen_tcp:connect_option()] | [ssl:connect_option()], + ws_opts => ws_opts() +}. +-export_type([opts/0]). +%% @todo Add an option to disable/enable the notowner behavior. + +-type connect_destination() :: #{ + host := inet:hostname() | inet:ip_address(), + port := inet:port_number(), + username => iodata(), + password => iodata(), + protocol => http | http2, %% @todo Remove in Gun 2.0. + protocols => [http | http2], + transport => tcp | tls, + tls_opts => [ssl:connect_option()], + tls_handshake_timeout => timeout() +}. +-export_type([connect_destination/0]). + +-type intermediary() :: #{ + type := connect, + host := inet:hostname() | inet:ip_address(), + port := inet:port_number(), + transport := tcp | tls, + protocol := http | http2 +}. + +%% @todo When/if HTTP/2 CONNECT gets implemented, we will want an option here +%% to indicate that the request must be sent on an existing CONNECT stream. +%% This is of course not required for HTTP/1.1 since the CONNECT takes over +%% the entire connection. +-type req_opts() :: #{ + reply_to => pid() +}. +-export_type([req_opts/0]). + +-type http_opts() :: #{ + keepalive => timeout(), + transform_header_name => fun((binary()) -> binary()), + version => 'HTTP/1.1' | 'HTTP/1.0' +}. +-export_type([http_opts/0]). + +-type http2_opts() :: #{ + keepalive => timeout() +}. +-export_type([http2_opts/0]). + +%% @todo keepalive +-type ws_opts() :: #{ + compress => boolean(), + protocols => [{binary(), module()}] +}. +-export_type([ws_opts/0]). + +-record(state, { + parent :: pid(), + owner :: pid(), + owner_ref :: reference(), + host :: inet:hostname() | inet:ip_address(), + port :: inet:port_number(), + origin_host :: inet:hostname() | inet:ip_address(), + origin_port :: inet:port_number(), + intermediaries = [] :: [intermediary()], + opts :: opts(), + keepalive_ref :: undefined | reference(), + socket :: undefined | inet:socket() | ssl:sslsocket(), + transport :: module(), + protocol :: module(), + protocol_state :: any(), + last_error :: any() +}). + +%% Connection. + +-spec open(inet:hostname() | inet:ip_address(), inet:port_number()) + -> {ok, pid()} | {error, any()}. +open(Host, Port) -> + open(Host, Port, #{}). + +-spec open(inet:hostname() | inet:ip_address(), inet:port_number(), opts()) + -> {ok, pid()} | {error, any()}. +open(Host, Port, Opts) when is_list(Host); is_atom(Host); is_tuple(Host) -> + do_open(Host, Port, Opts). + +-spec open_unix(Path::string(), opts()) + -> {ok, pid()} | {error, any()}. +open_unix(SocketPath, Opts) -> + do_open({local, SocketPath}, 0, Opts). + +do_open(Host, Port, Opts0) -> + %% We accept both ssl and tls but only use tls in the code. + Opts = case Opts0 of + #{transport := ssl} -> Opts0#{transport => tls}; + _ -> Opts0 + end, + case check_options(maps:to_list(Opts)) of + ok -> + case supervisor:start_child(gun_sup, [self(), Host, Port, Opts]) of + OK = {ok, ServerPid} -> + consider_tracing(ServerPid, Opts), + OK; + StartError -> + StartError + end; + CheckError -> + CheckError + end. + +check_options([]) -> + ok; +check_options([{connect_timeout, infinity}|Opts]) -> + check_options(Opts); +check_options([{connect_timeout, T}|Opts]) when is_integer(T), T >= 0 -> + check_options(Opts); +check_options([{http_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_http:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([{http2_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_http2:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([Opt = {protocols, L}|Opts]) when is_list(L) -> + Len = length(L), + case length(lists:usort(L)) of + Len when Len > 0 -> + Check = lists:usort([(P =:= http) orelse (P =:= http2) || P <- L]), + case Check of + [true] -> + check_options(Opts); + _ -> + {error, {options, Opt}} + end; + _ -> + {error, {options, Opt}} + end; +check_options([{retry, R}|Opts]) when is_integer(R), R >= 0 -> + check_options(Opts); +check_options([{retry_timeout, T}|Opts]) when is_integer(T), T >= 0 -> + check_options(Opts); +check_options([{trace, B}|Opts]) when B =:= true; B =:= false -> + check_options(Opts); +check_options([{transport, T}|Opts]) when T =:= tcp; T =:= tls -> + check_options(Opts); +check_options([{transport_opts, L}|Opts]) when is_list(L) -> + check_options(Opts); +check_options([{ws_opts, ProtoOpts}|Opts]) when is_map(ProtoOpts) -> + case gun_ws:check_options(ProtoOpts) of + ok -> + check_options(Opts); + Error -> + Error + end; +check_options([Opt|_]) -> + {error, {options, Opt}}. + +consider_tracing(ServerPid, #{trace := true}) -> + dbg:start(), + dbg:tracer(), + dbg:tpl(gun, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_http, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_http2, [{'_', [], [{return_trace}]}]), + dbg:tpl(gun_ws, [{'_', [], [{return_trace}]}]), + dbg:p(ServerPid, all); +consider_tracing(_, _) -> + ok. + +-spec info(pid()) -> map(). +info(ServerPid) -> + {_, #state{ + socket=Socket, + transport=Transport, + protocol=Protocol, + origin_host=OriginHost, + origin_port=OriginPort, + intermediaries=Intermediaries + }} = sys:get_state(ServerPid), + {ok, {SockIP, SockPort}} = Transport:sockname(Socket), + #{ + socket => Socket, + transport => Transport:name(), + protocol => Protocol:name(), + sock_ip => SockIP, + sock_port => SockPort, + origin_host => OriginHost, + origin_port => OriginPort, + %% Intermediaries are listed in the order data goes through them. + intermediaries => lists:reverse(Intermediaries) + }. + +-spec close(pid()) -> ok. +close(ServerPid) -> + supervisor:terminate_child(gun_sup, ServerPid). + +-spec shutdown(pid()) -> ok. +shutdown(ServerPid) -> + _ = ServerPid ! {shutdown, self()}, + ok. + +%% Requests. + +-spec delete(pid(), iodata()) -> reference(). +delete(ServerPid, Path) -> + request(ServerPid, <<"DELETE">>, Path, []). + +-spec delete(pid(), iodata(), headers()) -> reference(). +delete(ServerPid, Path, Headers) -> + request(ServerPid, <<"DELETE">>, Path, Headers). + +-spec delete(pid(), iodata(), headers(), req_opts()) -> reference(). +delete(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"DELETE">>, Path, Headers, <<>>, ReqOpts). + +-spec get(pid(), iodata()) -> reference(). +get(ServerPid, Path) -> + request(ServerPid, <<"GET">>, Path, []). + +-spec get(pid(), iodata(), headers()) -> reference(). +get(ServerPid, Path, Headers) -> + request(ServerPid, <<"GET">>, Path, Headers). + +-spec get(pid(), iodata(), headers(), req_opts()) -> reference(). +get(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"GET">>, Path, Headers, <<>>, ReqOpts). + +-spec head(pid(), iodata()) -> reference(). +head(ServerPid, Path) -> + request(ServerPid, <<"HEAD">>, Path, []). + +-spec head(pid(), iodata(), headers()) -> reference(). +head(ServerPid, Path, Headers) -> + request(ServerPid, <<"HEAD">>, Path, Headers). + +-spec head(pid(), iodata(), headers(), req_opts()) -> reference(). +head(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"HEAD">>, Path, Headers, <<>>, ReqOpts). + +-spec options(pid(), iodata()) -> reference(). +options(ServerPid, Path) -> + request(ServerPid, <<"OPTIONS">>, Path, []). + +-spec options(pid(), iodata(), headers()) -> reference(). +options(ServerPid, Path, Headers) -> + request(ServerPid, <<"OPTIONS">>, Path, Headers). + +-spec options(pid(), iodata(), headers(), req_opts()) -> reference(). +options(ServerPid, Path, Headers, ReqOpts) -> + request(ServerPid, <<"OPTIONS">>, Path, Headers, <<>>, ReqOpts). + +-spec patch(pid(), iodata(), headers()) -> reference(). +patch(ServerPid, Path, Headers) -> + request(ServerPid, <<"PATCH">>, Path, Headers). + +-spec patch(pid(), iodata(), headers(), iodata()) -> reference(). +patch(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"PATCH">>, Path, Headers, Body). + +-spec patch(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +patch(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"PATCH">>, Path, Headers, Body, ReqOpts). + +-spec post(pid(), iodata(), headers()) -> reference(). +post(ServerPid, Path, Headers) -> + request(ServerPid, <<"POST">>, Path, Headers). + +-spec post(pid(), iodata(), headers(), iodata()) -> reference(). +post(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"POST">>, Path, Headers, Body). + +-spec post(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +post(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"POST">>, Path, Headers, Body, ReqOpts). + +-spec put(pid(), iodata(), headers()) -> reference(). +put(ServerPid, Path, Headers) -> + request(ServerPid, <<"PUT">>, Path, Headers). + +-spec put(pid(), iodata(), headers(), iodata()) -> reference(). +put(ServerPid, Path, Headers, Body) -> + request(ServerPid, <<"PUT">>, Path, Headers, Body). + +-spec put(pid(), iodata(), headers(), iodata(), req_opts()) -> reference(). +put(ServerPid, Path, Headers, Body, ReqOpts) -> + request(ServerPid, <<"PUT">>, Path, Headers, Body, ReqOpts). + +-spec request(pid(), iodata(), iodata(), headers()) -> reference(). +request(ServerPid, Method, Path, Headers) -> + request(ServerPid, Method, Path, Headers, <<>>, #{}). + +-spec request(pid(), iodata(), iodata(), headers(), iodata()) -> reference(). +request(ServerPid, Method, Path, Headers, Body) -> + request(ServerPid, Method, Path, Headers, Body, #{}). + +%% @todo Accept header names as maps. +-spec request(pid(), iodata(), iodata(), headers(), iodata(), req_opts()) -> reference(). +request(ServerPid, Method, Path, Headers, Body, ReqOpts) -> + StreamRef = make_ref(), + ReplyTo = maps:get(reply_to, ReqOpts, self()), + _ = ServerPid ! {request, ReplyTo, StreamRef, Method, Path, Headers, Body}, + StreamRef. + +%% Streaming data. + +-spec data(pid(), reference(), fin | nofin, iodata()) -> ok. +data(ServerPid, StreamRef, IsFin, Data) -> + _ = ServerPid ! {data, self(), StreamRef, IsFin, Data}, + ok. + +%% Tunneling. + +-spec connect(pid(), connect_destination()) -> reference(). +connect(ServerPid, Destination) -> + connect(ServerPid, Destination, [], #{}). + +-spec connect(pid(), connect_destination(), headers()) -> reference(). +connect(ServerPid, Destination, Headers) -> + connect(ServerPid, Destination, Headers, #{}). + +-spec connect(pid(), connect_destination(), headers(), req_opts()) -> reference(). +connect(ServerPid, Destination, Headers, ReqOpts) -> + StreamRef = make_ref(), + ReplyTo = maps:get(reply_to, ReqOpts, self()), + _ = ServerPid ! {connect, ReplyTo, StreamRef, Destination, Headers}, + StreamRef. + +%% Awaiting gun messages. + +%% @todo spec await await_body + +await(ServerPid, StreamRef) -> + MRef = monitor(process, ServerPid), + Res = await(ServerPid, StreamRef, 5000, MRef), + demonitor(MRef, [flush]), + Res. + +await(ServerPid, StreamRef, MRef) when is_reference(MRef) -> + await(ServerPid, StreamRef, 5000, MRef); +await(ServerPid, StreamRef, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await(ServerPid, StreamRef, Timeout, MRef), + demonitor(MRef, [flush]), + Res. + +%% @todo Add gun_upgrade and gun_ws? +await(ServerPid, StreamRef, Timeout, MRef) -> + receive + {gun_inform, ServerPid, StreamRef, Status, Headers} -> + {inform, Status, Headers}; + {gun_response, ServerPid, StreamRef, IsFin, Status, Headers} -> + {response, IsFin, Status, Headers}; + {gun_data, ServerPid, StreamRef, IsFin, Data} -> + {data, IsFin, Data}; + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {trailers, Trailers}; + {gun_push, ServerPid, StreamRef, NewStreamRef, Method, URI, Headers} -> + {push, NewStreamRef, Method, URI, Headers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, Reason}; + {gun_error, ServerPid, Reason} -> + {error, Reason}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +await_body(ServerPid, StreamRef) -> + MRef = monitor(process, ServerPid), + Res = await_body(ServerPid, StreamRef, 5000, MRef, <<>>), + demonitor(MRef, [flush]), + Res. + +await_body(ServerPid, StreamRef, MRef) when is_reference(MRef) -> + await_body(ServerPid, StreamRef, 5000, MRef, <<>>); +await_body(ServerPid, StreamRef, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await_body(ServerPid, StreamRef, Timeout, MRef, <<>>), + demonitor(MRef, [flush]), + Res. + +await_body(ServerPid, StreamRef, Timeout, MRef) -> + await_body(ServerPid, StreamRef, Timeout, MRef, <<>>). + +await_body(ServerPid, StreamRef, Timeout, MRef, Acc) -> + receive + {gun_data, ServerPid, StreamRef, nofin, Data} -> + await_body(ServerPid, StreamRef, Timeout, MRef, + << Acc/binary, Data/binary >>); + {gun_data, ServerPid, StreamRef, fin, Data} -> + {ok, << Acc/binary, Data/binary >>}; + %% It's OK to return trailers here because the client + %% specifically requested them. + {gun_trailers, ServerPid, StreamRef, Trailers} -> + {ok, Acc, Trailers}; + {gun_error, ServerPid, StreamRef, Reason} -> + {error, Reason}; + {gun_error, ServerPid, Reason} -> + {error, Reason}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +-spec await_up(pid()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, 5000, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), reference() | timeout()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid, MRef) when is_reference(MRef) -> + await_up(ServerPid, 5000, MRef); +await_up(ServerPid, Timeout) -> + MRef = monitor(process, ServerPid), + Res = await_up(ServerPid, Timeout, MRef), + demonitor(MRef, [flush]), + Res. + +-spec await_up(pid(), timeout(), reference()) -> {ok, http | http2} | {error, atom()}. +await_up(ServerPid, Timeout, MRef) -> + receive + {gun_up, ServerPid, Protocol} -> + {ok, Protocol}; + {'DOWN', MRef, process, ServerPid, Reason} -> + {error, Reason} + after Timeout -> + {error, timeout} + end. + +-spec flush(pid() | reference()) -> ok. +flush(ServerPid) when is_pid(ServerPid) -> + flush_pid(ServerPid); +flush(StreamRef) -> + flush_ref(StreamRef). + +flush_pid(ServerPid) -> + receive + {gun_up, ServerPid, _} -> + flush_pid(ServerPid); + {gun_down, ServerPid, _, _, _, _} -> + flush_pid(ServerPid); + {gun_inform, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_response, ServerPid, _, _, _, _} -> + flush_pid(ServerPid); + {gun_data, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_trailers, ServerPid, _, _} -> + flush_pid(ServerPid); + {gun_push, ServerPid, _, _, _, _, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _, _} -> + flush_pid(ServerPid); + {gun_error, ServerPid, _} -> + flush_pid(ServerPid); + {gun_upgrade, ServerPid, _, _, _} -> + flush_pid(ServerPid); + {gun_ws, ServerPid, _, _} -> + flush_pid(ServerPid); + {'DOWN', _, process, ServerPid, _} -> + flush_pid(ServerPid) + after 0 -> + ok + end. + +flush_ref(StreamRef) -> + receive + {gun_inform, _, StreamRef, _, _} -> + flush_pid(StreamRef); + {gun_response, _, StreamRef, _, _, _} -> + flush_ref(StreamRef); + {gun_data, _, StreamRef, _, _} -> + flush_ref(StreamRef); + {gun_trailers, _, StreamRef, _} -> + flush_ref(StreamRef); + {gun_push, _, StreamRef, _, _, _, _, _} -> + flush_ref(StreamRef); + {gun_error, _, StreamRef, _} -> + flush_ref(StreamRef); + {gun_upgrade, _, StreamRef, _, _} -> + flush_ref(StreamRef); + {gun_ws, _, StreamRef, _} -> + flush_ref(StreamRef) + after 0 -> + ok + end. + +%% Cancelling a stream. + +-spec cancel(pid(), reference()) -> ok. +cancel(ServerPid, StreamRef) -> + _ = ServerPid ! {cancel, self(), StreamRef}, + ok. + +%% @todo Allow upgrading an HTTP/1.1 connection to HTTP/2. +%% http2_upgrade + +%% Websocket. + +-spec ws_upgrade(pid(), iodata()) -> reference(). +ws_upgrade(ServerPid, Path) -> + ws_upgrade(ServerPid, Path, []). + +-spec ws_upgrade(pid(), iodata(), headers()) -> reference(). +ws_upgrade(ServerPid, Path, Headers) -> + StreamRef = make_ref(), + _ = ServerPid ! {ws_upgrade, self(), StreamRef, Path, Headers}, + StreamRef. + +-spec ws_upgrade(pid(), iodata(), headers(), ws_opts()) -> reference(). +ws_upgrade(ServerPid, Path, Headers, Opts) -> + ok = gun_ws:check_options(Opts), + StreamRef = make_ref(), + _ = ServerPid ! {ws_upgrade, self(), StreamRef, Path, Headers, Opts}, + StreamRef. + +%% @todo ws_send/2 will need to be deprecated in favor of a variant with StreamRef. +%% But it can be kept for the time being since it can still work for HTTP/1.1. +-spec ws_send(pid(), ws_frame() | [ws_frame()]) -> ok. +ws_send(ServerPid, Frames) -> + _ = ServerPid ! {ws_send, self(), Frames}, + ok. + +%% Internals. + +start_link(Owner, Host, Port, Opts) -> + proc_lib:start_link(?MODULE, proc_lib_hack, + [self(), Owner, Host, Port, Opts]). + +proc_lib_hack(Parent, Owner, Host, Port, Opts) -> + try + init(Parent, Owner, Host, Port, Opts) + catch + _:normal -> exit(normal); + _:shutdown -> exit(shutdown); + _:Reason = {shutdown, _} -> exit(Reason); + _:Reason -> exit({Reason, erlang:get_stacktrace()}) + end. + +init(Parent, Owner, Host, Port, Opts) -> + ok = proc_lib:init_ack(Parent, {ok, self()}), + Retry = maps:get(retry, Opts, 5), + Transport = case maps:get(transport, Opts, default_transport(Port)) of + tcp -> gun_tcp; + tls -> gun_tls + end, + OwnerRef = monitor(process, Owner), + transport_connect(#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, + host=Host, port=Port, origin_host=Host, origin_port=Port, + opts=Opts, transport=Transport}, Retry). + +default_transport(443) -> tls; +default_transport(_) -> tcp. + +transport_connect(State=#state{host=Host, port=Port, opts=Opts, transport=Transport=gun_tls}, Retries) -> + TransportOpts = [binary, {active, false}|ensure_alpn( + maps:get(protocols, Opts, [http2, http]), + maps:get(transport_opts, Opts, []))], + case Transport:connect(Host, Port, TransportOpts, maps:get(connect_timeout, Opts, infinity)) of + {ok, Socket} -> + {Protocol, ProtoOptsKey} = case ssl:negotiated_protocol(Socket) of + {ok, <<"h2">>} -> {gun_http2, http2_opts}; + _ -> {gun_http, http_opts} + end, + up(State, Socket, Protocol, ProtoOptsKey); + {error, Reason} -> + retry(State#state{last_error=Reason}, Retries) + end; +transport_connect(State=#state{host=Host, port=Port, opts=Opts, transport=Transport}, Retries) -> + TransportOpts = [binary, {active, false} + |maps:get(transport_opts, Opts, [])], + case Transport:connect(Host, Port, TransportOpts, maps:get(connect_timeout, Opts, infinity)) of + {ok, Socket} -> + {Protocol, ProtoOptsKey} = case maps:get(protocols, Opts, [http]) of + [http] -> {gun_http, http_opts}; + [http2] -> {gun_http2, http2_opts} + end, + up(State, Socket, Protocol, ProtoOptsKey); + {error, Reason} -> + retry(State#state{last_error=Reason}, Retries) + end. + +ensure_alpn(Protocols0, TransportOpts) -> + Protocols = [case P of + http -> <<"http/1.1">>; + http2 -> <<"h2">> + end || P <- Protocols0], + [ + {alpn_advertised_protocols, Protocols}, + {client_preferred_next_protocols, {client, Protocols, <<"http/1.1">>}} + |TransportOpts]. + +up(State=#state{owner=Owner, opts=Opts, transport=Transport}, Socket, Protocol, ProtoOptsKey) -> + ProtoOpts = maps:get(ProtoOptsKey, Opts, #{}), + ProtoState = Protocol:init(Owner, Socket, Transport, ProtoOpts), + Owner ! {gun_up, self(), Protocol:name()}, + before_loop(State#state{socket=Socket, protocol=Protocol, protocol_state=ProtoState}). + +down(State=#state{owner=Owner, opts=Opts, protocol=Protocol, protocol_state=ProtoState}, Reason) -> + {KilledStreams, UnprocessedStreams} = Protocol:down(ProtoState), + Owner ! {gun_down, self(), Protocol:name(), Reason, KilledStreams, UnprocessedStreams}, + retry(State#state{socket=undefined, protocol=undefined, protocol_state=undefined, + last_error=Reason}, maps:get(retry, Opts, 5)). + +retry(#state{last_error=Reason}, 0) -> + exit({shutdown, Reason}); +retry(State=#state{keepalive_ref=KeepaliveRef}, Retries) when is_reference(KeepaliveRef) -> + _ = erlang:cancel_timer(KeepaliveRef), + %% Flush if we have a keepalive message + receive + keepalive -> ok + after 0 -> + ok + end, + retry_loop(State#state{keepalive_ref=undefined}, Retries - 1); +retry(State, Retries) -> + retry_loop(State, Retries - 1). + +retry_loop(State=#state{parent=Parent, opts=Opts}, Retries) -> + _ = erlang:send_after(maps:get(retry_timeout, Opts, 5000), self(), retry), + receive + retry -> + transport_connect(State, Retries); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {retry_loop, State, Retries}) + end. + +before_loop(State=#state{opts=Opts, protocol=Protocol}) -> + %% @todo Might not be worth checking every time? + ProtoOptsKey = case Protocol of + gun_http -> http_opts; + gun_http2 -> http2_opts + end, + ProtoOpts = maps:get(ProtoOptsKey, Opts, #{}), + Keepalive = maps:get(keepalive, ProtoOpts, 5000), + KeepaliveRef = case Keepalive of + infinity -> undefined; + _ -> erlang:send_after(Keepalive, self(), keepalive) + end, + loop(State#state{keepalive_ref=KeepaliveRef}). + +loop(State=#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, + origin_host=Host, origin_port=Port, opts=Opts, socket=Socket, + transport=Transport, protocol=Protocol, protocol_state=ProtoState}) -> + {OK, Closed, Error} = Transport:messages(), + Transport:setopts(Socket, [{active, once}]), + receive + {OK, Socket, Data} -> + case Protocol:handle(Data, ProtoState) of + Commands when is_list(Commands) -> + commands(Commands, State); + Command -> + commands([Command], State) + end; + {Closed, Socket} -> + Protocol:close(ProtoState), + Transport:close(Socket), + down(State, closed); + {Error, Socket, Reason} -> + Protocol:close(ProtoState), + Transport:close(Socket), + down(State, {error, Reason}); + {OK, _PreviousSocket, _Data} -> + loop(State); + {Closed, _PreviousSocket} -> + loop(State); + {Error, _PreviousSocket, _} -> + loop(State); + keepalive -> + ProtoState2 = Protocol:keepalive(ProtoState), + before_loop(State#state{protocol_state=ProtoState2}); + {request, ReplyTo, StreamRef, Method, Path, Headers, <<>>} -> + ProtoState2 = Protocol:request(ProtoState, + StreamRef, ReplyTo, Method, Host, Port, Path, Headers), + loop(State#state{protocol_state=ProtoState2}); + {request, ReplyTo, StreamRef, Method, Path, Headers, Body} -> + ProtoState2 = Protocol:request(ProtoState, + StreamRef, ReplyTo, Method, Host, Port, Path, Headers, Body), + loop(State#state{protocol_state=ProtoState2}); + %% @todo Do we want to reject ReplyTo if it's not the process + %% who initiated the connection? For both data and cancel. + {data, ReplyTo, StreamRef, IsFin, Data} -> + ProtoState2 = Protocol:data(ProtoState, + StreamRef, ReplyTo, IsFin, Data), + loop(State#state{protocol_state=ProtoState2}); + {connect, ReplyTo, StreamRef, Destination0, Headers} -> + %% The protocol option has been deprecated in favor of the protocols option. + %% Nobody probably ended up using it, but let's not break the interface. + Destination1 = case Destination0 of + #{protocols := _} -> + Destination0; + #{protocol := DestProto} -> + Destination0#{protocols => [DestProto]}; + _ -> + Destination0 + end, + Destination = case Destination1 of + #{transport := tls} -> + Destination1#{tls_opts => ensure_alpn( + maps:get(protocols, Destination1, [http]), + maps:get(tls_opts, Destination1, []))}; + _ -> + Destination1 + end, + ProtoState2 = Protocol:connect(ProtoState, StreamRef, ReplyTo, Destination, Headers), + loop(State#state{protocol_state=ProtoState2}); + {cancel, ReplyTo, StreamRef} -> + ProtoState2 = Protocol:cancel(ProtoState, StreamRef, ReplyTo), + loop(State#state{protocol_state=ProtoState2}); + %% @todo Maybe make an interface in the protocol module instead of checking on protocol name. + %% An interface would also make sure that HTTP/1.0 can't upgrade. + {ws_upgrade, Owner, StreamRef, Path, Headers} when Protocol =:= gun_http -> + WsOpts = maps:get(ws_opts, Opts, #{}), + ProtoState2 = Protocol:ws_upgrade(ProtoState, StreamRef, Host, Port, Path, Headers, WsOpts), + loop(State#state{protocol_state=ProtoState2}); + {ws_upgrade, Owner, StreamRef, Path, Headers, WsOpts} when Protocol =:= gun_http -> + ProtoState2 = Protocol:ws_upgrade(ProtoState, StreamRef, Host, Port, Path, Headers, WsOpts), + loop(State#state{protocol_state=ProtoState2}); + %% @todo can fail if http/1.0 + {shutdown, Owner} -> + %% @todo Protocol:shutdown? + ok; + {'DOWN', OwnerRef, process, Owner, Reason} -> + Protocol:close(ProtoState), + Transport:close(Socket), + owner_gone(Reason); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {loop, State}); + {ws_upgrade, _, StreamRef, _, _} -> + Owner ! {gun_error, self(), StreamRef, {badstate, + "Websocket is only supported over HTTP/1.1."}}, + loop(State); + {ws_upgrade, _, StreamRef, _, _, _} -> + Owner ! {gun_error, self(), StreamRef, {badstate, + "Websocket is only supported over HTTP/1.1."}}, + loop(State); + {ws_send, _, _} -> + Owner ! {gun_error, self(), {badstate, + "Connection needs to be upgraded to Websocket " + "before the gun:ws_send/1 function can be used."}}, + loop(State); + %% @todo The ReplyTo patch disabled the notowner behavior. + %% We need to add an option to enforce this behavior if needed. + Any when is_tuple(Any), is_pid(element(2, Any)) -> + element(2, Any) ! {gun_error, self(), {notowner, + "Operations are restricted to the owner of the connection."}}, + loop(State); + Any -> + error_logger:error_msg("Unexpected message: ~w~n", [Any]), + loop(State) + end. + +commands([], State) -> + loop(State); +commands([close|_], State=#state{socket=Socket, transport=Transport}) -> + Transport:close(Socket), + down(State, normal); +commands([Error={error, _}|_], State=#state{socket=Socket, transport=Transport}) -> + Transport:close(Socket), + down(State, Error); +commands([{state, ProtoState}|Tail], State) -> + commands(Tail, State#state{protocol_state=ProtoState}); +%% @todo The scheme should probably not be ignored. +%% +%% Order is important: the origin must be changed before +%% the transport and/or protocol in order to keep track +%% of the intermediaries properly. +commands([{origin, _Scheme, Host, Port, Type}|Tail], + State=#state{transport=Transport, protocol=Protocol, + origin_host=IntermediateHost, origin_port=IntermediatePort, + intermediaries=Intermediaries}) -> + Info = #{ + type => Type, + host => IntermediateHost, + port => IntermediatePort, + transport => Transport:name(), + protocol => Protocol:name() + }, + commands(Tail, State#state{origin_host=Host, origin_port=Port, + intermediaries=[Info|Intermediaries]}); +commands([{switch_transport, Transport, Socket}|Tail], State) -> + commands(Tail, State#state{socket=Socket, transport=Transport}); +%% @todo The two loops should be reunified and this clause generalized. +commands([{switch_protocol, Protocol=gun_ws, ProtoState}], State) -> + ws_loop(State#state{protocol=Protocol, protocol_state=ProtoState}); +%% @todo And this state should probably not be ignored. +commands([{switch_protocol, Protocol, _ProtoState0}|Tail], + State=#state{owner=Owner, opts=Opts, socket=Socket, transport=Transport}) -> + ProtoOpts = maps:get(http2_opts, Opts, #{}), + ProtoState = Protocol:init(Owner, Socket, Transport, ProtoOpts), + commands(Tail, State#state{protocol=Protocol, protocol_state=ProtoState}). + +ws_loop(State=#state{parent=Parent, owner=Owner, owner_ref=OwnerRef, socket=Socket, + transport=Transport, protocol=Protocol, protocol_state=ProtoState}) -> + {OK, Closed, Error} = Transport:messages(), + Transport:setopts(Socket, [{active, once}]), + receive + {OK, Socket, Data} -> + case Protocol:handle(Data, ProtoState) of + close -> + Transport:close(Socket), + down(State, normal); + ProtoState2 -> + ws_loop(State#state{protocol_state=ProtoState2}) + end; + {Closed, Socket} -> + Transport:close(Socket), + down(State, closed); + {Error, Socket, Reason} -> + Transport:close(Socket), + down(State, {error, Reason}); + %% Ignore any previous HTTP keep-alive. + keepalive -> + ws_loop(State); +% {ws_send, Owner, Frames} when is_list(Frames) -> +% todo; %% @todo + {ws_send, Owner, Frame} -> + case Protocol:send(Frame, ProtoState) of + close -> + Transport:close(Socket), + down(State, normal); + ProtoState2 -> + ws_loop(State#state{protocol_state=ProtoState2}) + end; + {shutdown, Owner} -> + %% @todo Protocol:shutdown? %% @todo close frame + ok; + {'DOWN', OwnerRef, process, Owner, Reason} -> + Protocol:close(owner_gone, ProtoState), + Transport:close(Socket), + owner_gone(Reason); + {system, From, Request} -> + sys:handle_system_msg(Request, From, Parent, ?MODULE, [], + {ws_loop, State}); + Any when is_tuple(Any), is_pid(element(2, Any)) -> + element(2, Any) ! {gun_error, self(), {notowner, + "Operations are restricted to the owner of the connection."}}, + ws_loop(State); + Any -> + error_logger:error_msg("Unexpected message: ~w~n", [Any]) + end. + +-spec owner_gone(_) -> no_return(). +owner_gone(normal) -> exit(normal); +owner_gone(shutdown) -> exit(shutdown); +owner_gone(Shutdown = {shutdown, _}) -> exit(Shutdown); +owner_gone(Reason) -> error({owner_gone, Reason}). + +system_continue(_, _, {retry_loop, State, Retry}) -> + retry_loop(State, Retry); +system_continue(_, _, {loop, State}) -> + loop(State); +system_continue(_, _, {ws_loop, State}) -> + ws_loop(State). + +-spec system_terminate(any(), _, _, _) -> no_return(). +system_terminate(Reason, _, _, _) -> + exit(Reason). + +system_code_change(Misc, _, _, _) -> + {ok, Misc}. diff --git a/deps/gun/src/gun_app.erl b/deps/gun/src/gun_app.erl new file mode 100644 index 0000000..d167e10 --- /dev/null +++ b/deps/gun/src/gun_app.erl @@ -0,0 +1,29 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +%% @private +-module(gun_app). +-behaviour(application). + +%% API. +-export([start/2]). +-export([stop/1]). + +%% API. + +start(_Type, _Args) -> + gun_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/gun/src/gun_content_handler.erl b/deps/gun/src/gun_content_handler.erl new file mode 100644 index 0000000..a7decd6 --- /dev/null +++ b/deps/gun/src/gun_content_handler.erl @@ -0,0 +1,69 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_content_handler). + +-export([init/5]). +-export([handle/3]). +-export([check_option/1]). + +-type opt() :: [module() | {module(), map()}]. +-export_type([opt/0]). + +-type state() :: opt() | [{module(), any()}]. +-export_type([state/0]). + +-callback init(pid(), any(), cow_http:status(), + cow_http:headers(), map()) -> {ok, any()} | disable. +%% @todo Make fin | nofin its own type. +-callback handle(fin | nofin, any(), State) + -> {ok, any(), State} | {done, State} when State::any(). + +-spec init(pid(), any(), cow_http:status(), + cow_http:headers(), State) -> State when State::state(). +init(_, _, _, _, []) -> + []; +init(ReplyTo, StreamRef, Status, Headers, [Handler|Tail]) -> + {Mod, Opts} = case Handler of + Tuple = {_, _} -> Tuple; + Atom -> {Atom, #{}} + end, + case Mod:init(ReplyTo, StreamRef, Status, Headers, Opts) of + {ok, State} -> [{Mod, State}|init(ReplyTo, StreamRef, Status, Headers, Tail)]; + disable -> init(ReplyTo, StreamRef, Status, Headers, Tail) + end. + +-spec handle(fin | nofin, any(), State) -> State when State::state(). +handle(_, _, []) -> + []; +handle(IsFin, Data0, [{Mod, State0}|Tail]) -> + case Mod:handle(IsFin, Data0, State0) of + {ok, Data, State} -> [{Mod, State}|handle(IsFin, Data, Tail)]; + {done, State} -> [{Mod, State}|Tail] + end. + +-spec check_option(list()) -> ok | error. +check_option([]) -> + error; +check_option(Opt) -> + check_option1(Opt). + +check_option1([]) -> + ok; +check_option1([Atom|Tail]) when is_atom(Atom) -> + check_option1(Tail); +check_option1([{Atom, #{}}|Tail]) when is_atom(Atom) -> + check_option1(Tail); +check_option1(_) -> + error. diff --git a/deps/gun/src/gun_data_h.erl b/deps/gun/src/gun_data_h.erl new file mode 100644 index 0000000..30f07ce --- /dev/null +++ b/deps/gun/src/gun_data_h.erl @@ -0,0 +1,33 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_data_h). +-behavior(gun_content_handler). + +-export([init/5]). +-export([handle/3]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference() +}). + +-spec init(pid(), reference(), _, _, _) -> {ok, #state{}}. +init(ReplyTo, StreamRef, _, _, _) -> + {ok, #state{reply_to=ReplyTo, stream_ref=StreamRef}}. + +-spec handle(fin | nofin, binary(), State) -> {done, State} when State::#state{}. +handle(IsFin, Data, State=#state{reply_to=ReplyTo, stream_ref=StreamRef}) -> + ReplyTo ! {gun_data, self(), StreamRef, IsFin, Data}, + {done, State}. diff --git a/deps/gun/src/gun_http.erl b/deps/gun/src/gun_http.erl new file mode 100644 index 0000000..abd4fc5 --- /dev/null +++ b/deps/gun/src/gun_http.erl @@ -0,0 +1,672 @@ +%% Copyright (c) 2014-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_http). + +-export([check_options/1]). +-export([name/0]). +-export([init/4]). +-export([handle/2]). +-export([close/1]). +-export([keepalive/1]). +-export([request/8]). +-export([request/9]). +-export([data/5]). +-export([connect/5]). +-export([cancel/3]). +-export([down/1]). +-export([ws_upgrade/7]). + +-type io() :: head | {body, non_neg_integer()} | body_close | body_chunked | body_trailer. + +%% @todo Make that a record. +-type connect_info() :: {connect, reference(), gun:connect_destination()}. + +%% @todo Make that a record. +-type websocket_info() :: {websocket, reference(), binary(), [binary()], gun:ws_opts()}. %% key, extensions, options + +-record(stream, { + ref :: reference() | connect_info() | websocket_info(), + reply_to :: pid(), + method :: binary(), + is_alive :: boolean(), + handler_state :: undefined | gun_content_handler:state() +}). + +-record(http_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + version = 'HTTP/1.1' :: cow_http:version(), + content_handlers :: gun_content_handler:opt(), + connection = keepalive :: keepalive | close, + buffer = <<>> :: binary(), + streams = [] :: [#stream{}], + in = head :: io(), + in_state = {0, 0} :: {non_neg_integer(), non_neg_integer()}, + out = head :: io(), + transform_header_name :: fun((binary()) -> binary()) +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([Opt={content_handlers, Handlers}|Opts]) -> + case gun_content_handler:check_option(Handlers) of + ok -> do_check_options(Opts); + error -> {error, {options, {http, Opt}}} + end; +do_check_options([{keepalive, infinity}|Opts]) -> + do_check_options(Opts); +do_check_options([{keepalive, K}|Opts]) when is_integer(K), K > 0 -> + do_check_options(Opts); +do_check_options([{transform_header_name, F}|Opts]) when is_function(F) -> + do_check_options(Opts); +do_check_options([{version, V}|Opts]) when V =:= 'HTTP/1.1'; V =:= 'HTTP/1.0' -> + do_check_options(Opts); +do_check_options([Opt|_]) -> + {error, {options, {http, Opt}}}. + +name() -> http. + +init(Owner, Socket, Transport, Opts) -> + Version = maps:get(version, Opts, 'HTTP/1.1'), + Handlers = maps:get(content_handlers, Opts, [gun_data_h]), + TransformHeaderName = maps:get(transform_header_name, Opts, fun (N) -> N end), + #http_state{owner=Owner, socket=Socket, transport=Transport, version=Version, + content_handlers=Handlers, transform_header_name=TransformHeaderName}. + +%% Stop looping when we got no more data. +handle(<<>>, State) -> + {state, State}; +%% Close when server responds and we don't have any open streams. +handle(_, #http_state{streams=[]}) -> + close; +%% Wait for the full response headers before trying to parse them. +handle(Data, State=#http_state{in=head, buffer=Buffer}) -> + Data2 = << Buffer/binary, Data/binary >>, + case binary:match(Data2, <<"\r\n\r\n">>) of + nomatch -> {state, State#http_state{buffer=Data2}}; + {_, _} -> handle_head(Data2, State#http_state{buffer= <<>>}) + end; +%% Everything sent to the socket until it closes is part of the response body. +handle(Data, State=#http_state{in=body_close}) -> + {state, send_data_if_alive(Data, State, nofin)}; +%% Chunked transfer-encoding may contain both data and trailers. +handle(Data, State=#http_state{in=body_chunked, in_state=InState, + buffer=Buffer, connection=Conn}) -> + Buffer2 = << Buffer/binary, Data/binary >>, + case cow_http_te:stream_chunked(Buffer2, InState) of + more -> + {state, State#http_state{buffer=Buffer2}}; + {more, Data2, InState2} -> + {state, send_data_if_alive(Data2, + State#http_state{buffer= <<>>, in_state=InState2}, + nofin)}; + {more, Data2, Length, InState2} when is_integer(Length) -> + %% @todo See if we can recv faster than one message at a time. + {state, send_data_if_alive(Data2, + State#http_state{buffer= <<>>, in_state=InState2}, + nofin)}; + {more, Data2, Rest, InState2} -> + %% @todo See if we can recv faster than one message at a time. + {state, send_data_if_alive(Data2, + State#http_state{buffer=Rest, in_state=InState2}, + nofin)}; + {done, HasTrailers, Rest} -> + IsFin = case HasTrailers of + trailers -> nofin; + no_trailers -> fin + end, + %% I suppose it doesn't hurt to append an empty binary. + State1 = send_data_if_alive(<<>>, State, IsFin), + case {HasTrailers, Conn} of + {trailers, _} -> + handle(Rest, State1#http_state{buffer = <<>>, in=body_trailer}); + {no_trailers, keepalive} -> + handle(Rest, end_stream(State1#http_state{buffer= <<>>})); + {no_trailers, close} -> + close + end; + {done, Data2, HasTrailers, Rest} -> + IsFin = case HasTrailers of + trailers -> nofin; + no_trailers -> fin + end, + State1 = send_data_if_alive(Data2, State, IsFin), + case {HasTrailers, Conn} of + {trailers, _} -> + handle(Rest, State1#http_state{buffer = <<>>, in=body_trailer}); + {no_trailers, keepalive} -> + handle(Rest, end_stream(State1#http_state{buffer= <<>>})); + {no_trailers, close} -> + close + end + end; +handle(Data, State=#http_state{in=body_trailer, buffer=Buffer, connection=Conn, + streams=[#stream{ref=StreamRef, reply_to=ReplyTo}|_]}) -> + Data2 = << Buffer/binary, Data/binary >>, + case binary:match(Data2, <<"\r\n\r\n">>) of + nomatch -> {state, State#http_state{buffer=Data2}}; + {_, _} -> + {Trailers, Rest} = cow_http:parse_headers(Data2), + %% @todo We probably want to pass this to gun_content_handler? + ReplyTo ! {gun_trailers, self(), stream_ref(StreamRef), Trailers}, + case Conn of + keepalive -> + handle(Rest, end_stream(State#http_state{buffer= <<>>})); + close -> + close + end + end; +%% We know the length of the rest of the body. +handle(Data, State=#http_state{in={body, Length}, connection=Conn}) -> + DataSize = byte_size(Data), + if + %% More data coming. + DataSize < Length -> + {state, send_data_if_alive(Data, + State#http_state{in={body, Length - DataSize}}, + nofin)}; + %% Stream finished, no rest. + DataSize =:= Length -> + State1 = send_data_if_alive(Data, State, fin), + case Conn of + keepalive -> {state, end_stream(State1)}; + close -> close + end; + %% Stream finished, rest. + true -> + << Body:Length/binary, Rest/bits >> = Data, + State1 = send_data_if_alive(Body, State, fin), + case Conn of + keepalive -> handle(Rest, end_stream(State1)); + close -> close + end + end. + +handle_head(Data, State=#http_state{socket=Socket, version=ClientVersion, + content_handlers=Handlers0, connection=Conn, + streams=[Stream=#stream{ref=StreamRef, reply_to=ReplyTo, + method=Method, is_alive=IsAlive}|Tail]}) -> + {Version, Status, _, Rest} = cow_http:parse_status_line(Data), + {Headers, Rest2} = cow_http:parse_headers(Rest), + case {Status, StreamRef} of + {101, {websocket, RealStreamRef, WsKey, WsExtensions, WsOpts}} -> + ws_handshake(Rest2, State, RealStreamRef, Headers, WsKey, WsExtensions, WsOpts); + {_, {connect, RealStreamRef, Destination}} when Status >= 200, Status < 300 -> + case IsAlive of + false -> + ok; + true -> + ReplyTo ! {gun_response, self(), RealStreamRef, + fin, Status, Headers}, + ok + end, + %% We expect there to be no additional data after the CONNECT response. + <<>> = Rest2, + State2 = end_stream(State#http_state{streams=[Stream|Tail]}), + NewHost = maps:get(host, Destination), + NewPort = maps:get(port, Destination), + case Destination of + #{transport := tls} -> + TLSOpts = maps:get(tls_opts, Destination, []), + TLSTimeout = maps:get(tls_handshake_timeout, Destination, infinity), + case gun_tls:connect(Socket, TLSOpts, TLSTimeout) of + {ok, TLSSocket} -> + case ssl:negotiated_protocol(TLSSocket) of + {ok, <<"h2">>} -> + [{origin, <<"https">>, NewHost, NewPort, connect}, + {switch_transport, gun_tls, TLSSocket}, + {switch_protocol, gun_http2, State2}]; + _ -> + [{state, State2#http_state{socket=TLSSocket, transport=gun_tls}}, + {origin, <<"https">>, NewHost, NewPort, connect}, + {switch_transport, gun_tls, TLSSocket}] + end; + Error -> + Error + end; + _ -> + case maps:get(protocols, Destination, [http]) of + [http] -> + [{state, State2}, + {origin, <<"http">>, NewHost, NewPort, connect}]; + [http2] -> + [{origin, <<"http">>, NewHost, NewPort, connect}, + {switch_protocol, gun_http2, State2}] + end + end; + {_, _} when Status >= 100, Status =< 199 -> + ReplyTo ! {gun_inform, self(), stream_ref(StreamRef), Status, Headers}, + handle(Rest2, State); + _ -> + In = response_io_from_headers(Method, Version, Status, Headers), + IsFin = case In of head -> fin; _ -> nofin end, + Handlers = case IsAlive of + false -> + undefined; + true -> + ReplyTo ! {gun_response, self(), stream_ref(StreamRef), + IsFin, Status, Headers}, + case IsFin of + fin -> undefined; + nofin -> + gun_content_handler:init(ReplyTo, StreamRef, + Status, Headers, Handlers0) + end + end, + Conn2 = if + Conn =:= close -> close; + Version =:= 'HTTP/1.0' -> close; + ClientVersion =:= 'HTTP/1.0' -> close; + true -> conn_from_headers(Version, Headers) + end, + %% We always reset in_state even if not chunked. + if + IsFin =:= fin, Conn2 =:= close -> + close; + IsFin =:= fin -> + handle(Rest2, end_stream(State#http_state{in=In, + in_state={0, 0}, connection=Conn2, + streams=[Stream#stream{handler_state=Handlers}|Tail]})); + true -> + handle(Rest2, State#http_state{in=In, + in_state={0, 0}, connection=Conn2, + streams=[Stream#stream{handler_state=Handlers}|Tail]}) + end + end. + +stream_ref({connect, StreamRef, _}) -> StreamRef; +stream_ref({websocket, StreamRef, _, _, _}) -> StreamRef; +stream_ref(StreamRef) -> StreamRef. + +send_data_if_alive(<<>>, State, nofin) -> + State; +%% @todo What if we receive data when the HEAD method was used? +send_data_if_alive(Data, State=#http_state{streams=[Stream=#stream{ + is_alive=true, handler_state=Handlers0}|Tail]}, IsFin) -> + Handlers = gun_content_handler:handle(IsFin, Data, Handlers0), + State#http_state{streams=[Stream#stream{handler_state=Handlers}|Tail]}; +send_data_if_alive(_, State, _) -> + State. + +close(State=#http_state{in=body_close, streams=[_|Tail]}) -> + _ = send_data_if_alive(<<>>, State, fin), + close_streams(Tail); +close(#http_state{streams=Streams}) -> + close_streams(Streams). + +close_streams([]) -> + ok; +close_streams([#stream{is_alive=false}|Tail]) -> + close_streams(Tail); +close_streams([#stream{ref=StreamRef, reply_to=ReplyTo}|Tail]) -> + ReplyTo ! {gun_error, self(), StreamRef, {closed, + "The connection was lost."}}, + close_streams(Tail). + +%% We don't send a keep-alive when a CONNECT request was initiated. +keepalive(State=#http_state{streams=[#stream{ref={connect, _, _}}]}) -> + State; +%% We can only keep-alive by sending an empty line in-between streams. +keepalive(State=#http_state{socket=Socket, transport=Transport, out=head}) -> + Transport:send(Socket, <<"\r\n">>), + State; +keepalive(State) -> + State. + +request(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers) -> + Host2 = case Host of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host + end, + Headers2 = lists:keydelete(<<"transfer-encoding">>, 1, Headers), + Headers3 = case lists:keymember(<<"host">>, 1, Headers) of + false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2]; + true -> Headers2 + end, + %% We use Headers2 because this is the smallest list. + Conn = conn_from_headers(Version, Headers2), + Out = request_io_from_headers(Headers2), + Headers4 = case Out of + body_chunked when Version =:= 'HTTP/1.0' -> Headers3; + body_chunked -> [{<<"transfer-encoding">>, <<"chunked">>}|Headers3]; + _ -> Headers3 + end, + Headers5 = transform_header_names(State, Headers4), + Transport:send(Socket, cow_http:request(Method, Path, Version, Headers5)), + new_stream(State#http_state{connection=Conn, out=Out}, StreamRef, ReplyTo, Method). + +request(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=head}, StreamRef, ReplyTo, Method, Host, Port, Path, Headers, Body) -> + Host2 = case Host of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host + end, + Headers2 = lists:keydelete(<<"content-length">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, Headers)), + Headers3 = case lists:keymember(<<"host">>, 1, Headers) of + false -> [{<<"host">>, [Host2, $:, integer_to_binary(Port)]}|Headers2]; + true -> Headers2 + end, + Headers4 = transform_header_names(State, Headers3), + %% We use Headers2 because this is the smallest list. + Conn = conn_from_headers(Version, Headers2), + Transport:send(Socket, [ + cow_http:request(Method, Path, Version, [ + {<<"content-length">>, integer_to_binary(iolist_size(Body))} + |Headers4]), + Body]), + new_stream(State#http_state{connection=Conn}, StreamRef, ReplyTo, Method). + +transform_header_names(#http_state{transform_header_name = Fun}, Headers) -> + lists:keymap(Fun, 1, Headers). + +%% We are expecting a new stream. +data(State=#http_state{out=head}, StreamRef, ReplyTo, _, _) -> + error_stream_closed(State, StreamRef, ReplyTo); +%% There are no active streams. +data(State=#http_state{streams=[]}, StreamRef, ReplyTo, _, _) -> + error_stream_not_found(State, StreamRef, ReplyTo); +%% We can only send data on the last created stream. +data(State=#http_state{socket=Socket, transport=Transport, version=Version, + out=Out, streams=Streams}, StreamRef, ReplyTo, IsFin, Data) -> + case lists:last(Streams) of + #stream{ref=StreamRef, is_alive=true} -> + DataLength = iolist_size(Data), + case Out of + body_chunked when Version =:= 'HTTP/1.1', IsFin =:= fin -> + case Data of + <<>> -> + Transport:send(Socket, cow_http_te:last_chunk()); + _ -> + Transport:send(Socket, [ + cow_http_te:chunk(Data), + cow_http_te:last_chunk() + ]) + end, + State#http_state{out=head}; + body_chunked when Version =:= 'HTTP/1.1' -> + Transport:send(Socket, cow_http_te:chunk(Data)), + State; + {body, Length} when DataLength =< Length -> + Transport:send(Socket, Data), + Length2 = Length - DataLength, + if + Length2 =:= 0, IsFin =:= fin -> + State#http_state{out=head}; + Length2 > 0, IsFin =:= nofin -> + State#http_state{out={body, Length2}} + end; + body_chunked -> %% HTTP/1.0 + Transport:send(Socket, Data), + State + end; + _ -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +connect(State=#http_state{streams=Streams}, StreamRef, ReplyTo, _, _) when Streams =/= [] -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "CONNECT can only be used with HTTP/1.1 when no other streams are active."}}, + State; +connect(State=#http_state{socket=Socket, transport=Transport, version=Version}, + StreamRef, ReplyTo, Destination=#{host := Host0}, Headers0) -> + Host = case Host0 of + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host0 + end, + Port = maps:get(port, Destination, 1080), + Authority = [Host, $:, integer_to_binary(Port)], + Headers1 = lists:keydelete(<<"content-length">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, Headers0)), + Headers2 = case lists:keymember(<<"host">>, 1, Headers1) of + false -> [{<<"host">>, Authority}|Headers1]; + true -> Headers1 + end, + HasProxyAuthorization = lists:keymember(<<"proxy-authorization">>, 1, Headers2), + Headers3 = case {HasProxyAuthorization, Destination} of + {false, #{username := UserID, password := Password}} -> + [{<<"proxy-authorization">>, [ + <<"Basic ">>, + base64:encode(iolist_to_binary([UserID, $:, Password]))]} + |Headers2]; + _ -> + Headers2 + end, + Headers = transform_header_names(State, Headers3), + Transport:send(Socket, [ + cow_http:request(<<"CONNECT">>, Authority, Version, Headers) + ]), + new_stream(State, {connect, StreamRef, Destination}, ReplyTo, <<"CONNECT">>). + +%% We can't cancel anything, we can just stop forwarding messages to the owner. +cancel(State, StreamRef, ReplyTo) -> + case is_stream(State, StreamRef) of + true -> + cancel_stream(State, StreamRef); + false -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +%% HTTP does not provide any way to figure out what streams are unprocessed. +down(#http_state{streams=Streams}) -> + KilledStreams = [case Ref of + {connect, Ref2, _} -> Ref2; + {websocket, Ref2, _, _, _} -> Ref2; + _ -> Ref + end || #stream{ref=Ref} <- Streams], + {KilledStreams, []}. + +error_stream_closed(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream has already been closed."}}, + State. + +error_stream_not_found(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream cannot be found."}}, + State. + +%% Headers information retrieval. + +conn_from_headers(Version, Headers) -> + case lists:keyfind(<<"connection">>, 1, Headers) of + false when Version =:= 'HTTP/1.0' -> + close; + false -> + keepalive; + {_, ConnHd} -> + ConnList = cow_http_hd:parse_connection(ConnHd), + case lists:member(<<"keep-alive">>, ConnList) of + true -> keepalive; + false -> close + end + end. + +request_io_from_headers(Headers) -> + case lists:keyfind(<<"content-length">>, 1, Headers) of + {_, <<"0">>} -> + head; + {_, Length} -> + {body, cow_http_hd:parse_content_length(Length)}; + _ -> + case lists:keymember(<<"content-type">>, 1, Headers) of + true -> body_chunked; + false -> head + end + end. + +response_io_from_headers(<<"HEAD">>, _, _, _) -> + head; +response_io_from_headers(_, _, Status, _) when (Status =:= 204) or (Status =:= 304) -> + head; +response_io_from_headers(_, Version, _Status, Headers) -> + case lists:keyfind(<<"transfer-encoding">>, 1, Headers) of + {_, TE} when Version =:= 'HTTP/1.1' -> + case cow_http_hd:parse_transfer_encoding(TE) of + [<<"chunked">>] -> body_chunked; + [<<"identity">>] -> body_close + end; + _ -> + case lists:keyfind(<<"content-length">>, 1, Headers) of + {_, <<"0">>} -> + head; + {_, Length} -> + {body, cow_http_hd:parse_content_length(Length)}; + _ -> + body_close + end + end. + +%% Streams. + +new_stream(State=#http_state{streams=Streams}, StreamRef, ReplyTo, Method) -> + State#http_state{streams=Streams + ++ [#stream{ref=StreamRef, reply_to=ReplyTo, + method=iolist_to_binary(Method), is_alive=true}]}. + +is_stream(#http_state{streams=Streams}, StreamRef) -> + lists:keymember(StreamRef, #stream.ref, Streams). + +cancel_stream(State=#http_state{streams=Streams}, StreamRef) -> + Streams2 = [case Ref of + StreamRef -> + Tuple#stream{is_alive=false}; + _ -> + Tuple + end || Tuple = #stream{ref=Ref} <- Streams], + State#http_state{streams=Streams2}. + +end_stream(State=#http_state{streams=[_|Tail]}) -> + State#http_state{in=head, streams=Tail}. + +%% Websocket upgrade. + +%% Ensure version is 1.1. +ws_upgrade(#http_state{version='HTTP/1.0'}, _, _, _, _, _, _) -> + error; %% @todo +ws_upgrade(State=#http_state{socket=Socket, transport=Transport, owner=Owner, out=head}, + StreamRef, Host, Port, Path, Headers0, WsOpts) -> + {Headers1, GunExtensions} = case maps:get(compress, WsOpts, false) of + true -> {[{<<"sec-websocket-extensions">>, + <<"permessage-deflate; client_max_window_bits; server_max_window_bits=15">>} + |Headers0], + [<<"permessage-deflate">>]}; + false -> {Headers0, []} + end, + Headers2 = case maps:get(protocols, WsOpts, []) of + [] -> Headers1; + ProtoOpt -> + << _, _, Proto/bits >> = iolist_to_binary([[<<", ">>, P] || {P, _} <- ProtoOpt]), + [{<<"sec-websocket-protocol">>, Proto}|Headers1] + end, + Key = cow_ws:key(), + Headers3 = [ + {<<"connection">>, <<"upgrade">>}, + {<<"upgrade">>, <<"websocket">>}, + {<<"sec-websocket-version">>, <<"13">>}, + {<<"sec-websocket-key">>, Key} + |Headers2 + ], + IsSecure = Transport =:= gun_tls, + Headers = case lists:keymember(<<"host">>, 1, Headers0) of + true -> Headers3; + false when Port =:= 80, not IsSecure -> [{<<"host">>, Host}|Headers3]; + false when Port =:= 443, IsSecure -> [{<<"host">>, Host}|Headers3]; + false -> [{<<"host">>, [Host, $:, integer_to_binary(Port)]}|Headers3] + end, + Transport:send(Socket, cow_http:request(<<"GET">>, Path, 'HTTP/1.1', Headers)), + new_stream(State#http_state{connection=keepalive, out=head}, + {websocket, StreamRef, Key, GunExtensions, WsOpts}, Owner, <<"GET">>). + +ws_handshake(Buffer, State, StreamRef, Headers, Key, GunExtensions, Opts) -> + %% @todo check upgrade, connection + case lists:keyfind(<<"sec-websocket-accept">>, 1, Headers) of + false -> + close; + {_, Accept} -> + case cow_ws:encode_key(Key) of + Accept -> + ws_handshake_extensions(Buffer, State, StreamRef, + Headers, GunExtensions, Opts); + _ -> + close + end + end. + +ws_handshake_extensions(Buffer, State, StreamRef, Headers, GunExtensions, Opts) -> + case lists:keyfind(<<"sec-websocket-extensions">>, 1, Headers) of + false -> + ws_handshake_protocols(Buffer, State, StreamRef, Headers, #{}, Opts); + {_, ExtHd} -> + case ws_validate_extensions(cow_http_hd:parse_sec_websocket_extensions(ExtHd), GunExtensions, #{}, Opts) of + close -> + close; + Extensions -> + ws_handshake_protocols(Buffer, State, StreamRef, Headers, Extensions, Opts) + end + end. + +ws_validate_extensions([], _, Acc, _) -> + Acc; +ws_validate_extensions([{Name = <<"permessage-deflate">>, Params}|Tail], GunExts, Acc, Opts) -> + case lists:member(Name, GunExts) of + true -> + case cow_ws:validate_permessage_deflate(Params, Acc, Opts) of + {ok, Acc2} -> ws_validate_extensions(Tail, GunExts, Acc2, Opts); + error -> close + end; + %% Fail the connection if extension was not requested. + false -> + close + end; +%% Fail the connection on unknown extension. +ws_validate_extensions(_, _, _, _) -> + close. + +%% @todo Validate protocols. +ws_handshake_protocols(Buffer, State, StreamRef, Headers, Extensions, Opts) -> + case lists:keyfind(<<"sec-websocket-protocol">>, 1, Headers) of + false -> + ws_handshake_end(Buffer, State, StreamRef, Headers, Extensions, + maps:get(default_protocol, Opts, gun_ws_h), Opts); + {_, Proto} -> + ProtoOpt = maps:get(protocols, Opts, []), + case lists:keyfind(Proto, 1, ProtoOpt) of + {_, Handler} -> + ws_handshake_end(Buffer, State, StreamRef, + Headers, Extensions, Handler, Opts); + false -> + close + end + end. + +ws_handshake_end(Buffer, #http_state{owner=Owner, socket=Socket, transport=Transport}, + StreamRef, Headers, Extensions, Handler, Opts) -> + %% Send ourselves the remaining buffer, if any. + _ = case Buffer of + <<>> -> + ok; + _ -> + {OK, _, _} = Transport:messages(), + self() ! {OK, Socket, Buffer} + end, + gun_ws:init(Owner, Socket, Transport, StreamRef, Headers, Extensions, Handler, Opts). diff --git a/deps/gun/src/gun_http2.erl b/deps/gun/src/gun_http2.erl new file mode 100644 index 0000000..dcc1c88 --- /dev/null +++ b/deps/gun/src/gun_http2.erl @@ -0,0 +1,707 @@ +%% Copyright (c) 2016-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_http2). + +-export([check_options/1]). +-export([name/0]). +-export([init/4]). +-export([handle/2]). +-export([close/1]). +-export([keepalive/1]). +-export([request/8]). +-export([request/9]). +-export([data/5]). +-export([cancel/3]). +-export([down/1]). + +-record(stream, { + id :: non_neg_integer(), + ref :: reference(), + reply_to :: pid(), + %% Whether we finished sending data. + local = nofin :: fin | nofin, + %% Local flow control window (how much we can send). + local_window :: integer(), + %% Buffered data waiting for the flow control window to increase. + local_buffer = queue:new() :: queue:queue( + {fin | nofin, non_neg_integer(), iolist()}), + local_buffer_size = 0 :: non_neg_integer(), + local_trailers = undefined :: undefined | cow_http:headers(), + %% Whether we finished receiving data. + remote = nofin :: fin | nofin, + %% Remote flow control window (how much we accept to receive). + remote_window :: integer(), + %% Content handlers state. + handler_state :: undefined | gun_content_handler:state() +}). + +-record(http2_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + opts = #{} :: map(), %% @todo + content_handlers :: gun_content_handler:opt(), + buffer = <<>> :: binary(), + + local_settings = #{ + initial_window_size => 65535, + max_frame_size => 16384 + } :: map(), + remote_settings = #{ + initial_window_size => 65535 + } :: map(), + + %% Connection-wide flow control window. + local_window = 65535 :: integer(), %% How much we can send. + remote_window = 65535 :: integer(), %% How much we accept to receive. + + streams = [] :: [#stream{}], + stream_id = 1 :: non_neg_integer(), + + %% The client starts by sending a sequence of bytes as a preface, + %% followed by a potentially empty SETTINGS frame. Then the connection + %% is established and continues normally. An exception is when a HEADERS + %% frame is sent followed by CONTINUATION frames: no other frame can be + %% sent in between. + parse_state = undefined :: preface | normal + | {continuation, cowboy_stream:streamid(), cowboy_stream:fin(), binary()}, + + %% HPACK decoding and encoding state. + decode_state = cow_hpack:init() :: cow_hpack:state(), + encode_state = cow_hpack:init() :: cow_hpack:state() +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([Opt={content_handlers, Handlers}|Opts]) -> + case gun_content_handler:check_option(Handlers) of + ok -> do_check_options(Opts); + error -> {error, {options, {http, Opt}}} + end; +do_check_options([{keepalive, infinity}|Opts]) -> + do_check_options(Opts); +do_check_options([{keepalive, K}|Opts]) when is_integer(K), K > 0 -> + do_check_options(Opts); +%% @todo max_frame_size_sent +do_check_options([Opt|_]) -> + {error, {options, {http2, Opt}}}. + +name() -> http2. + +init(Owner, Socket, Transport, Opts) -> + Handlers = maps:get(content_handlers, Opts, [gun_data_h]), + State = #http2_state{owner=Owner, socket=Socket, + transport=Transport, opts=Opts, content_handlers=Handlers, + parse_state=preface}, + #http2_state{local_settings=Settings} = State, + %% Send the HTTP/2 preface. + Transport:send(Socket, [ + << "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n">>, + cow_http2:settings(Settings) + ]), + State. + +handle(Data, State=#http2_state{buffer=Buffer}) -> + parse(<< Buffer/binary, Data/binary >>, State#http2_state{buffer= <<>>}). + +parse(Data0, State0=#http2_state{buffer=Buffer, parse_state=preface}) -> + Data = << Buffer/binary, Data0/binary >>, + case cow_http2:parse(Data) of + {ok, Frame, Rest} when element(1, Frame) =:= settings -> + case frame(Frame, State0#http2_state{parse_state=normal}) of + close -> close; + Error = {error, _} -> Error; + State -> parse(Rest, State) + end; + more -> + case Data of + %% Maybe we have a proper SETTINGS frame. + <<_:24,4:8,_/bits>> -> + {state, State0#http2_state{buffer=Data}}; + %% Not a SETTINGS frame, this is an invalid preface. + <<"HTTP/1",_/bits>> -> + terminate(State0, {connection_error, protocol_error, + 'Invalid connection preface received. Appears to be an HTTP/1 response? (RFC7540 3.5)'}); + _ -> + terminate(State0, {connection_error, protocol_error, + 'Invalid connection preface received. (RFC7540 3.5)'}) + end; + %% Any error in the preface is converted to this specific error + %% to make debugging the problem easier (it's the server's fault). + _ -> + Reason = case Data of + <<"HTTP/1",_/bits>> -> + 'Invalid connection preface received. Appears to be an HTTP/1 response? (RFC7540 3.5)'; + _ -> + 'Invalid connection preface received. (RFC7540 3.5)' + end, + terminate(State0, {connection_error, protocol_error, Reason}) + end; +parse(Data0, State0=#http2_state{buffer=Buffer, parse_state=PS}) -> + Data = << Buffer/binary, Data0/binary >>, + case cow_http2:parse(Data) of + {ok, Frame, Rest} when PS =:= normal -> + case frame(Frame, State0) of + close -> close; + Error = {error, _} -> Error; + State1 -> parse(Rest, State1) + end; + {ok, Frame, Rest} when element(1, PS) =:= continuation -> + case continuation_frame(Frame, State0) of + close -> close; + Error = {error, _} -> Error; + State1 -> parse(Rest, State1) + end; + {ignore, _} when element(1, PS) =:= continuation -> + terminate(State0, {connection_error, protocol_error, + 'An invalid frame was received in the middle of a header block. (RFC7540 6.2)'}); + {ignore, Rest} -> + parse(Rest, State0); + {stream_error, StreamID, Reason, Human, Rest} -> + parse(Rest, stream_reset(State0, StreamID, {stream_error, Reason, Human})); + Error = {connection_error, _, _} -> + terminate(State0, Error); + more -> + {state, State0#http2_state{buffer=Data}} + end. + +%% DATA frame. +frame({data, StreamID, IsFin, Data}, State0=#http2_state{remote_window=ConnWindow}) -> + case get_stream_by_id(StreamID, State0) of + Stream0 = #stream{remote=nofin, remote_window=StreamWindow, handler_state=Handlers0} -> + Handlers = gun_content_handler:handle(IsFin, Data, Handlers0), + {Stream, State} = send_window_update( + Stream0#stream{remote_window=StreamWindow - byte_size(Data), + handler_state=Handlers}, + State0#http2_state{remote_window=ConnWindow - byte_size(Data)}), + remote_fin(Stream, State, IsFin); + _ -> + %% @todo protocol_error if not existing + stream_reset(State0, StreamID, {stream_error, stream_closed, + 'DATA frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end; +%% Single HEADERS frame headers block. +frame({headers, StreamID, IsFin, head_fin, HeaderBlock}, State) -> + stream_decode_init(State, StreamID, IsFin, HeaderBlock); +%% HEADERS frame starting a headers block. Enter continuation mode. +frame({headers, StreamID, IsFin, head_nofin, HeaderBlockFragment}, State) -> + State#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}}; +%% Single HEADERS frame headers block with priority. +frame({headers, StreamID, IsFin, head_fin, + _IsExclusive, _DepStreamID, _Weight, HeaderBlock}, State) -> + stream_decode_init(State, StreamID, IsFin, HeaderBlock); +%% @todo HEADERS frame starting a headers block. Enter continuation mode. +%frame(State, {headers, StreamID, IsFin, head_nofin, +% _IsExclusive, _DepStreamID, _Weight, HeaderBlockFragment}) -> +% %% @todo Handle priority. +% State#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}}; +%% @todo PRIORITY frame. +%frame(State, {priority, _StreamID, _IsExclusive, _DepStreamID, _Weight}) -> +% %% @todo Validate StreamID? +% %% @todo Handle priority. +% State; +%% @todo RST_STREAM frame. +frame({rst_stream, StreamID, Reason}, State) -> + stream_reset(State, StreamID, {stream_error, Reason, 'Stream reset by server.'}); +%% SETTINGS frame. +frame({settings, Settings}, State=#http2_state{socket=Socket, transport=Transport, + remote_settings=Settings0}) -> + Transport:send(Socket, cow_http2:settings_ack()), + State#http2_state{remote_settings=maps:merge(Settings0, Settings)}; +%% Ack for a previously sent SETTINGS frame. +frame(settings_ack, State) -> %% @todo =#http2_state{next_settings=_NextSettings}) -> + %% @todo Apply SETTINGS that require synchronization. + State; +%% PUSH_PROMISE frame. +%% @todo Continuation. +frame({push_promise, StreamID, head_fin, PromisedStreamID, HeaderBlock}, + State=#http2_state{streams=Streams, decode_state=DecodeState0}) -> + case get_stream_by_id(PromisedStreamID, State) of + false -> + case get_stream_by_id(StreamID, State) of + #stream{ref=StreamRef, reply_to=ReplyTo} -> + try cow_hpack:decode(HeaderBlock, DecodeState0) of + {Headers0, DecodeState} -> + {Method, Scheme, Authority, Path, Headers} = try + {value, {_, Method0}, Headers1} = lists:keytake(<<":method">>, 1, Headers0), + {value, {_, Scheme0}, Headers2} = lists:keytake(<<":scheme">>, 1, Headers1), + {value, {_, Authority0}, Headers3} = lists:keytake(<<":authority">>, 1, Headers2), + {value, {_, Path0}, Headers4} = lists:keytake(<<":path">>, 1, Headers3), + {Method0, Scheme0, Authority0, Path0, Headers4} + catch error:badmatch -> + stream_reset(State, StreamID, {stream_error, protocol_error, + 'Malformed push promise; missing pseudo-header field. (RFC7540 8.1.2.3)'}) + end, + NewStreamRef = make_ref(), + ReplyTo ! {gun_push, self(), StreamRef, NewStreamRef, Method, + iolist_to_binary([Scheme, <<"://">>, Authority, Path]), Headers}, + NewStream = new_stream(PromisedStreamID, NewStreamRef, ReplyTo, + nofin, fin, State), + State#http2_state{streams=[NewStream|Streams], decode_state=DecodeState} + catch _:_ -> + terminate(State, {connection_error, compression_error, + 'Error while trying to decode HPACK-encoded header block. (RFC7540 4.3)'}) + end; + _ -> + stream_reset(State, StreamID, {stream_error, stream_closed, + 'DATA frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end; + _ -> + stream_reset(State, StreamID, {stream_error, todo, ''}) + end; +%% PING frame. +frame({ping, Opaque}, State=#http2_state{socket=Socket, transport=Transport}) -> + Transport:send(Socket, cow_http2:ping_ack(Opaque)), + State; +%% Ack for a previously sent PING frame. +%% +%% @todo Might want to check contents but probably a waste of time. +frame({ping_ack, _Opaque}, State) -> + State; +%% GOAWAY frame. +frame(Frame={goaway, StreamID, _, _}, State) -> + terminate(State, StreamID, {stop, Frame, 'Client is going away.'}); +%% Connection-wide WINDOW_UPDATE frame. +frame({window_update, Increment}, State=#http2_state{local_window=ConnWindow}) + when ConnWindow + Increment > 16#7fffffff -> + terminate(State, {connection_error, flow_control_error, + 'The flow control window must not be greater than 2^31-1. (RFC7540 6.9.1)'}); +frame({window_update, Increment}, State=#http2_state{local_window=ConnWindow}) -> + send_data(State#http2_state{local_window=ConnWindow + Increment}); +%% Stream-specific WINDOW_UPDATE frame. +frame({window_update, StreamID, Increment}, State0=#http2_state{streams=Streams0}) -> + case lists:keyfind(StreamID, #stream.id, Streams0) of + #stream{local_window=StreamWindow} when StreamWindow + Increment > 16#7fffffff -> + stream_reset(State0, StreamID, {stream_error, flow_control_error, + 'The flow control window must not be greater than 2^31-1. (RFC7540 6.9.1)'}); + Stream0 = #stream{local_window=StreamWindow} -> + {State, Stream} = send_data(State0, + Stream0#stream{local_window=StreamWindow + Increment}), + Streams = lists:keystore(StreamID, #stream.id, Streams0, Stream), + State#http2_state{streams=Streams}; + false -> + %% @todo Receiving this frame on a stream in the idle state is an error. + %% WINDOW_UPDATE frames may be received for a short period of time + %% after a stream is closed. They must be ignored. + State0 + end; +%% Unexpected CONTINUATION frame. +frame({continuation, StreamID, _, _}, State) -> + terminate(State, StreamID, {connection_error, protocol_error, + 'CONTINUATION frames MUST be preceded by a HEADERS frame. (RFC7540 6.10)'}). + +continuation_frame({continuation, StreamID, head_fin, HeaderBlockFragment1}, + State=#http2_state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment0}}) -> + HeaderBlock = << HeaderBlockFragment0/binary, HeaderBlockFragment1/binary >>, + stream_decode_init(State#http2_state{parse_state=normal}, StreamID, IsFin, HeaderBlock); +continuation_frame({continuation, StreamID, head_nofin, HeaderBlockFragment1}, + State=#http2_state{parse_state= + {continuation, StreamID, IsFin, HeaderBlockFragment0}}) -> + State#http2_state{parse_state={continuation, StreamID, IsFin, + << HeaderBlockFragment0/binary, HeaderBlockFragment1/binary >>}}; +continuation_frame(_, State) -> + terminate(State, {connection_error, protocol_error, + 'An invalid frame was received in the middle of a header block. (RFC7540 6.2)'}). + +send_window_update(Stream=#stream{id=StreamID, remote_window=StreamWindow0}, + State=#http2_state{socket=Socket, transport=Transport, remote_window=ConnWindow0}) -> + %% @todo We should make the windows configurable. + MinConnWindow = 8000000, + MinStreamWindow = 1000000, + ConnWindow = if + ConnWindow0 =< MinConnWindow -> + Transport:send(Socket, cow_http2:window_update(MinConnWindow)), + ConnWindow0 + MinConnWindow; + true -> + ConnWindow0 + end, + StreamWindow = if + StreamWindow0 =< MinStreamWindow -> + Transport:send(Socket, cow_http2:window_update(StreamID, MinStreamWindow)), + StreamWindow0 + MinStreamWindow; + true -> + StreamWindow0 + end, + {Stream#stream{remote_window=StreamWindow}, + State#http2_state{remote_window=ConnWindow}}. + +close(#http2_state{streams=Streams}) -> + close_streams(Streams). + +close_streams([]) -> + ok; +close_streams([#stream{ref=StreamRef, reply_to=ReplyTo}|Tail]) -> + ReplyTo ! {gun_error, self(), StreamRef, {closed, + "The connection was lost."}}, + close_streams(Tail). + +keepalive(State=#http2_state{socket=Socket, transport=Transport}) -> + Transport:send(Socket, cow_http2:ping(0)), + State. + +request(State=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0, + streams=Streams, stream_id=StreamID}, StreamRef, ReplyTo, + Method, Host, Port, Path, Headers) -> + {HeaderBlock, EncodeState} = prepare_headers(EncodeState0, Transport, Method, Host, Port, Path, Headers), + IsFin = case (false =/= lists:keyfind(<<"content-type">>, 1, Headers)) + orelse (false =/= lists:keyfind(<<"content-length">>, 1, Headers)) of + true -> nofin; + false -> fin + end, + Transport:send(Socket, cow_http2:headers(StreamID, IsFin, HeaderBlock)), + Stream = new_stream(StreamID, StreamRef, ReplyTo, nofin, IsFin, State), + State#http2_state{streams=[Stream|Streams], stream_id=StreamID + 2, encode_state=EncodeState}. + +%% @todo Handle Body > 16MB. (split it out into many frames) +request(State0=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0, + streams=Streams, stream_id=StreamID}, StreamRef, ReplyTo, + Method, Host, Port, Path, Headers0, Body) -> + Headers = lists:keystore(<<"content-length">>, 1, Headers0, + {<<"content-length">>, integer_to_binary(iolist_size(Body))}), + {HeaderBlock, EncodeState} = prepare_headers(EncodeState0, Transport, Method, Host, Port, Path, Headers), + Transport:send(Socket, cow_http2:headers(StreamID, nofin, HeaderBlock)), + Stream0 = new_stream(StreamID, StreamRef, ReplyTo, nofin, nofin, State0), + {State, Stream} = send_data(State0, Stream0, fin, Body), + State#http2_state{streams=[Stream|Streams], stream_id=StreamID + 2, encode_state=EncodeState}. + +prepare_headers(EncodeState, Transport, Method, Host0, Port, Path, Headers0) -> + Host2 = case Host0 of + {local, _SocketPath} -> <<>>; + Tuple when is_tuple(Tuple) -> inet:ntoa(Tuple); + _ -> Host0 + end, + Authority = case lists:keyfind(<<"host">>, 1, Headers0) of + {_, Host} -> Host; + _ -> [Host2, $:, integer_to_binary(Port)] + end, + %% @todo We also must remove any header found in the connection header. + Headers1 = + lists:keydelete(<<"host">>, 1, + lists:keydelete(<<"connection">>, 1, + lists:keydelete(<<"keep-alive">>, 1, + lists:keydelete(<<"proxy-connection">>, 1, + lists:keydelete(<<"transfer-encoding">>, 1, + lists:keydelete(<<"upgrade">>, 1, Headers0)))))), + Headers = [ + {<<":method">>, Method}, + {<<":scheme">>, case Transport of + gun_tls -> <<"https">>; + gun_tcp -> <<"http">> + end}, + {<<":authority">>, Authority}, + {<<":path">>, Path} + |Headers1], + cow_hpack:encode(Headers, EncodeState). + +data(State0, StreamRef, ReplyTo, IsFin, Data) -> + case get_stream_by_ref(StreamRef, State0) of + #stream{local=fin} -> + error_stream_closed(State0, StreamRef, ReplyTo); + Stream0 = #stream{} -> + {State, Stream} = send_data(State0, Stream0, IsFin, Data), + maybe_delete_stream(State, Stream); + false -> + error_stream_not_found(State0, StreamRef, ReplyTo) + end. + +%% @todo Should we ever want to implement the PRIORITY mechanism, +%% this would be the place to do it. Right now, we just go over +%% all streams and send what we can until either everything is +%% sent or we run out of space in the window. +send_data(State=#http2_state{streams=Streams}) -> + resume_streams(State, Streams, []). + +%% When SETTINGS_INITIAL_WINDOW_SIZE changes we need to update +%% the local stream windows for all active streams and perhaps +%% resume sending data. +%update_streams_local_window(State=#http2_state{streams=Streams0}, Increment) -> +% Streams = [ +% S#stream{local_window=StreamWindow + Increment} +% || S=#stream{local_window=StreamWindow} <- Streams0], +% resume_streams(State, Streams, []). + +%% When we receive an ack to a SETTINGS frame we sent we need to update +%% the remote stream windows for all active streams. +%update_streams_remote_window(State=#http2_state{streams=Streams0}, Increment) -> +% Streams = [ +% S#stream{remote_window=StreamWindow + Increment} +% || S=#stream{remote_window=StreamWindow} <- Streams0], +% State#http2_state{streams=Streams}. + +resume_streams(State, [], Acc) -> + State#http2_state{streams=lists:reverse(Acc)}; +%% While technically we should never get < 0 here, let's be on the safe side. +resume_streams(State=#http2_state{local_window=ConnWindow}, Streams, Acc) + when ConnWindow =< 0 -> + State#http2_state{streams=lists:reverse(Acc, Streams)}; +%% We rely on send_data/2 to do all the necessary checks about the stream. +resume_streams(State0, [Stream0|Tail], Acc) -> + {State1, Stream} = send_data(State0, Stream0), + resume_streams(State1, Tail, [Stream|Acc]). + +send_data(State, Stream=#stream{local=Local, local_buffer_size=0, local_trailers=Trailers}) + when (Trailers =/= undefined) andalso ((Local =:= idle) orelse (Local =:= nofin)) -> + send_trailers(State, Stream#stream{local_trailers=undefined}, Trailers); +%% @todo It's possible that the stream terminates. We must remove it. +send_data(State=#http2_state{local_window=ConnWindow}, + Stream=#stream{local=IsFin, local_window=StreamWindow, local_buffer_size=BufferSize}) + when ConnWindow =< 0; IsFin =:= fin; StreamWindow =< 0; BufferSize =:= 0 -> + {State, Stream}; +send_data(State0, Stream0=#stream{local_buffer=Q0, local_buffer_size=BufferSize}) -> + %% We know there is an item in the queue. + {{value, {IsFin, DataSize, Data}}, Q} = queue:out(Q0), + {State, Stream} = send_data(State0, + Stream0#stream{local_buffer=Q, local_buffer_size=BufferSize - DataSize}, + IsFin, Data, in_r), + send_data(State, Stream). + +send_data(State, Stream, IsFin, Data) -> + send_data(State, Stream, IsFin, Data, in). + +%% We can send trailers immediately if the queue is empty, otherwise we queue. +%% We always send trailer frames even if the window is empty. +send_data(State, Stream=#stream{local_buffer_size=0}, fin, {trailers, Trailers}, _) -> + send_trailers(State, Stream, Trailers); +send_data(State, Stream, fin, {trailers, Trailers}, _) -> + {State, Stream#stream{local_trailers=Trailers}}; +%% Send data immediately if we can, buffer otherwise. +send_data(State=#http2_state{local_window=ConnWindow}, + Stream=#stream{local_window=StreamWindow}, IsFin, Data, In) + when ConnWindow =< 0; StreamWindow =< 0 -> + {State, queue_data(Stream, IsFin, Data, In)}; +send_data(State=#http2_state{socket=Socket, transport=Transport, opts=Opts, + remote_settings=RemoteSettings, local_window=ConnWindow}, + Stream=#stream{id=StreamID, local_window=StreamWindow}, IsFin, Data, In) -> + RemoteMaxFrameSize = maps:get(max_frame_size, RemoteSettings, 16384), + ConfiguredMaxFrameSize = maps:get(max_frame_size_sent, Opts, infinity), + MaxSendSize = min( + min(ConnWindow, StreamWindow), + min(RemoteMaxFrameSize, ConfiguredMaxFrameSize) + ), + case Data of +% {sendfile, Offset, Bytes, Path} when Bytes =< MaxSendSize -> +% Transport:send(Socket, cow_http2:data_header(StreamID, IsFin, Bytes)), +% Transport:sendfile(Socket, Path, Offset, Bytes), +% {State#http2_state{local_window=ConnWindow - Bytes}, +% Stream#stream{local=IsFin, local_window=StreamWindow - Bytes}}; +% {sendfile, Offset, Bytes, Path} -> +% Transport:send(Socket, cow_http2:data_header(StreamID, nofin, MaxSendSize)), +% Transport:sendfile(Socket, Path, Offset, MaxSendSize), +% send_data(State#http2_state{local_window=ConnWindow - MaxSendSize}, +% Stream#stream{local_window=StreamWindow - MaxSendSize}, +% IsFin, {sendfile, Offset + MaxSendSize, Bytes - MaxSendSize, Path}, In); + Iolist0 -> + IolistSize = iolist_size(Iolist0), + if + IolistSize =< MaxSendSize -> + Transport:send(Socket, cow_http2:data(StreamID, IsFin, Iolist0)), + {State#http2_state{local_window=ConnWindow - IolistSize}, + Stream#stream{local=IsFin, local_window=StreamWindow - IolistSize}}; + true -> + {Iolist, More} = cow_iolists:split(MaxSendSize, Iolist0), + Transport:send(Socket, cow_http2:data(StreamID, nofin, Iolist)), + send_data(State#http2_state{local_window=ConnWindow - MaxSendSize}, + Stream#stream{local_window=StreamWindow - MaxSendSize}, + IsFin, More, In) + end + end. + +send_trailers(State=#http2_state{socket=Socket, transport=Transport, encode_state=EncodeState0}, + Stream=#stream{id=StreamID}, Trailers) -> + {HeaderBlock, EncodeState} = cow_hpack:encode(Trailers, EncodeState0), + Transport:send(Socket, cow_http2:headers(StreamID, fin, HeaderBlock)), + {State#http2_state{encode_state=EncodeState}, Stream#stream{local=fin}}. + +queue_data(Stream=#stream{local_buffer=Q0, local_buffer_size=Size0}, IsFin, Data, In) -> + DataSize = case Data of +% {sendfile, _, Bytes, _} -> Bytes; + Iolist -> iolist_size(Iolist) + end, + Q = queue:In({IsFin, DataSize, Data}, Q0), + Stream#stream{local_buffer=Q, local_buffer_size=Size0 + DataSize}. + +cancel(State=#http2_state{socket=Socket, transport=Transport}, + StreamRef, ReplyTo) -> + case get_stream_by_ref(StreamRef, State) of + #stream{id=StreamID} -> + Transport:send(Socket, cow_http2:rst_stream(StreamID, cancel)), + delete_stream(StreamID, State); + false -> + error_stream_not_found(State, StreamRef, ReplyTo) + end. + +%% @todo Add unprocessed streams when GOAWAY handling is done. +down(#http2_state{streams=Streams}) -> + KilledStreams = [Ref || #stream{ref=Ref} <- Streams], + {KilledStreams, []}. + +terminate(#http2_state{socket=Socket, transport=Transport, streams=Streams}, Reason) -> + %% Because a particular stream is unknown, + %% we're sending the error message to all streams. + %% @todo We should not send duplicate messages to processes. + %% @todo We should probably also inform the owner process. + _ = [ReplyTo ! {gun_error, self(), Reason} || #stream{reply_to=ReplyTo} <- Streams], + %% @todo LastGoodStreamID + Transport:send(Socket, cow_http2:goaway(0, terminate_reason(Reason), <<>>)), + terminate_ret(Reason). + +terminate(State=#http2_state{socket=Socket, transport=Transport}, StreamID, Reason) -> + case get_stream_by_id(StreamID, State) of + #stream{reply_to=ReplyTo} -> + ReplyTo ! {gun_error, self(), Reason}, + %% @todo LastGoodStreamID + Transport:send(Socket, cow_http2:goaway(0, terminate_reason(Reason), <<>>)), + terminate_ret(Reason); + _ -> + terminate(State, Reason) + end. + +terminate_reason({connection_error, Reason, _}) -> Reason; +terminate_reason({stop, _, _}) -> no_error. + +terminate_ret(Reason={connection_error, _, _}) -> {error, Reason}; +terminate_ret(_) -> close. + +%% Stream functions. + +stream_decode_init(State=#http2_state{decode_state=DecodeState0}, StreamID, IsFin, HeaderBlock) -> + try cow_hpack:decode(HeaderBlock, DecodeState0) of + {Headers, DecodeState} -> + stream_pseudo_headers_init(State#http2_state{decode_state=DecodeState}, + StreamID, IsFin, Headers) + catch _:_ -> + terminate(State, {connection_error, compression_error, + 'Error while trying to decode HPACK-encoded header block. (RFC7540 4.3)'}) + end. + +stream_pseudo_headers_init(State, StreamID, IsFin, Headers0) -> + case pseudo_headers(Headers0, #{}) of + {ok, PseudoHeaders, Headers} -> + stream_resp_init(State, StreamID, IsFin, Headers, PseudoHeaders); +%% @todo When we handle trailers properly: +% {ok, _, _} -> +% stream_malformed(State, StreamID, +% 'A required pseudo-header was not found. (RFC7540 8.1.2.3)'); +%% Or: +% {ok, _, _} -> +% stream_reset(State, StreamID, {stream_error, protocol_error, +% 'Malformed response; missing :status in HEADERS frame. (RFC7540 8.1.2.4)'}) + {error, HumanReadable} -> + stream_reset(State, StreamID, {stream_error, protocol_error, HumanReadable}) + end. + +pseudo_headers([{<<":status">>, _}|_], #{status := _}) -> + {error, 'Multiple :status pseudo-headers were found. (RFC7540 8.1.2.3)'}; +pseudo_headers([{<<":status">>, Status}|Tail], PseudoHeaders) -> + try cow_http:status_to_integer(Status) of + IntStatus -> + pseudo_headers(Tail, PseudoHeaders#{status => IntStatus}) + catch _:_ -> + {error, 'The :status pseudo-header value is invalid. (RFC7540 8.1.2.4)'} + end; +pseudo_headers([{<<":", _/bits>>, _}|_], _) -> + {error, 'An unknown or invalid pseudo-header was found. (RFC7540 8.1.2.1)'}; +pseudo_headers(Headers, PseudoHeaders) -> + {ok, PseudoHeaders, Headers}. + +stream_resp_init(State=#http2_state{content_handlers=Handlers0}, + StreamID, IsFin, Headers, PseudoHeaders) -> + case get_stream_by_id(StreamID, State) of + Stream = #stream{ref=StreamRef, reply_to=ReplyTo, remote=nofin} -> + case PseudoHeaders of + #{status := Status} when Status >= 100, Status =< 199 -> + ReplyTo ! {gun_inform, self(), StreamRef, Status, Headers}, + State; + #{status := Status} -> + ReplyTo ! {gun_response, self(), StreamRef, IsFin, Status, Headers}, + Handlers = case IsFin of + fin -> undefined; + nofin -> + gun_content_handler:init(ReplyTo, StreamRef, + Status, Headers, Handlers0) + end, + remote_fin(Stream#stream{handler_state=Handlers}, State, IsFin); + %% @todo For now we assume that it's a trailer if there's no :status. + %% A better state machine is needed to distinguish between that and errors. + _ -> + %% @todo We probably want to pass this to gun_content_handler? + ReplyTo ! {gun_trailers, self(), StreamRef, Headers}, + remote_fin(Stream, State, fin) + end; + _ -> + stream_reset(State, StreamID, {stream_error, stream_closed, + 'HEADERS frame received for a closed or non-existent stream. (RFC7540 6.1)'}) + end. + +stream_reset(State=#http2_state{socket=Socket, transport=Transport, + streams=Streams0}, StreamID, StreamError={stream_error, Reason, _}) -> + Transport:send(Socket, cow_http2:rst_stream(StreamID, Reason)), + case lists:keytake(StreamID, #stream.id, Streams0) of + {value, #stream{ref=StreamRef, reply_to=ReplyTo}, Streams} -> + ReplyTo ! {gun_error, self(), StreamRef, StreamError}, + State#http2_state{streams=Streams}; + false -> + %% @todo Unknown stream. Not sure what to do here. Check again once all + %% terminate calls have been written. + State + end. + +error_stream_closed(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream has already been closed."}}, + State. + +error_stream_not_found(State, StreamRef, ReplyTo) -> + ReplyTo ! {gun_error, self(), StreamRef, {badstate, + "The stream cannot be found."}}, + State. + +%% Streams. +%% @todo probably change order of args and have state first? + +new_stream(StreamID, StreamRef, ReplyTo, Remote, Local, #http2_state{ + local_settings=#{initial_window_size := RemoteWindow}, + remote_settings=#{initial_window_size := LocalWindow}}) -> + #stream{id=StreamID, ref=StreamRef, reply_to=ReplyTo, + remote=Remote, remote_window=RemoteWindow, + local=Local, local_window=LocalWindow}. + +get_stream_by_id(StreamID, #http2_state{streams=Streams}) -> + lists:keyfind(StreamID, #stream.id, Streams). + +get_stream_by_ref(StreamRef, #http2_state{streams=Streams}) -> + lists:keyfind(StreamRef, #stream.ref, Streams). + +delete_stream(StreamID, State=#http2_state{streams=Streams}) -> + Streams2 = lists:keydelete(StreamID, #stream.id, Streams), + State#http2_state{streams=Streams2}. + +remote_fin(S=#stream{local=fin}, State, fin) -> + delete_stream(S#stream.id, State); +%% We always replace the stream in the state because +%% the content handler state has changed. +remote_fin(S, State=#http2_state{streams=Streams}, IsFin) -> + Streams2 = lists:keyreplace(S#stream.id, #stream.id, Streams, + S#stream{remote=IsFin}), + State#http2_state{streams=Streams2}. + +maybe_delete_stream(State, Stream=#stream{local=fin, remote=fin}) -> + delete_stream(Stream#stream.id, State); +maybe_delete_stream(State=#http2_state{streams=Streams}, Stream) -> + State#http2_state{streams= + lists:keyreplace(Stream#stream.id, #stream.id, Streams, Stream)}. diff --git a/deps/gun/src/gun_sse_h.erl b/deps/gun/src/gun_sse_h.erl new file mode 100644 index 0000000..be1c68e --- /dev/null +++ b/deps/gun/src/gun_sse_h.erl @@ -0,0 +1,55 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_sse_h). +-behavior(gun_content_handler). + +-export([init/5]). +-export([handle/3]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference(), + sse_state :: cow_sse:state() +}). + +%% @todo In the future we want to allow different media types. +%% @todo For text/event-stream specifically, the parameters must be ignored. + +-spec init(pid(), reference(), _, cow_http:headers(), _) + -> {ok, #state{}} | disable. +init(ReplyTo, StreamRef, _, Headers, _) -> + case lists:keyfind(<<"content-type">>, 1, Headers) of + {_, <<"text/event-stream">>} -> + {ok, #state{reply_to=ReplyTo, stream_ref=StreamRef, + sse_state=cow_sse:init()}}; + _ -> + disable + end. + +-spec handle(_, binary(), State) -> {done, State} when State::#state{}. +handle(IsFin, Data, State=#state{reply_to=ReplyTo, stream_ref=StreamRef, sse_state=SSE0}) -> + case cow_sse:parse(Data, SSE0) of + {event, Event, SSE} -> + ReplyTo ! {gun_sse, self(), StreamRef, Event}, + handle(IsFin, <<>>, State#state{sse_state=SSE}); + {more, SSE} -> + _ = case IsFin of + fin -> + ReplyTo ! {gun_sse, self(), StreamRef, fin}; + _ -> + ok + end, + {done, State#state{sse_state=SSE}} + end. diff --git a/deps/gun/src/gun_sup.erl b/deps/gun/src/gun_sup.erl new file mode 100644 index 0000000..6e72498 --- /dev/null +++ b/deps/gun/src/gun_sup.erl @@ -0,0 +1,38 @@ +%% Copyright (c) 2013-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +%% @private +-module(gun_sup). +-behaviour(supervisor). + +%% API. +-export([start_link/0]). + +%% supervisor. +-export([init/1]). + +-define(SUPERVISOR, ?MODULE). + +%% API. + +-spec start_link() -> {ok, pid()}. +start_link() -> + supervisor:start_link({local, ?SUPERVISOR}, ?MODULE, []). + +%% supervisor. + +init([]) -> + Procs = [{gun, {gun, start_link, []}, + temporary, 5000, worker, [gun]}], + {ok, {{simple_one_for_one, 10, 10}, Procs}}. diff --git a/deps/gun/src/gun_tcp.erl b/deps/gun/src/gun_tcp.erl new file mode 100644 index 0000000..0f5addc --- /dev/null +++ b/deps/gun/src/gun_tcp.erl @@ -0,0 +1,52 @@ +%% Copyright (c) 2011-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_tcp). + +-export([name/0]). +-export([messages/0]). +-export([connect/4]). +-export([send/2]). +-export([setopts/2]). +-export([sockname/1]). +-export([close/1]). + +name() -> tcp. + +messages() -> {tcp, tcp_closed, tcp_error}. + +-spec connect(inet:ip_address() | inet:hostname(), + inet:port_number(), any(), timeout()) + -> {ok, inet:socket()} | {error, atom()}. +connect(Host, Port, Opts, Timeout) when is_integer(Port) -> + gen_tcp:connect(Host, Port, + Opts ++ [binary, {active, false}, {packet, raw}], + Timeout). + +-spec send(inet:socket(), iodata()) -> ok | {error, atom()}. +send(Socket, Packet) -> + gen_tcp:send(Socket, Packet). + +-spec setopts(inet:socket(), list()) -> ok | {error, atom()}. +setopts(Socket, Opts) -> + inet:setopts(Socket, Opts). + +-spec sockname(inet:socket()) + -> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}. +sockname(Socket) -> + inet:sockname(Socket). + +-spec close(inet:socket()) -> ok. +close(Socket) -> + gen_tcp:close(Socket). diff --git a/deps/gun/src/gun_tls.erl b/deps/gun/src/gun_tls.erl new file mode 100644 index 0000000..d377927 --- /dev/null +++ b/deps/gun/src/gun_tls.erl @@ -0,0 +1,58 @@ +%% Copyright (c) 2011-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_tls). + +-export([name/0]). +-export([messages/0]). +-export([connect/3]). +-export([connect/4]). +-export([send/2]). +-export([setopts/2]). +-export([sockname/1]). +-export([close/1]). + +name() -> tls. + +messages() -> {ssl, ssl_closed, ssl_error}. + +-spec connect(inet:socket(), any(), timeout()) + -> {ok, ssl:sslsocket()} | {error, atom()}. +connect(Socket, Opts, Timeout) -> + ssl:connect(Socket, Opts, Timeout). + +-spec connect(inet:ip_address() | inet:hostname(), + inet:port_number(), any(), timeout()) + -> {ok, ssl:sslsocket()} | {error, atom()}. +connect(Host, Port, Opts, Timeout) when is_integer(Port) -> + ssl:connect(Host, Port, + Opts ++ [binary, {active, false}, {packet, raw}], + Timeout). + +-spec send(ssl:sslsocket(), iodata()) -> ok | {error, atom()}. +send(Socket, Packet) -> + ssl:send(Socket, Packet). + +-spec setopts(ssl:sslsocket(), list()) -> ok | {error, atom()}. +setopts(Socket, Opts) -> + ssl:setopts(Socket, Opts). + +-spec sockname(ssl:sslsocket()) + -> {ok, {inet:ip_address(), inet:port_number()}} | {error, atom()}. +sockname(Socket) -> + ssl:sockname(Socket). + +-spec close(ssl:sslsocket()) -> ok. +close(Socket) -> + ssl:close(Socket). diff --git a/deps/gun/src/gun_ws.erl b/deps/gun/src/gun_ws.erl new file mode 100644 index 0000000..b89840e --- /dev/null +++ b/deps/gun/src/gun_ws.erl @@ -0,0 +1,157 @@ +%% Copyright (c) 2015-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_ws). + +-export([check_options/1]). +-export([name/0]). +-export([init/8]). +-export([handle/2]). +-export([close/2]). +-export([send/2]). +-export([down/1]). + +-record(payload, { + type = undefined :: cow_ws:frame_type(), + rsv = undefined :: cow_ws:rsv(), + len = undefined :: non_neg_integer(), + mask_key = undefined :: cow_ws:mask_key(), + close_code = undefined :: undefined | cow_ws:close_code(), + unmasked = <<>> :: binary(), + unmasked_len = 0 :: non_neg_integer() +}). + +-record(ws_state, { + owner :: pid(), + socket :: inet:socket() | ssl:sslsocket(), + transport :: module(), + buffer = <<>> :: binary(), + in = head :: head | #payload{} | close, + frag_state = undefined :: cow_ws:frag_state(), + utf8_state = 0 :: cow_ws:utf8_state(), + extensions = #{} :: cow_ws:extensions(), + handler :: module(), + handler_state :: any() +}). + +check_options(Opts) -> + do_check_options(maps:to_list(Opts)). + +do_check_options([]) -> + ok; +do_check_options([{compress, B}|Opts]) when B =:= true; B =:= false -> + do_check_options(Opts); +do_check_options([{default_protocol, M}|Opts]) when is_atom(M) -> + do_check_options(Opts); +do_check_options([Opt={protocols, L}|Opts]) when is_list(L) -> + case lists:usort(lists:flatten([[is_binary(B), is_atom(M)] || {B, M} <- L])) of + [true] -> do_check_options(Opts); + _ -> {error, {options, {ws, Opt}}} + end; +do_check_options([{user_opts, _}|Opts]) -> + do_check_options(Opts); +do_check_options([Opt|_]) -> + {error, {options, {ws, Opt}}}. + +name() -> ws. + +init(Owner, Socket, Transport, StreamRef, Headers, Extensions, Handler, Opts) -> + Owner ! {gun_upgrade, self(), StreamRef, [<<"websocket">>], Headers}, + HandlerState = Handler:init(Owner, StreamRef, Headers, Opts), + {switch_protocol, ?MODULE, #ws_state{owner=Owner, socket=Socket, transport=Transport, + extensions=Extensions, handler=Handler, handler_state=HandlerState}}. + +%% Do not handle anything if we received a close frame. +handle(_, State=#ws_state{in=close}) -> + State; +%% Shortcut for common case when Data is empty after processing a frame. +handle(<<>>, State=#ws_state{in=head}) -> + State; +handle(Data, State=#ws_state{buffer=Buffer, in=head, frag_state=FragState, extensions=Extensions}) -> + Data2 = << Buffer/binary, Data/binary >>, + case cow_ws:parse_header(Data2, Extensions, FragState) of + {Type, FragState2, Rsv, Len, MaskKey, Rest} -> + handle(Rest, State#ws_state{buffer= <<>>, + in=#payload{type=Type, rsv=Rsv, len=Len, mask_key=MaskKey}, frag_state=FragState2}); + more -> + State#ws_state{buffer=Data2}; + error -> + close({error, badframe}, State) + end; +handle(Data, State=#ws_state{in=In=#payload{type=Type, rsv=Rsv, len=Len, mask_key=MaskKey, close_code=CloseCode, + unmasked=Unmasked, unmasked_len=UnmaskedLen}, frag_state=FragState, utf8_state=Utf8State, extensions=Extensions}) -> + case cow_ws:parse_payload(Data, MaskKey, Utf8State, UnmaskedLen, Type, Len, FragState, Extensions, Rsv) of + {ok, CloseCode2, Payload, Utf8State2, Rest} -> + dispatch(Rest, State#ws_state{in=head, utf8_state=Utf8State2}, Type, << Unmasked/binary, Payload/binary >>, CloseCode2); + {ok, Payload, Utf8State2, Rest} -> + dispatch(Rest, State#ws_state{in=head, utf8_state=Utf8State2}, Type, << Unmasked/binary, Payload/binary >>, CloseCode); + {more, CloseCode2, Payload, Utf8State2} -> + State#ws_state{in=In#payload{close_code=CloseCode2, unmasked= << Unmasked/binary, Payload/binary >>, + len=Len - byte_size(Data), unmasked_len=2 + byte_size(Data)}, utf8_state=Utf8State2}; + {more, Payload, Utf8State2} -> + State#ws_state{in=In#payload{unmasked= << Unmasked/binary, Payload/binary >>, + len=Len - byte_size(Data), unmasked_len=UnmaskedLen + byte_size(Data)}, utf8_state=Utf8State2}; + Error = {error, _Reason} -> + close(Error, State) + end. + +dispatch(Rest, State0=#ws_state{frag_state=FragState, + handler=Handler, handler_state=HandlerState0}, + Type0, Payload0, CloseCode0) -> + case cow_ws:make_frame(Type0, Payload0, CloseCode0, FragState) of + ping -> + State = send(pong, State0), + handle(Rest, State); + {ping, Payload} -> + State = send({pong, Payload}, State0), + handle(Rest, State); + pong -> + handle(Rest, State0); + {pong, _} -> + handle(Rest, State0); + Frame -> + HandlerState = Handler:handle(Frame, HandlerState0), + State = State0#ws_state{handler_state=HandlerState}, + case Frame of + close -> handle(Rest, State#ws_state{in=close}); + {close, _, _} -> handle(Rest, State#ws_state{in=close}); + {fragment, fin, _, _} -> handle(Rest, State#ws_state{frag_state=undefined}); + _ -> handle(Rest, State) + end + end. + +close(Reason, State) -> + case Reason of +%% @todo We need to send a close frame from gun:ws_loop on close. +% Normal when Normal =:= stop; Normal =:= timeout -> +% send({close, 1000, <<>>}, State); + owner_gone -> + send({close, 1001, <<>>}, State); + {error, badframe} -> + send({close, 1002, <<>>}, State); + {error, badencoding} -> + send({close, 1007, <<>>}, State) + end. + +send(Frame, State=#ws_state{socket=Socket, transport=Transport, extensions=Extensions}) -> + Transport:send(Socket, cow_ws:masked_frame(Frame, Extensions)), + case Frame of + close -> close; + {close, _, _} -> close; + _ -> State + end. + +%% Websocket has no concept of streams. +down(_) -> + {[], []}. diff --git a/deps/gun/src/gun_ws_h.erl b/deps/gun/src/gun_ws_h.erl new file mode 100644 index 0000000..7c4af92 --- /dev/null +++ b/deps/gun/src/gun_ws_h.erl @@ -0,0 +1,38 @@ +%% Copyright (c) 2017-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(gun_ws_h). + +-export([init/4]). +-export([handle/2]). + +-record(state, { + reply_to :: pid(), + stream_ref :: reference(), + frag_buffer = <<>> :: binary() +}). + +init(ReplyTo, StreamRef, _, _) -> + #state{reply_to=ReplyTo, stream_ref=StreamRef}. + +handle({fragment, nofin, _, Payload}, + State=#state{frag_buffer=SoFar}) -> + State#state{frag_buffer= << SoFar/binary, Payload/binary >>}; +handle({fragment, fin, Type, Payload}, + State=#state{reply_to=ReplyTo, stream_ref=StreamRef, frag_buffer=SoFar}) -> + ReplyTo ! {gun_ws, self(), StreamRef, {Type, << SoFar/binary, Payload/binary >>}}, + State#state{frag_buffer= <<>>}; +handle(Frame, State=#state{reply_to=ReplyTo, stream_ref=StreamRef}) -> + ReplyTo ! {gun_ws, self(), StreamRef, Frame}, + State. diff --git a/deps/jose/Makefile b/deps/jose/Makefile index 5989a58..0577f19 100644 --- a/deps/jose/Makefile +++ b/deps/jose/Makefile @@ -9,7 +9,7 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += base64url -dep_base64url = hex 0.0.1 undefined +dep_base64url = hex 0.0.1 base64url rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/observer_cli/Makefile b/deps/observer_cli/Makefile index f72be5b..b621815 100644 --- a/deps/observer_cli/Makefile +++ b/deps/observer_cli/Makefile @@ -9,7 +9,7 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += recon -dep_recon = hex 2.5.0 undefined +dep_recon = hex 2.5.0 recon rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/prometheus/README.md b/deps/prometheus/README.md index d5aab86..722c2f5 100644 --- a/deps/prometheus/README.md +++ b/deps/prometheus/README.md @@ -4,7 +4,7 @@ Copyright (c) 2016,2017 Ilya Khaprov <>. -__Version:__ 4.5.0 +__Version:__ 4.6.0 [![Hex.pm](https://img.shields.io/hexpm/v/prometheus.svg?maxAge=2592000?style=plastic)](https://hex.pm/packages/prometheus) [![Hex.pm](https://img.shields.io/hexpm/dt/prometheus.svg?maxAge=2592000)](https://hex.pm/packages/prometheus) diff --git a/deps/prometheus/mix.exs b/deps/prometheus/mix.exs index 99b98c1..a8b2268 100644 --- a/deps/prometheus/mix.exs +++ b/deps/prometheus/mix.exs @@ -3,7 +3,7 @@ defmodule Prometheus.Mixfile do def project do [app: :prometheus, - version: "4.5.0", + version: "4.6.0", description: description(), package: package()] end diff --git a/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl b/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl index dd1fe85..fd3ee2c 100644 --- a/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl +++ b/deps/prometheus/src/collectors/vm/prometheus_vm_dist_collector.erl @@ -142,6 +142,12 @@ %% The state is represented as a numerical value where `pending=1', %% `up_pending=2' and `up=3'. %% +%%
  • +%% `erlang_vm_dist_node_queue_size_bytes'
    +%% Type: gauge.
    +%% The number of bytes in the output distribution queue.
    +%% This queue sits between the Erlang code and the port driver. +%%
  • %% %% %% ==Configuration== @@ -223,6 +229,9 @@ %%
  • %% `node_state' for `erlang_vm_dist_node_state'. %%
  • +%%
  • +%% `node_queue_size_bytes' for `erlang_vm_dist_node_queue_size_bytes'. +%%
  • %% %% %% By default all metrics are enabled. @@ -239,6 +248,8 @@ -behaviour(prometheus_collector). +-dialyzer({nowarn_function, node_queue_size/1}). + %%==================================================================== %% Macros %%==================================================================== @@ -360,7 +371,11 @@ metrics1() -> "The current state of the distribution link. " "The state is represented as a numerical value where `pending=1', " "`up_pending=2' and `up=3'.", - metric_node_state(Data)}]. + metric_node_state(Data)}, + {node_queue_size_bytes, gauge, + "The number of bytes in the output distribution queue. " + "This queue sits between the Erlang code and the port driver.", + metric_node_queue_size(Data)}]. enabled_metrics() -> application:get_env(prometheus, vm_dist_collector_metrics, all). @@ -482,3 +497,17 @@ metric_node_state(Data) -> node_state(pending) -> 1; node_state(up_pending) -> 2; node_state(up) -> 3. + +metric_node_queue_size(Data) -> + [ + {[{peer, Node}], node_queue_size(Node)} + || {Node, _} <- Data]. + +node_queue_size(Node) -> + ConnId = ets:lookup_element(sys_dist, Node, 3), + {ok, _, _, QueueSize} = erlang:dist_get_stat(ConnId), + case QueueSize of + false -> 0; + true -> -1; + _ -> QueueSize + end. diff --git a/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl b/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl index fa37eee..a097474 100644 --- a/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl +++ b/deps/prometheus/src/collectors/vm/prometheus_vm_system_info_collector.erl @@ -315,7 +315,11 @@ collect_allocator_metrics() -> [ [ allocator_metric(Alloc, Instance, Kind, Key, KindInfo) - || Key <- [blocks, blocks_size, carriers, carriers_size]] + || Key <- [carriers, carriers_size]] ++ + [ + allocator_blocks_metric(Alloc, Instance, Kind, Key, KindInfo) + || Key <- [count, size]] + || {Kind, KindInfo} <- Info, (Kind =:= mbcs) orelse (Kind =:= mbcs_pool) orelse (Kind =:= sbcs)] end || {{Alloc, Instance}, Info} <- allocators()]), prometheus_model_helpers:gauge_metrics(Metrics). @@ -334,3 +338,31 @@ allocators() -> Allocs <- [erlang:system_info({allocator, A})], Allocs =/= false, {_, N, Props} <- Allocs]. + +allocator_blocks_metric(Alloc, Instance, Kind, count, KindInfo) -> + Count = case lists:keyfind(blocks, 1, KindInfo) of + {blocks, L} when is_list(L) -> + sum_alloc_block_list(count, L, 0); + Tuple -> + element(2, Tuple) + end, + {[{alloc, Alloc}, {instance_no, Instance}, {kind, Kind}, {usage, blocks}], Count}; +allocator_blocks_metric(Alloc, Instance, Kind, size, KindInfo) -> + Size = case lists:keyfind(blocks_size, 1, KindInfo) of + false -> + sum_alloc_block_list(size, element(2, lists:keyfind(blocks, 1, KindInfo)), 0); + Tuple -> + element(2, Tuple) + end, + {[{alloc, Alloc}, {instance_no, Instance}, {kind, Kind}, {usage, blocks_size}], Size}. + +sum_alloc_block_list(Type, [{_, L} | Rest], Acc) -> + Value = case lists:keyfind(Type, 1, L) of + false -> 0; + Tuple -> element(2, Tuple) + end, + sum_alloc_block_list(Type, Rest, Value + Acc); +sum_alloc_block_list(Type, [_ | Rest], Acc) -> + sum_alloc_block_list(Type, Rest, Acc); +sum_alloc_block_list(_Type, [], Acc) -> + Acc. diff --git a/deps/prometheus/src/prometheus.app.src b/deps/prometheus/src/prometheus.app.src index 936c798..2897bcd 100644 --- a/deps/prometheus/src/prometheus.app.src +++ b/deps/prometheus/src/prometheus.app.src @@ -1,6 +1,6 @@ {application,prometheus, [{description,"Prometheus.io client in Erlang"}, - {vsn,"4.5.0"}, + {vsn,"4.6.0"}, {registered,[]}, {mod,{prometheus,[]}}, {applications,[kernel,stdlib]}, diff --git a/deps/ra/LICENSE-APACHE2 b/deps/ra/LICENSE-APACHE2 index 9f861f8..8703a8a 100644 --- a/deps/ra/LICENSE-APACHE2 +++ b/deps/ra/LICENSE-APACHE2 @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2017-2019 Pivotal Software Inc. + Copyright 2017-2020 VMware Inc or its affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/deps/ra/LICENSE-MPL-RabbitMQ b/deps/ra/LICENSE-MPL-RabbitMQ index c39ede4..255977c 100644 --- a/deps/ra/LICENSE-MPL-RabbitMQ +++ b/deps/ra/LICENSE-MPL-RabbitMQ @@ -446,8 +446,8 @@ EXHIBIT A -Mozilla Public License. The Original Code is RabbitMQ. - The Initial Developer of the Original Code is GoPivotal, Inc. - Copyright (c) 2017 Pivotal Software, Inc. All rights reserved.'' + The Initial Developer of the Original Code is Pivotal Software, Inc. + Copyright (c) 2017-2020 VMware, Inc or its affiliates. All rights reserved.'' [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should diff --git a/deps/ra/Makefile b/deps/ra/Makefile index 3ed2130..aeafbe0 100644 --- a/deps/ra/Makefile +++ b/deps/ra/Makefile @@ -9,9 +9,9 @@ ERLC_OPTS = +debug_info export ERLC_OPTS DEPS += gen_batch_server -dep_gen_batch_server = hex 0.8.2 undefined +dep_gen_batch_server = hex 0.8.2 gen_batch_server DEPS += aten -dep_aten = hex 0.5.3 undefined +dep_aten = hex 0.5.3 aten rebar_dep: preprocess pre-deps deps pre-app app diff --git a/deps/ra/README.md b/deps/ra/README.md index 5945535..ce5fdfb 100644 --- a/deps/ra/README.md +++ b/deps/ra/README.md @@ -33,32 +33,6 @@ The following Raft features are implemented: Ra requires Erlang/OTP 21.3+. Erlang 22+ is **highly recommended** because of [distribution traffic fragmentation](http://blog.erlang.org/OTP-22-Highlights/). -## Quick start - -```erlang -%% First we have to start the Ra application -ra:start(), - -%% All servers in a Ra cluster are named processes. -%% Create some Server Ids to pass to the configuration -ErlangNodes = [ra@node1, ra@node2, ra@node3], -ServerIds = [{quick_start, N} || N <- ErlangNodes], - -%% start a simple distributed addition state machine with an initial state of 0 -ClusterName = quick_start, -{ok, ServersStarted, ServersNotStarted} = ra:start_cluster(ClusterName, {simple, fun erlang:'+'/2, 0}, ServerIds), - -%% Add a number to the state machine -%% Simple state machines always return the full state after each operation -{ok, StateMachineResult, LeaderId} = ra:process_command(hd(ServersStarted), 5), - -%% use the leader id from the last command result for the next -{ok, 12, LeaderId1} = ra:process_command(LeaderId, 7). -``` - -"Simple" state machines like the above can only take you so far. See [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) -for how to write a state machine by implementing the `ra_machine` behaviour. - ## Design Goals * Low footprint: use as few resources as possible, avoid process tree explosion @@ -75,17 +49,101 @@ which has two major shortcomings: * Replication algorithm is linear * Failure recovery procedure requires expensive topology changes +## Smallest Possible Usage Example + +The example below assumes a few things: + + * You are familiar with the basics of [distributed Erlang](https://learnyousomeerlang.com/distribunomicon) + * Three Erlang nodes are started on the local machine or reachable resolvable hosts. + Their names are `ra1@hostname.local`, `ra2@hostname.local`, and `ra3@hostname.local` in the example below but your actual hostname will be different. + Therefore the naming scheme is `ra{N}@{hostname}`. This is not a Ra requirement so you are + welcome to use different node names and update the code accordingly. + +Erlang nodes can be started using `rebar3 shell --name {node name}`. They will have Ra modules +on code path: + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra1@hostname.local +``` + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra2@hostname.local +``` + +``` shell +# replace hostname.local with your actual hostname +rebar3 shell --name ra3@hostname.local +``` + +After Ra nodes form a cluster, state machine commands can be performed. + +Here's what a small example looks like: + +``` erlang +%% The Ra application has to be started before it can be used. +ra:start(), + +%% All servers in a Ra cluster are named processes on Erlang nodes. +%% The Erlang nodes must have distribution enabled and be able to +%% communicate with each other. +%% See https://learnyousomeerlang.com/distribunomicon if you are new to Erlang/OTP. + +%% These Erlang nodes will host Ra nodes. They are the "seed" and assumed to +%% be running or come online shortly after Ra cluster formation is started with ra:start_cluster/3. +ErlangNodes = [ra1@hostname.local, ra2@hostname.local, ra3@hostname.local], + +%% This will check for Erlang distribution connectivity. If Erlang nodes +%% cannot communicate with each other, Ra nodes would not be able to cluster or communicate +%% either. +[io:format("Attempting to communicate with node ~s, response: ~s~n", [N, net_adm:ping(N)]) || N <- ErlangNodes], + +%% Create some Ra server IDs to pass to the configuration. These IDs will be +%% used to address Ra nodes in Ra API functions. +ServerIds = [{quick_start, N} || N <- ErlangNodes], + +ClusterName = quick_start, +%% State machine that implements the logic +Machine = {simple, fun erlang:'+'/2, 0}, + +%% Start a Ra cluster with an addition state machine that has an initial state of 0. +%% It's sufficient to invoke this function only on one Erlang node. For example, this +%% can be a "designated seed" node or the node that was first to start and did not discover +%% any peers after a few retries. +%% +%% Repeated startup attempts will fail even if the cluster is formed, has elected a leader +%% and is fully functional. +{ok, ServersStarted, _ServersNotStarted} = ra:start_cluster(ClusterName, Machine, ServerIds), + +%% Add a number to the state machine. +%% Simple state machines always return the full state after each operation. +{ok, StateMachineResult, LeaderId} = ra:process_command(hd(ServersStarted), 5), + +%% Use the leader id from the last command result for the next one +{ok, 12, LeaderId1} = ra:process_command(LeaderId, 7). +``` + +See [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) +for how to write more sophisiticated state machines by implementing +the `ra_machine` behaviour. + +A [Ra-based key/value store example](https://github.com/rabbitmq/ra-kv-store) is available +in a separate repository. + + ## Documentation -* API docs: https://rabbitmq.github.io/ra/ +* [API reference](https://rabbitmq.github.io/ra/) * How to write a Ra state machine: [Ra state machine tutorial](docs/internals/STATE_MACHINE_TUTORIAL.md) * Design and implementation details: [Ra internals guide](docs/internals/INTERNALS.md) ### Examples -A number of examples can be found in a [separate repository](https://github.com/rabbitmq/ra-examples). +* [Ra-based key/value store](https://github.com/rabbitmq/ra-kv-store) + -## Configuration +## Configuration Reference * `data_dir`: @@ -162,9 +220,20 @@ of low priority commands that are added to the log each flush cycle. Default: 25 ] ``` +### Logging + +Ra will use default OTP `logger` by default, unless `logger_module` configuration key is used to override. + +To change log level to `debug` for all applications, use + +``` erl +logger:set_primary_config(level, debug). +``` + + ## Copyright and License -(c) 2017-2020, Pivotal Software Inc. +(c) 2017-2020, VMware Inc or its affiliates. Double licensed under the ASL2 and MPL1.1. See [LICENSE](./LICENSE) for details. diff --git a/deps/ra/src/ra.app.src b/deps/ra/src/ra.app.src index c1c451f..9f530a2 100644 --- a/deps/ra/src/ra.app.src +++ b/deps/ra/src/ra.app.src @@ -1,6 +1,6 @@ {application,ra, [{description,"Raft library"}, - {vsn,"1.0.8"}, + {vsn,"1.1.2"}, {licenses,["Apache","MPL"]}, {links,[{"github","https://github.com/rabbitmq/ra"}]}, {modules,[]}, diff --git a/deps/ra/src/ra.erl b/deps/ra/src/ra.erl index ce1c91f..b97a9fd 100644 --- a/deps/ra/src/ra.erl +++ b/deps/ra/src/ra.erl @@ -121,7 +121,7 @@ start_in(DataDir) -> %% @doc Restarts a previously successfully started ra server %% @param ServerId the ra_server_id() of the server -%% @returns `{ok | error, Error}' when error can be +%% @returns `{ok | error, Error}' where error can be %% `not_found' or `name_not_registered' when the ra server has never before %% been started on the Erlang node. %% @end @@ -155,9 +155,9 @@ stop_server(ServerId) -> %% @doc Deletes a ra server %% The server is forcefully deleted. %% @param ServerId the ra_server_id() of the server -%% @returns `{ok | error, nodedown}' +%% @returns `ok | {error, nodedown} | {badrpc, Reason}' %% @end --spec force_delete_server(ServerId :: ra_server_id()) -> ok | {error, term()}. +-spec force_delete_server(ServerId :: ra_server_id()) -> ok | {error, term()} | {badrpc, term()}. force_delete_server(ServerId) -> ra_server_sup_sup:delete_server(ServerId). @@ -535,7 +535,7 @@ leave_and_terminate(ServerId) -> %% @param ServerId the ra server to remove %% @see leave_and_terminate/3 %% @end --spec leave_and_terminate(ra_server_id(), ra_server_id()) -> +-spec leave_and_terminate(ra_server_id() | [ra_server_id()], ra_server_id()) -> ok | timeout | {error, noproc}. leave_and_terminate(ServerRef, ServerId) -> leave_and_terminate(ServerRef, ServerId, ?DEFAULT_TIMEOUT). @@ -546,7 +546,8 @@ leave_and_terminate(ServerRef, ServerId) -> %% @param Timeout timeout to use %% @see leave_and_terminate/2 %% @end --spec leave_and_terminate(ra_server_id(), ra_server_id(), timeout()) -> +-spec leave_and_terminate(ra_server_id() | [ra_server_id()], + ra_server_id(), timeout()) -> ok | timeout | {error, noproc}. leave_and_terminate(ServerRef, ServerId, Timeout) -> LeaveCmd = {'$ra_leave', ServerId, await_consensus}, @@ -650,7 +651,7 @@ overview() -> %% @end -spec process_command(ServerId :: ra_server_id() | [ra_server_id()], Command :: term(), - Timeout :: non_neg_integer()) -> + Timeout :: timeout()) -> {ok, Reply :: term(), Leader :: ra_server_id()} | {error, term()} | {timeout, ra_server_id()}. @@ -689,7 +690,7 @@ process_command(ServerId, Command) -> %% structure will be returned informing the caller that it cannot process the %% message. The message will include the current cluster leader, if one is known: %% -%% `{ra_event, CurrentLeader, {rejected, {not_leader, Leader, Correlation}}}' +%% `{ra_event, FromId, {rejected, {not_leader, Leader | undefined, Correlation}}}' %% %% The caller must then redirect the command for the correlation identifier to %% the correct ra server: the leader. @@ -780,7 +781,8 @@ local_query(ServerId, QueryFun) -> -spec local_query(ServerId :: ra_server_id(), QueryFun :: query_fun(), Timeout :: timeout()) -> - ra_server_proc:ra_leader_call_ret({ra_idxterm(), term()}). + ra_server_proc:ra_leader_call_ret({ra_idxterm(), term()}) | + {ok, {ra_idxterm(), term()}, not_known}. local_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, local, Timeout). @@ -791,25 +793,27 @@ local_query(ServerId, QueryFun, Timeout) -> %% The leader state may be more up-to-date compared to local state of some followers. %% This function may still return stale results as it reads the current state %% and does not wait for commands to be applied. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @end --spec leader_query(ServerId :: ra_server_id(), +-spec leader_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun()) -> - {ok, {ra_idxterm(), term()}, ra_server_id() | not_known}. + ra_server_proc:ra_leader_call_ret(term()) | + {ok, {ra_idxterm(), term()}, not_known}. leader_query(ServerId, QueryFun) -> leader_query(ServerId, QueryFun, ?DEFAULT_TIMEOUT). %% @doc Same as `leader_query/2' but accepts a custom timeout. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @param Timeout the timeout to use %% @see leader_query/2 %% @end --spec leader_query(ServerId :: ra_server_id(), +-spec leader_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun(), Timeout :: timeout()) -> - {ok, {ra_idxterm(), term()}, ra_server_id() | not_known}. + ra_server_proc:ra_leader_call_ret(term()) | + {ok, {ra_idxterm(), term()}, not_known}. leader_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, leader, Timeout). @@ -819,22 +823,22 @@ leader_query(ServerId, QueryFun, Timeout) -> %% Consistency guarantee is that the query will return result containing %% at least all changes, committed before this query is issued. %% This may include changes which were committed while the query is running. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @end --spec consistent_query(ServerId :: ra_server_id(), +-spec consistent_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun()) -> ra_server_proc:ra_leader_call_ret(term()). consistent_query(ServerId, QueryFun) -> consistent_query(ServerId, QueryFun, ?DEFAULT_TIMEOUT). %% @doc Same as `consistent_query/2' but accepts a custom timeout. -%% @param ServerId the ra server id to send the query to +%% @param ServerId the ra server id(s) to send the query to %% @param QueryFun the query function to run %% @param Timeout the timeout to use %% @see consistent_query/2 %% @end --spec consistent_query(ServerId :: ra_server_id(), +-spec consistent_query(ServerId :: ra_server_id() | [ra_server_id()], QueryFun :: query_fun(), Timeout :: timeout()) -> ra_server_proc:ra_leader_call_ret(term()). @@ -842,28 +846,28 @@ consistent_query(ServerId, QueryFun, Timeout) -> ra_server_proc:query(ServerId, QueryFun, consistent, Timeout). %% @doc Returns a list of cluster members -%% @param ServerId the Ra server to send the query to +%% @param ServerId the Ra server(s) to send the query to %% @end --spec members(ra_server_id()) -> +-spec members(ra_server_id() | [ra_server_id()]) -> ra_server_proc:ra_leader_call_ret([ra_server_id()]). members(ServerId) -> members(ServerId, ?DEFAULT_TIMEOUT). %% @doc Returns a list of cluster members -%% @param ServerId the Ra server to send the query to +%% @param ServerId the Ra server(s) to send the query to %% @param Timeout the timeout to use %% @end --spec members(ra_server_id(), timeout()) -> +-spec members(ra_server_id() | [ra_server_id()], timeout()) -> ra_server_proc:ra_leader_call_ret([ra_server_id()]). members(ServerId, Timeout) -> ra_server_proc:state_query(ServerId, members, Timeout). --spec initial_members(ra_server_id()) -> - ra_server_proc:ra_leader_call_ret([ra_server_id()]). +-spec initial_members(ra_server_id() | [ra_server_id()]) -> + ra_server_proc:ra_leader_call_ret([ra_server_id()] | error). initial_members(ServerId) -> initial_members(ServerId, ?DEFAULT_TIMEOUT). --spec initial_members(ra_server_id(), timeout()) -> +-spec initial_members(ra_server_id() | [ra_server_id()], timeout()) -> ra_server_proc:ra_leader_call_ret([ra_server_id()] | error). initial_members(ServerId, Timeout) -> ra_server_proc:state_query(ServerId, initial_members, Timeout). @@ -872,7 +876,7 @@ initial_members(ServerId, Timeout) -> %% Returns `already_leader' if the transfer targer is already the leader. %% @end -spec transfer_leadership(ra_server_id(), ra_server_id()) -> - ok | already_leader. + ok | already_leader | {error, term()} | {timeout, ra_server_id()}. transfer_leadership(ServerId, TargetServerId) -> ra_server_proc:transfer_leadership(ServerId, TargetServerId, ?DEFAULT_TIMEOUT). diff --git a/deps/ra/src/ra.hrl b/deps/ra/src/ra.hrl index 061b445..a40279c 100644 --- a/deps/ra/src/ra.hrl +++ b/deps/ra/src/ra.hrl @@ -151,7 +151,14 @@ term :: ra_term()}). %% WAL defaults --define(WAL_MAX_SIZE_BYTES, 512 * 1024 * 1024). +-define(WAL_DEFAULT_MAX_SIZE_BYTES, 256 * 1000 * 1000). +-define(WAL_DEFAULT_MAX_BATCH_SIZE, 8192). +%% define a minimum allowable wal size. If anyone tries to set a really small +%% size that is smaller than the logical block size the pre-allocation code may +%% fail +-define(WAL_MIN_SIZE, 65536). +%% The size of each WAL file chunk that is processed at a time during recovery +-define(WAL_RECOVERY_CHUNK_SIZE, 33554432). %% logging shim -define(DEBUG(Fmt, Args), ?DISPATCH_LOG(debug, Fmt, Args)). diff --git a/deps/ra/src/ra_bench.erl b/deps/ra/src/ra_bench.erl index 5113f58..73307fa 100644 --- a/deps/ra/src/ra_bench.erl +++ b/deps/ra/src/ra_bench.erl @@ -73,7 +73,7 @@ run(#{name := Name, Taken = End - Start, io:format("benchmark completed: ~b ops in ~bms rate ~b ops/sec~n", [TotalOps, Taken, TotalOps div (Taken div 1000)]), - ra:delete_cluster(ServerIds), + _ = ra:delete_cluster(ServerIds), print_metrics(atom_to_binary(Name, utf8)), ok. diff --git a/deps/ra/src/ra_lib.erl b/deps/ra/src/ra_lib.erl index 3ed297d..def88f6 100644 --- a/deps/ra/src/ra_lib.erl +++ b/deps/ra/src/ra_lib.erl @@ -29,9 +29,11 @@ derive_safe_string/2, validate_base64uri/1, partition_parallel/2, + partition_parallel/3, retry/2, retry/3, - write_file/2 + write_file/2, + lists_chunk/2 ]). ceiling(X) when X < 0 -> @@ -247,27 +249,29 @@ derive_safe_string(S, Num) -> string:slice(F(string:next_grapheme(S), []), 0, Num). partition_parallel(F, Es) -> - Parent = self(), - Running = [ - {spawn_monitor(fun() -> Parent ! {self(), F(E)} end), E} - || E <- Es], - collect(Running, {[], []}, 60000). + partition_parallel(F, Es, 60000). -collect([], Acc, _Timeout) -> Acc; +partition_parallel(F, Es, Timeout) -> + Parent = self(), + Running = [{spawn_monitor(fun() -> Parent ! {self(), F(E)} end), E} + || E <- Es], + collect(Running, {[], []}, Timeout). + +collect([], Acc, _Timeout) -> + Acc; collect([{{Pid, MRef}, E} | Next], {Left, Right}, Timeout) -> - receive - {Pid, true} -> - erlang:demonitor(MRef, [flush]), - collect(Next, {[E | Left], Right}, Timeout); - % [{left, E} | collect(Next, Timeout)]; - {Pid, false} -> - erlang:demonitor(MRef, [flush]), - collect(Next, {Left, [E | Right]}, Timeout); - {'DOWN', MRef, process, Pid, _Reason} -> - collect(Next, {Left, [E | Right]}, Timeout) - after Timeout -> - exit(partition_parallel_timeout) - end. + receive + {Pid, true} -> + erlang:demonitor(MRef, [flush]), + collect(Next, {[E | Left], Right}, Timeout); + {Pid, false} -> + erlang:demonitor(MRef, [flush]), + collect(Next, {Left, [E | Right]}, Timeout); + {'DOWN', MRef, process, Pid, _Reason} -> + collect(Next, {Left, [E | Right]}, Timeout) + after Timeout -> + exit(partition_parallel_timeout) + end. retry(Func, Attempts) -> retry(Func, Attempts, 5000). @@ -307,9 +311,38 @@ write_file(Name, IOData) -> Err end. +lists_chunk(0, List) -> + error(invalid_size, [0, List]); +lists_chunk(Size, List) -> + lists_chunk(Size, List, []). + +lists_chunk(_Size, [], Acc) -> + lists:reverse(Acc); +lists_chunk(Size, List, Acc) when length(List) < Size -> + lists:reverse([List | Acc]); +lists_chunk(Size, List, Acc) -> + {L, Rem} = lists_take(Size, List, []), + lists_chunk(Size, Rem, [L | Acc]). + +lists_take(0, List, Acc) -> + {lists:reverse(Acc), List}; +lists_take(_N, [], Acc) -> + {lists:reverse(Acc), []}; +lists_take(N, [H | T], Acc) -> + lists_take(N-1, T, [H | Acc]). + -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). +lists_chink_test() -> + ?assertError(invalid_size, lists_chunk(0, [a])), + ?assertMatch([], lists_chunk(2, [])), + ?assertMatch([[a]], lists_chunk(2, [a])), + ?assertMatch([[a, b]], lists_chunk(2, [a, b])), + ?assertMatch([[a, b], [c]], lists_chunk(2, [a, b, c])), + ?assertMatch([[a, b], [c, d]], lists_chunk(2, [a, b, c, d])), + ok. + make_uid_test() -> U1 = make_uid(), U2 = make_uid(), diff --git a/deps/ra/src/ra_log_segment.erl b/deps/ra/src/ra_log_segment.erl index 916cc03..680833f 100644 --- a/deps/ra/src/ra_log_segment.erl +++ b/deps/ra/src/ra_log_segment.erl @@ -10,6 +10,7 @@ term_query/2, close/1, range/1, + flush/1, max_count/1, filename/1, segref/1, @@ -19,12 +20,13 @@ -include("ra.hrl"). --define(VERSION, 1). +-define(VERSION, 2). -define(MAGIC, "RASG"). -define(HEADER_SIZE, 4 + (16 div 8) + (16 div 8)). -define(DEFAULT_INDEX_MAX_COUNT, 4096). --define(DEFAULT_MAX_PENDING, 4096). --define(INDEX_RECORD_SIZE, ((2 * 64 + 3 * 32) div 8)). +-define(DEFAULT_MAX_PENDING, 1024). +-define(INDEX_RECORD_SIZE_V1, ((2 * 64 + 3 * 32) div 8)). +-define(INDEX_RECORD_SIZE_V2, ((3 * 64 + 2 * 32) div 8)). -type index_record_data() :: {Term :: ra_term(), % 64 bit Offset :: non_neg_integer(), % 32 bit @@ -33,24 +35,30 @@ -type ra_segment_index() :: #{ra_index() => index_record_data()}. +-record(cfg, {version :: non_neg_integer(), + max_count = ?DEFAULT_INDEX_MAX_COUNT :: non_neg_integer(), + max_pending = ?DEFAULT_MAX_PENDING :: non_neg_integer(), + filename :: file:filename_all(), + fd :: maybe(file:io_device()), + index_size :: pos_integer(), + mode = append :: read | append}). + -record(state, - {version :: non_neg_integer(), - max_count = ?DEFAULT_INDEX_MAX_COUNT :: non_neg_integer(), - max_pending = ?DEFAULT_MAX_PENDING :: non_neg_integer(), - filename :: file:filename_all(), - fd :: maybe(file:io_device()), - index_size :: pos_integer(), + {cfg :: #cfg{}, index_offset :: pos_integer(), + index_write_offset :: pos_integer(), data_start :: pos_integer(), data_offset :: pos_integer(), - mode = append :: read | append, + data_write_offset :: pos_integer(), index = undefined :: maybe(ra_segment_index()), range :: maybe({ra_index(), ra_index()}), - pending = [] :: [{non_neg_integer(), binary()}], + pending_data = [] :: iodata(), + pending_index = [] :: iodata(), pending_count = 0 :: non_neg_integer() }). -type ra_log_segment_options() :: #{max_count => non_neg_integer(), + max_pending => non_neg_integer(), mode => append | read}. -opaque state() :: #state{}. @@ -79,61 +87,72 @@ open(Filename, Options) -> Err -> Err end. -process_file(true, Mode, Filename, Fd, _Options) -> +process_file(true, Mode, Filename, Fd, Options) -> case read_header(Fd) of - {ok, MaxCount} -> - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + {ok, Version, MaxCount} -> + MaxPending = maps:get(max_pending, Options, ?DEFAULT_MAX_PENDING), + IndexRecordSize = index_record_size(Version), + IndexSize = MaxCount * IndexRecordSize, {NumIndexRecords, DataOffset, Range, Index} = - recover_index(Fd, MaxCount), - IndexOffset = ?HEADER_SIZE + NumIndexRecords * ?INDEX_RECORD_SIZE, - {ok, #state{version = 1, - max_count = MaxCount, - filename = Filename, - fd = Fd, - index_size = IndexSize, - mode = Mode, - data_start = ?HEADER_SIZE + IndexSize, - data_offset = DataOffset, - index_offset = IndexOffset, - range = Range, - % TODO: we don't need an index in memory in append mode - index = Index}}; + recover_index(Fd, Version, MaxCount), + IndexOffset = ?HEADER_SIZE + NumIndexRecords * IndexRecordSize, + {ok, #state{cfg = #cfg{version = Version, + max_count = MaxCount, + max_pending = MaxPending, + filename = Filename, + mode = Mode, + index_size = IndexSize, + fd = Fd}, + data_start = ?HEADER_SIZE + IndexSize, + data_offset = DataOffset, + data_write_offset = DataOffset, + index_offset = IndexOffset, + index_write_offset = IndexOffset, + range = Range, + % TODO: we don't need an index in memory in append mode + index = Index}}; Err -> Err end; process_file(false, Mode, Filename, Fd, Options) -> MaxCount = maps:get(max_count, Options, ?DEFAULT_INDEX_MAX_COUNT), MaxPending = maps:get(max_pending, Options, ?DEFAULT_MAX_PENDING), - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + IndexSize = MaxCount * ?INDEX_RECORD_SIZE_V2, ok = write_header(MaxCount, Fd), - {ok, #state{version = 1, - max_count = MaxCount, - max_pending = MaxPending, - filename = Filename, - fd = Fd, - index_size = IndexSize, + {ok, #state{cfg = #cfg{version = ?VERSION, + max_count = MaxCount, + max_pending = MaxPending, + filename = Filename, + mode = Mode, + index_size = IndexSize, + fd = Fd}, + index_write_offset = ?HEADER_SIZE, index_offset = ?HEADER_SIZE, - mode = Mode, data_start = ?HEADER_SIZE + IndexSize, - data_offset = ?HEADER_SIZE + IndexSize}}. + data_offset = ?HEADER_SIZE + IndexSize, + data_write_offset = ?HEADER_SIZE + IndexSize + }}. -spec append(state(), ra_index(), ra_term(), binary()) -> - {ok, state()} | {error, full}. -append(#state{max_pending = PendingCount, - pending_count = PendingCount, - pending = Pend, - fd = Fd} = State, + {ok, state()} | {error, full | inet:posix()}. +append(#state{cfg = #cfg{max_pending = PendingCount}, + pending_count = PendingCount} = State0, Index, Term, Data) -> - ok = ra_file_handle:pwrite(Fd, Pend), - append(State#state{pending = [], pending_count = 0}, - Index, Term, Data); -append(#state{index_offset = IndexOffset, + case flush(State0) of + {ok, State} -> + append(State, Index, Term, Data); + Err -> + Err + end; +append(#state{cfg = #cfg{version = Version, + mode = append}, + index_offset = IndexOffset, data_start = DataStart, data_offset = DataOffset, range = Range0, - mode = append, pending_count = PendCnt, - pending = Pend0} = State, + pending_index = IdxPend0, + pending_data = DataPend0} = State, Index, Term, Data) -> % check if file is full case IndexOffset < DataStart of @@ -141,35 +160,61 @@ append(#state{index_offset = IndexOffset, Length = erlang:byte_size(Data), % TODO: check length is less than #FFFFFFFF ?? Checksum = erlang:crc32(Data), + OSize = offset_size(Version), IndexData = <>, - Pend = [{DataOffset, Data}, {IndexOffset, IndexData} | Pend0], Range = update_range(Range0, Index), % fsync is done explicitly - {ok, State#state{index_offset = IndexOffset + ?INDEX_RECORD_SIZE, + {ok, State#state{index_offset = IndexOffset + index_record_size(Version), data_offset = DataOffset + Length, range = Range, - pending = Pend, - pending_count = PendCnt + 1}}; + pending_index = [IdxPend0, IndexData], + pending_data = [DataPend0, Data], + pending_count = PendCnt + 1} + }; false -> {error, full} end. -spec sync(state()) -> {ok, state()} | {error, term()}. -sync(#state{fd = Fd, pending = []} = State) -> +sync(#state{cfg = #cfg{fd = Fd}, + pending_index = []} = State) -> case ra_file_handle:sync(Fd) of ok -> {ok, State}; {error, _} = Err -> Err end; -sync(#state{fd = Fd, pending = Pend} = State) -> - case ra_file_handle:pwrite(Fd, Pend) of +sync(State0) -> + case flush(State0) of + {ok, State} -> + sync(State); + Err -> + Err + end. + +-spec flush(state()) -> {ok, state()} | {error, term()}. +flush(#state{cfg = #cfg{fd = Fd}, + pending_data = PendData, + pending_index = PendIndex, + index_offset = IdxOffs, + data_offset = DataOffs, + index_write_offset = IdxWriteOffs, + data_write_offset = DataWriteOffs} = State) -> + case ra_file_handle:pwrite(Fd, DataWriteOffs, PendData) of ok -> - sync(State#state{pending = [], - pending_count = 0}); - {error, _} = Err -> + case ra_file_handle:pwrite(Fd, IdxWriteOffs, PendIndex) of + ok -> + {ok, State#state{pending_data = [], + pending_index = [], + pending_count = 0, + index_write_offset = IdxOffs, + data_write_offset = DataOffs}}; + Err -> + Err + end; + Err -> Err end. @@ -182,17 +227,10 @@ read(State, Idx, Num) -> -spec read_cons(state(), ra_index(), Num :: non_neg_integer(), fun((binary()) -> term()), Acc) -> Acc when Acc :: [{ra_index(), ra_term(), binary()}]. -read_cons(#state{fd = Fd, mode = read, index = Index}, Idx, +read_cons(#state{cfg = #cfg{fd = _Fd, mode = read}, + index = Index} = State, Idx, Num, Fun, Acc) -> - pread_cons(Fd, Idx + Num - 1, Idx, Index, - fun (Crc, Data) -> - case erlang:crc32(Data) of - Crc -> - Fun(Data); - _ -> - exit(ra_log_segment_crc_check_failure) - end - end, Acc). + pread_cons(State, Idx + Num - 1, Idx, Index, Fun, Acc). -spec term_query(state(), Idx :: ra_index()) -> maybe(ra_term()). term_query(#state{index = Index}, Idx) -> @@ -205,14 +243,32 @@ term_query(#state{index = Index}, Idx) -> pread_cons(_Fd, Idx, FinalIdx, _, _Fun, Acc) when Idx < FinalIdx -> Acc; -pread_cons(Fd, Idx, FinalIdx, Index, Fun, Acc) -> +pread_cons(#state{cfg = #cfg{fd = Fd}} = State, Idx, + FinalIdx, Index, Fun, Acc) -> case Index of - #{Idx := {Term, Offset, Length, Crc}} -> + #{Idx := {Term, Offset, Length, Crc} = IdxRec} -> {ok, Data} = ra_file_handle:pread(Fd, Offset, Length), - pread_cons(Fd, Idx-1, FinalIdx, Index, Fun, - [{Idx, Term, Fun(Crc, Data)} | Acc]); + %% assert data size is same as length + case byte_size(Data) of + Length -> + %% we read the correct length + %% performc crc check + case erlang:crc32(Data) of + Crc -> + pread_cons(State, Idx-1, FinalIdx, Index, Fun, + [{Idx, Term, Fun(Data)} | Acc]); + _ -> + %% CRC check failures are irrecoverable + exit({ra_log_segment_crc_check_failure, Idx, IdxRec, + State#state.cfg#cfg.filename}) + end; + _ReadSize -> + %% we did not read the correct number of bytes suggesting + exit({ra_log_segment_unexpected_eof, Idx, IdxRec, + State#state.cfg#cfg.filename}) + end; _ -> - pread_cons(Fd, Idx-1, FinalIdx, Index, Fun, Acc) + pread_cons(State, Idx-1, FinalIdx, Index, Fun, Acc) end. -spec range(state()) -> maybe({ra_index(), ra_index()}). @@ -220,31 +276,32 @@ range(#state{range = Range}) -> Range. -spec max_count(state()) -> non_neg_integer(). -max_count(#state{max_count = Max}) -> +max_count(#state{cfg = #cfg{max_count = Max}}) -> Max. -spec filename(state()) -> file:filename(). -filename(#state{filename = Fn}) -> +filename(#state{cfg = #cfg{filename = Fn}}) -> filename:absname(Fn). -spec segref(state()) -> maybe(ra_log:segment_ref()). segref(#state{range = undefined}) -> undefined; -segref(#state{range = {Start, End}, filename = Fn}) -> +segref(#state{range = {Start, End}, + cfg = #cfg{filename = Fn}}) -> {Start, End, ra_lib:to_string(filename:basename(Fn))}. -spec is_same_as(state(), file:filename_all()) -> boolean(). -is_same_as(#state{filename = Fn0}, Fn) -> +is_same_as(#state{cfg = #cfg{filename = Fn0}}, Fn) -> is_same_filename_all(Fn0, Fn). -spec close(state()) -> ok. -close(#state{fd = Fd, mode = append} = State) -> +close(#state{cfg = #cfg{fd = Fd, mode = append}} = State) -> % close needs to be defensive and idempotent so we ignore the return % values here _ = sync(State), _ = ra_file_handle:close(Fd), ok; -close(#state{fd = Fd}) -> +close(#state{cfg = #cfg{fd = Fd}}) -> _ = ra_file_handle:close(Fd), ok. @@ -262,13 +319,13 @@ update_range(undefined, Idx) -> update_range({First, _Last}, Idx) -> {min(First, Idx), Idx}. -recover_index(Fd, MaxCount) -> - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, +recover_index(Fd, Version, MaxCount) -> + IndexSize = MaxCount * index_record_size(Version), {ok, ?HEADER_SIZE} = ra_file_handle:position(Fd, ?HEADER_SIZE), DataOffset = ?HEADER_SIZE + IndexSize, case ra_file_handle:read(Fd, IndexSize) of {ok, Data} -> - parse_index_data(Data, DataOffset); + parse_index_data(Version, Data, DataOffset); eof -> % if no entries have been written the file hasn't "stretched" % to where the data offset starts. @@ -278,17 +335,17 @@ recover_index(Fd, MaxCount) -> dump_index(File) -> {ok, Fd} = file:open(File, [read, raw, binary ]), - {ok, MaxCount} = read_header(Fd), - IndexSize = MaxCount * ?INDEX_RECORD_SIZE, + {ok, Version, MaxCount} = read_header(Fd), + IndexSize = MaxCount * index_record_size(Version), {ok, ?HEADER_SIZE} = file:position(Fd, ?HEADER_SIZE), DataOffset = ?HEADER_SIZE + IndexSize, case file:read(Fd, IndexSize) of {ok, Data} -> D = [begin - {ok, _} = file:position(Fd, O), - {ok, B} = file:read(Fd, N), - {I, T, binary_to_term(B)} - end || {I, T, O, N} <- dump_index_data(Data, [])], + % {ok, _} = file:position(Fd, O), + % {ok, B} = file:read(Fd, N), + {I, T, O} + end || {I, T, O, _N} <- dump_index_data(Data, [])], _ = file:close(Fd), D; eof -> @@ -299,27 +356,29 @@ dump_index(File) -> end. dump_index_data(<>, Acc) -> dump_index_data(Rest, [{Idx, Term, Offset, Length} | Acc]); dump_index_data(_, Acc) -> lists:reverse(Acc). -parse_index_data(Data, DataOffset) -> - parse_index_data(Data, 0, 0, DataOffset, undefined, #{}). +parse_index_data(2, Data, DataOffset) -> + parse_index_data(Data, 0, 0, DataOffset, undefined, #{}); +parse_index_data(1, Data, DataOffset) -> + parse_index_data_v1(Data, 0, 0, DataOffset, undefined, #{}). parse_index_data(<<>>, Num, _LastIdx, DataOffset, Range, Index) -> % end of data {Num, DataOffset, Range, Index}; -parse_index_data(<<0:64/unsigned, 0:64/unsigned, 0:32/unsigned, +parse_index_data(<<0:64/unsigned, 0:64/unsigned, 0:64/unsigned, 0:32/unsigned, 0:32/integer, _Rest/binary>>, Num, _LastIdx, DataOffset, Range, Index) -> % partially written index % end of written data {Num, DataOffset, Range, Index}; parse_index_data(<>, Num, LastIdx, _DataOffset, Range, Index0) -> % trim index entries if Idx goes "backwards" @@ -329,12 +388,36 @@ parse_index_data(< Index0 end, - parse_index_data(Rest, Num+1, Idx, Offset + Length, update_range(Range, Idx), Index#{Idx => {Term, Offset, Length, Crc}}). +parse_index_data_v1(<<>>, Num, _LastIdx, DataOffset, Range, Index) -> + % end of data + {Num, DataOffset, Range, Index}; +parse_index_data_v1(<<0:64/unsigned, 0:64/unsigned, 0:32/unsigned, + 0:32/unsigned, 0:32/integer, _Rest/binary>>, + Num, _LastIdx, DataOffset, Range, Index) -> + % partially written index + % end of written data + {Num, DataOffset, Range, Index}; +parse_index_data_v1(<>, + Num, LastIdx, _DataOffset, Range, Index0) -> + % trim index entries if Idx goes "backwards" + Index = case Idx < LastIdx of + true -> maps:filter(fun (K, _) when K > Idx -> false; + (_, _) -> true + end, Index0); + false -> Index0 + end, + parse_index_data_v1(Rest, Num+1, Idx, + Offset + Length, + update_range(Range, Idx), + Index#{Idx => {Term, Offset, Length, Crc}}). + write_header(MaxCount, Fd) -> Header = <>, {ok, 0} = ra_file_handle:position(Fd, 0), @@ -346,8 +429,9 @@ read_header(Fd) -> case ra_file_handle:read(Fd, ?HEADER_SIZE) of {ok, Buffer} -> case Buffer of - <> -> - {ok, MaxCount}; + <> + when Version =< ?VERSION -> + {ok, Version, MaxCount}; _ -> {error, invalid_segment_format} end; @@ -356,3 +440,11 @@ read_header(Fd) -> {error, _} = Err -> Err end. + +offset_size(2) -> 64; +offset_size(1) -> 32. + +index_record_size(2) -> + ?INDEX_RECORD_SIZE_V2; +index_record_size(1) -> + ?INDEX_RECORD_SIZE_V1. diff --git a/deps/ra/src/ra_log_segment_writer.erl b/deps/ra/src/ra_log_segment_writer.erl index c771317..0d11086 100644 --- a/deps/ra/src/ra_log_segment_writer.erl +++ b/deps/ra/src/ra_log_segment_writer.erl @@ -119,8 +119,25 @@ segments_for(UId, #state{data_dir = DataDir}) -> SegFiles = lists:sort(filelib:wildcard(filename:join(Dir, "*.segment"))), SegFiles. -handle_cast({mem_tables, Tables, WalFile}, State0) -> - State = lists:foldl(fun do_segment/2, State0, Tables), +handle_cast({mem_tables, Tables, WalFile}, State) -> + + Degree = erlang:system_info(schedulers), + _ = [begin + {_, Failures} = ra_lib:partition_parallel( + fun (E) -> + ok = do_segment(E, State), + true + end, Tabs, infinity), + case Failures of + [] -> + %% this is what we expect + ok; + _ -> + ?ERROR("segment_writer: ~b failures encounted during segment" + " flush. Errors: ~P", [length(Failures), Failures, 32]), + exit(segment_writer_segment_write_failure) + end + end || Tabs <- ra_lib:lists_chunk(Degree, Tables)], % delete wal file once done % TODO: test scenario when server crashes after segments but before % deleting walfile @@ -196,7 +213,7 @@ get_overview(#state{data_dir = Dir, do_segment({ServerUId, StartIdx0, EndIdx, Tid}, #state{data_dir = DataDir, - segment_conf = SegConf} = State) -> + segment_conf = SegConf}) -> Dir = filename:join(DataDir, binary_to_list(ServerUId)), case open_file(Dir, SegConf) of @@ -206,7 +223,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, %% clean up the tables for this process _ = ets:delete(Tid), _ = clean_closed_mem_tables(ServerUId, Tid), - State; + ok; Segment0 -> case append_to_segment(ServerUId, Tid, StartIdx0, EndIdx, Segment0, SegConf) of @@ -214,7 +231,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, ?WARN("segment_writer: skipping segments for ~w as directory ~s disappeared whilst writing~n", [ServerUId, Dir]), - State; + ok; {Segment1, Closed0} -> % fsync {ok, Segment} = ra_log_segment:sync(Segment1), @@ -222,8 +239,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, % notify writerid of new segment update % includes the full range of the segment % filter out any undefined segrefs - ClosedSegRefs = [ra_log_segment:segref(S) - || S <- Closed0, + ClosedSegRefs = [ra_log_segment:segref(S) || S <- Closed0, %% ensure we don't send undefined seg refs is_tuple(ra_log_segment:segref(S))], SegRefs = case ra_log_segment:segref(Segment) of @@ -236,7 +252,7 @@ do_segment({ServerUId, StartIdx0, EndIdx, Tid}, _ = ra_log_segment:close(Segment), ok = send_segments(ServerUId, Tid, SegRefs), - State + ok end end. @@ -304,7 +320,10 @@ append_to_segment(UId, Tid, Idx, EndIdx, Seg0, Closed, SegConf) -> % recurse append_to_segment(UId, Tid, StartIdx, EndIdx, Seg, [Seg0 | Closed], SegConf) - end + end; + {error, Posix} -> + FileName = ra_log_segment:filename(Seg0), + exit({segment_writer_append_error, FileName, Posix}) end. find_segment_files(Dir) -> diff --git a/deps/ra/src/ra_log_wal.erl b/deps/ra/src/ra_log_wal.erl index 3593b47..a921ab1 100644 --- a/deps/ra/src/ra_log_wal.erl +++ b/deps/ra/src/ra_log_wal.erl @@ -20,15 +20,9 @@ -include("ra.hrl"). --define(MAX_SIZE_BYTES, 512 * 1000 * 1000). --define(METRICS_WINDOW_SIZE, 100). -define(CURRENT_VERSION, 1). -define(MAGIC, "RAWA"). -define(HEADER_SIZE, 5). -%% define a minimum allowable wal size. If anyone tries to set a really small -%% size that is smaller than the logical block size the pre-allocation code may -%% fail --define(MIN_WAL_SIZE, 65536). % a writer_id consists of a unqique local name (see ra_directory) and a writer's % current pid(). @@ -66,7 +60,8 @@ dir :: string(), segment_writer = ra_log_segment_writer :: atom(), compute_checksums = false :: boolean(), - max_size_bytes = ?MAX_SIZE_BYTES :: non_neg_integer(), + max_size_bytes :: non_neg_integer(), + recovery_chunk_size = ?WAL_RECOVERY_CHUNK_SIZE :: non_neg_integer(), write_strategy = default :: wal_write_strategy(), sync_method = datasync :: sync | datasync, counter :: counters:counters_ref() @@ -75,7 +70,7 @@ -record(wal, {fd :: maybe(file:io_device()), filename :: maybe(file:filename()), writer_name_cache = {0, #{}} :: writer_name_cache(), - max_size = ?MAX_SIZE_BYTES :: non_neg_integer() + max_size :: non_neg_integer() }). -record(state, {conf = #conf{}, @@ -94,7 +89,6 @@ % and the last index seen writers = #{} :: #{ra_uid() => {in_seq | out_of_seq, ra_index()}}, - metrics_cursor = 0 :: non_neg_integer(), batch :: maybe(#batch{}) }). @@ -104,7 +98,8 @@ segment_writer => atom() | pid(), compute_checksums => boolean(), write_strategy => wal_write_strategy(), - sync_method => sync | datasync}. + sync_method => sync | datasync, + recovery_chunk_size => non_neg_integer()}. -export_type([wal_conf/0, wal_write_strategy/0]). @@ -187,18 +182,17 @@ start_link(Config, Options0) when is_list(Options0) -> -spec init(wal_conf()) -> {ok, state()}. init(#{dir := Dir} = Conf0) -> #{max_size_bytes := MaxWalSize, + recovery_chunk_size := RecoveryChunkSize, segment_writer := SegWriter, compute_checksums := ComputeChecksums, write_strategy := WriteStrategy, sync_method := SyncMethod} = merge_conf_defaults(Conf0), process_flag(trap_exit, true), - % TODO: test that off_heap is actuall beneficial % given ra_log_wal is effectively a fan-in sink it is likely that it will % at times receive large number of messages from a large number of % writers process_flag(message_queue_data, off_heap), CRef = ra_counters:new(?MODULE, 3), - % seed metrics table with data % wait for the segment writer to process anything in flight ok = ra_log_segment_writer:await(SegWriter), %% TODO: recover wal should return {stop, Reason} if it fails @@ -208,7 +202,8 @@ init(#{dir := Dir} = Conf0) -> dir = Dir, segment_writer = SegWriter, compute_checksums = ComputeChecksums, - max_size_bytes = max(?MIN_WAL_SIZE, MaxWalSize), + max_size_bytes = max(?WAL_MIN_SIZE, MaxWalSize), + recovery_chunk_size = RecoveryChunkSize, write_strategy = WriteStrategy, sync_method = SyncMethod, counter = CRef}, @@ -243,7 +238,8 @@ format_status(#state{conf = #conf{write_strategy = Strat, handle_op({cast, WalCmd}, State) -> handle_msg(WalCmd, State). -recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> +recover_wal(Dir, #conf{segment_writer = TblWriter, + recovery_chunk_size = RecoveryChunkSize} = Conf) -> % ensure configured directory exists ok = ra_lib:make_dir(Dir), % recover each mem table and notify segment writer @@ -252,7 +248,6 @@ recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> % As we have waited for the segment writer to finish processing it is % assumed that any remaining wal files need to be re-processed. WalFiles = lists:sort(filelib:wildcard(filename:join(Dir, "*.wal"))), - ?INFO("WAL: recovering ~p", [WalFiles]), % First we recover all the tables using a temporary lookup table. % Then we update the actual lookup tables atomically. _ = ets:new(ra_log_recover_mem_tables, @@ -263,8 +258,14 @@ recover_wal(Dir, #conf{segment_writer = TblWriter} = Conf) -> % read partially recovered % tables mixed with old tables All = [begin - Data = open_existing(F), - ok = try_recover_records(Data, #{}), + FBase = filename:basename(F), + ?DEBUG("wal: recovering ~s", [FBase]), + Fd = open_at_first_record(F), + {Time, ok} = timer:tc(fun () -> + recover_wal_chunks(Fd, RecoveryChunkSize) + end), + ?DEBUG("wal: recovering ~s took ~bms", [FBase, Time div 1000]), + close_existing(Fd), recovering_to_closed(F) end || F <- WalFiles], % get all the recovered tables and insert them into closed @@ -369,7 +370,7 @@ handle_msg({append, {UId, Pid} = Id, Idx, Term, Entry}, {ok, {in_seq, PrevIdx}} -> % writer was in seq but has sent an out of seq entry % notify writer - ?DEBUG("WAL: requesting resend from `~p`, " + ?DEBUG("WAL: requesting resend from `~w`, " "last idx ~b idx received ~b", [UId, PrevIdx, Idx]), Pid ! {ra_log_event, {resend_write, PrevIdx + 1}}, @@ -399,8 +400,6 @@ incr_batch(OpnMemTbl, #batch{writes = Writes, tid = _Tid, from = From, inserts = Inserts0} = W} -> - % ct:pal("insertingf ~w ~w", [Tid, Idx]), - % true = ets:insert(Tid, {Idx, Term, Entry}), TblStart = case Truncate of true -> Idx; @@ -435,8 +434,6 @@ incr_batch(OpnMemTbl, #batch{writes = Writes, {UId, Idx, Idx, T}), {T, Idx} end, - % ct:pal("inserting ~w ~w", [Tid, Idx]), - % true = ets:insert(Tid, {Idx, Term, Entry}), Writer = #batch_writer{tbl_start = TblStart, from = Idx, to = Idx, @@ -525,7 +522,7 @@ open_wal(File, Max, #conf{write_strategy = o_sync, max_size = Max, filename = File}}; {error, enotsup} -> - ?WARN("WAL: o_sync write strategy not supported. " + ?WARN("wal: o_sync write strategy not supported. " "Reverting back to default strategy.", []), open_wal(File, Max, Conf#conf{write_strategy = default}) end; @@ -632,6 +629,7 @@ flush_pending(#state{wal = #wal{fd = Fd}, batch = #batch{pending = Pend} = Batch, conf = #conf{write_strategy = WriteStrategy, sync_method = SyncMeth}} = State0) -> + case WriteStrategy of default -> ok = ra_file_handle:write(Fd, Pend), @@ -646,16 +644,13 @@ complete_batch(#state{batch = undefined} = State) -> State; complete_batch(#state{batch = #batch{waiting = Waiting, writes = NumWrites}, - metrics_cursor = Cursor, conf = Cfg } = State00) -> % TS = os:system_time(microsecond), State0 = flush_pending(State00), % SyncTS = os:system_time(microsecond), counters:add(Cfg#conf.counter, 1, NumWrites), - NextCursor = (Cursor + 1) rem ?METRICS_WINDOW_SIZE, - State = State0#state{metrics_cursor = NextCursor, - batch = undefined}, + State = State0#state{batch = undefined}, %% process writers _ = maps:map(fun (Pid, #batch_writer{tbl_start = TblStart, @@ -665,7 +660,7 @@ complete_batch(#state{batch = #batch{waiting = Waiting, term = Term, inserts = Inserts, tid = Tid}) -> - true = ets:insert(Tid, Inserts), + true = ets:insert(Tid, lists:reverse(Inserts)), true = ets:update_element(ra_log_open_mem_tables, UId, [{2, TblStart}, {3, To}]), Pid ! {ra_log_event, {written, {From, To, Term}}}, @@ -686,6 +681,23 @@ open_existing(File) -> exit({unknown_wal_file_format, Magic, UnknownVersion}) end. +open_at_first_record(File) -> + {ok, Fd} = file:open(File, [read, binary, raw]), + case file:read(Fd, 5) of + {ok, <>} -> + %% the only version currently supported + Fd; + {ok, <>} -> + exit({unknown_wal_file_format, Magic, UnknownVersion}) + end. + +close_existing(Fd) -> + case file:close(Fd) of + ok -> + ok; + {error, Reason} -> + exit({could_not_close, Reason}) + end. dump_records(<<_:1/unsigned, 0:1/unsigned, _:22/unsigned, IdDataLen:16/unsigned, _:IdDataLen/binary, @@ -714,41 +726,63 @@ dump_records(<<_:1/unsigned, 1:1/unsigned, _:22/unsigned, dump_records(<<>>, Entries) -> Entries. -try_recover_records(Data, Cache) -> - try recover_records(Data, Cache) of - ok -> ok - catch _:_ = Err -> - ?WARN("wal: encountered error during recovery: ~w~n" - "Continuing.~n", [Err]), - ok - end. - -recover_records(< + Chunk = read_from_wal_file(Fd, RecoveryChunkSize), + recover_records(Fd, Chunk, #{}, RecoveryChunkSize). +% All zeros indicates end of a pre-allocated wal file +recover_records(_Fd, <<0:1/unsigned, 0:1/unsigned, 0:22/unsigned, + IdDataLen:16/unsigned, _:IdDataLen/binary, + 0:32/integer, 0:32/unsigned, _/binary>>, + _Cache, _ChunkSize) -> + ok; +% First record or different UID to last record +recover_records(Fd, + <>, Cache) -> - % first writer appearance in WAL + Rest/binary>>, + Cache, RecoveryChunkSize) -> true = validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc), - % TODO: recover writers info, i.e. last index seen - recover_records(Rest, - Cache#{IdRef => - {UId, <<1:1/unsigned, IdRef:22/unsigned>>}}); -recover_records(< {UId, <<1:1/unsigned, IdRef:22/unsigned>>}}, + recover_records(Fd, Rest, Cache0, RecoveryChunkSize); +% Same UID as last record +recover_records(Fd, + <>, Cache) -> + Rest/binary>>, + Cache, RecoveryChunkSize) -> #{IdRef := {UId, _}} = Cache, true = validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc), + recover_records(Fd, Rest, Cache, RecoveryChunkSize); +% Not enough remainder to parse another record, need to read +recover_records(Fd, Chunk, Cache, RecoveryChunkSize) -> + NextChunk = read_from_wal_file(Fd, RecoveryChunkSize), + case NextChunk of + <<>> -> + %% we have reached the end of the file + ok; + _ -> + %% append this chunk to the remainder of the last chunk + Chunk0 = <>, + recover_records(Fd, Chunk0, Cache, RecoveryChunkSize) + end. - % TODO: recover writers info, i.e. last index seen - recover_records(Rest, Cache); -recover_records(<<>>, _Cache) -> - ok. +read_from_wal_file(Fd, Len) -> + case file:read(Fd, Len) of + {ok, <>} -> + Data; + eof -> + <<>>; + {error, Reason} -> + exit({could_not_read_wal_chunk, Reason}) + end. validate_and_update(UId, Checksum, Idx, Term, EntryData, Trunc) -> validate_checksum(Checksum, Idx, Term, EntryData), @@ -770,7 +804,8 @@ validate_checksum(Checksum, Idx, Term, Data) -> merge_conf_defaults(Conf) -> maps:merge(#{segment_writer => ra_log_segment_writer, - max_size_bytes => ?WAL_MAX_SIZE_BYTES, + max_size_bytes => ?WAL_DEFAULT_MAX_SIZE_BYTES, + recovery_chunk_size => ?WAL_RECOVERY_CHUNK_SIZE, compute_checksums => true, write_strategy => default, sync_method => datasync}, Conf). diff --git a/deps/ra/src/ra_log_wal_sup.erl b/deps/ra/src/ra_log_wal_sup.erl index 89f32ed..95a661a 100644 --- a/deps/ra/src/ra_log_wal_sup.erl +++ b/deps/ra/src/ra_log_wal_sup.erl @@ -19,9 +19,10 @@ start_link(Conf) -> init([WalConf0]) -> SupFlags = #{strategy => one_for_one, intensity => 1, period => 5}, MaxSizeBytes = application:get_env(ra, wal_max_size_bytes, - ?WAL_MAX_SIZE_BYTES), + ?WAL_DEFAULT_MAX_SIZE_BYTES), ComputeChecksums = application:get_env(ra, wal_compute_checksums, true), - WalMaxBatchSize = application:get_env(ra, wal_max_batch_size, 32768), + WalMaxBatchSize = application:get_env(ra, wal_max_batch_size, + ?WAL_DEFAULT_MAX_BATCH_SIZE), Strategy = application:get_env(ra, wal_write_strategy, default), SyncMethod = application:get_env(ra, wal_sync_method, datasync), WalConf = maps:merge(#{compute_checksums => ComputeChecksums, diff --git a/deps/ra/src/ra_monitors.erl b/deps/ra/src/ra_monitors.erl index 36ed66b..0bd091c 100644 --- a/deps/ra/src/ra_monitors.erl +++ b/deps/ra/src/ra_monitors.erl @@ -1,5 +1,6 @@ -module(ra_monitors). +-include("ra.hrl"). -export([ init/0, add/3, @@ -103,7 +104,11 @@ handle_down(Target, Monitors0) {maps:keys(CompsMap), Monitors0}; error -> {[], Monitors0} - end. + end; +handle_down(Target, Monitors0) -> + ?DEBUG("ra_monitors: target ~w not recognised", [Target]), + {[], Monitors0}. + -spec components(pid() | node(), state()) -> [component()]. components(Target, Monitors) -> diff --git a/deps/ra/src/ra_server.erl b/deps/ra/src/ra_server.erl index b19405b..6cd27d4 100644 --- a/deps/ra/src/ra_server.erl +++ b/deps/ra/src/ra_server.erl @@ -1,6 +1,7 @@ -module(ra_server). -include("ra.hrl"). +-include("ra_server.hrl"). -compile(inline_list_funcs). @@ -25,8 +26,10 @@ % properties id/1, uid/1, + log_id/1, leader_id/1, current_term/1, + machine_query/2, % TODO: hide behind a handle_leader make_rpcs/1, update_release_cursor/3, @@ -45,7 +48,7 @@ fun((ra_msg(), ra_server_state()) -> {boolean(), ra_server_state()}). -type ra_server_state() :: - #{id := {ra_server_id(), ra_uid(), unicode:chardata()}, + #{cfg := #cfg{}, leader_id => maybe(ra_server_id()), cluster := ra_cluster(), cluster_change_permitted := boolean(), @@ -59,13 +62,7 @@ last_applied := ra_index(), persisted_last_applied => ra_index(), stop_after => ra_index(), - machine := ra_machine:machine(), machine_state := term(), - machine_version := ra_machine:version(), - machine_versions := [{ra_index(), ra_machine:version()}, ...], - metrics_key := term(), - effective_machine_version := ra_machine:version(), - effective_machine_module := module(), aux_state => term(), condition => ra_await_condition_fun(), condition_timeout_changes => #{transition_to := ra_state(), @@ -175,7 +172,7 @@ % and persisting last_applied index tick_timeout => non_neg_integer(), % ms await_condition_timeout => non_neg_integer(), - low_priority_commands_flush_size => non_neg_integer(), + max_pipeline_count => non_neg_integer(), ra_event_formatter => {module(), atom(), [term()]}}. -type config() :: ra_server_config(). @@ -196,13 +193,6 @@ effects/0 ]). --define(AER_CHUNK_SIZE, 25). --define(FOLD_LOG_BATCH_SIZE, 25). -% TODO: test what is a good default here -% TODO: make configurable --define(MAX_PIPELINE_DISTANCE, 10000). --define(MAX_FETCH_ENTRIES, 4096). - -spec name(ClusterName :: ra_cluster_name(), UniqueSuffix::string()) -> atom(). name(ClusterName, UniqueSuffix) -> list_to_atom("ra_" ++ ClusterName ++ "_server_" ++ UniqueSuffix). @@ -216,6 +206,8 @@ init(#{id := Id, machine := MachineConf} = Config) -> LogId = maps:get(friendly_name, Config, lists:flatten(io_lib:format("~w", [Id]))), + MaxPipelineCount = maps:get(max_pipeline_count, Config, + ?DEFAULT_MAX_PIPELINE_COUNT), MetricKey = case Config of #{metrics_key := K} -> K; @@ -261,8 +253,19 @@ init(#{id := Id, MacMod = ra_machine:which_module(Machine, MacVer), CommitIndex = max(LastApplied, FirstIndex), - - #{id => {Id, UId, LogId}, + Cfg = #cfg{id = Id, + uid = UId, + log_id = LogId, + metrics_key = MetricKey, + machine = Machine, + machine_version = LatestMacVer, + machine_versions = [{SnapshotIdx, MacVer}], + effective_machine_version = MacVer, + effective_machine_module = MacMod, + max_pipeline_count = MaxPipelineCount}, + + #{cfg => Cfg, + current_term => CurrentTerm, cluster => Cluster0, % There may be scenarios when a single server % starts up but hasn't @@ -270,29 +273,22 @@ init(#{id := Id, % commands that can't be applied. cluster_change_permitted => false, cluster_index_term => SnapshotIndexTerm, - current_term => CurrentTerm, voted_for => VotedFor, commit_index => CommitIndex, last_applied => FirstIndex, persisted_last_applied => LastApplied, log => Log0, - machine => Machine, machine_state => MacState, - machine_version => LatestMacVer, - machine_versions => [{SnapshotIdx, MacVer}], - metrics_key => MetricKey, - effective_machine_version => MacVer, - effective_machine_module => MacMod, %% aux state is transient and needs to be initialized every time aux_state => ra_machine:init_aux(MacMod, Name), query_index => 0, queries_waiting_heartbeats => queue:new(), pending_consistent_queries => []}. -recover(#{id := {_, _, LogId}, +recover(#{cfg := #cfg{log_id = LogId, + machine_version = MacVer, + effective_machine_version = EffMacVer}, commit_index := CommitIndex, - machine_version := MacVer, - effective_machine_version := EffMacVer, last_applied := LastApplied} = State0) -> ?DEBUG("~s: recovering state machine version ~b:~b from index ~b to ~b~n", [LogId, EffMacVer, MacVer, LastApplied, CommitIndex]), @@ -316,7 +312,9 @@ recover(#{id := {_, _, LogId}, handle_leader({PeerId, #append_entries_reply{term = Term, success = true, next_index = NextIdx, last_index = LastIdx}}, - State0 = #{current_term := Term, id := {Id, _, LogId}}) -> + #{current_term := Term, + cfg := #cfg{id = Id, + log_id = LogId}} = State0) -> case peer(PeerId, State0) of undefined -> ?WARN("~s: saw append_entries_reply from unknown peer ~w~n", @@ -344,11 +342,11 @@ handle_leader({PeerId, #append_entries_reply{term = Term, success = true, end, Effects = Effects1 ++ RpcEffects, case State of - #{id := {Id, _, _}, cluster := #{Id := _}} -> + #{cluster := #{Id := _}} -> % leader is in the cluster {leader, State, Effects}; - #{commit_index := CI, cluster_index_term := {CITIndex, _}, - id := {_, _, LogId}} + #{commit_index := CI, + cluster_index_term := {CITIndex, _}} when CI >= CITIndex -> % leader is not in the cluster and the new cluster % config has been committed @@ -361,23 +359,24 @@ handle_leader({PeerId, #append_entries_reply{term = Term, success = true, end; handle_leader({PeerId, #append_entries_reply{term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> case peer(PeerId, State0) of undefined -> - ?WARN("~s saw append_entries_reply from unknown peer ~w~n", + ?WARN("~s: saw append_entries_reply from unknown peer ~w~n", [LogId, PeerId]), {leader, State0, []}; _ -> - ?NOTICE("~s leader saw append_entries_reply for term ~b " + ?NOTICE("~s: leader saw append_entries_reply from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader({PeerId, #append_entries_reply{success = false, next_index = NextIdx, last_index = LastIdx, last_term = LastTerm}}, - State0 = #{id := {_, _, LogId}, + State0 = #{cfg := #cfg{log_id = LogId}, cluster := Nodes, log := Log0}) -> #{PeerId := Peer0 = #{match_index := MI, next_index := NI}} = Nodes, @@ -428,7 +427,7 @@ handle_leader({PeerId, #append_entries_reply{success = false, State1 = State0#{cluster => Nodes#{PeerId => Peer}, log => Log}, {State, _, Effects} = make_pipelined_rpc_effects(State1, []), {leader, State, Effects}; -handle_leader({command, Cmd}, State00 = #{id := {_, _, LogId}}) -> +handle_leader({command, Cmd}, #{cfg := #cfg{log_id = LogId}} = State00) -> case append_log_leader(Cmd, State00) of {not_appended, Reason, State} -> ?WARN("~s command ~W NOT appended to log. Reason ~w", @@ -483,7 +482,8 @@ handle_leader({ra_log_event, Evt}, State = #{log := Log0}) -> handle_leader({aux_command, Type, Cmd}, State0) -> handle_aux(leader, Type, Cmd, State0); handle_leader({PeerId, #install_snapshot_result{term = Term}}, - #{id := {_, _, LogId}, current_term := CurTerm} = State0) + #{cfg := #cfg{log_id = LogId}, + current_term := CurTerm} = State0) when Term > CurTerm -> case peer(PeerId, State0) of undefined -> @@ -491,12 +491,12 @@ handle_leader({PeerId, #install_snapshot_result{term = Term}}, [LogId, PeerId]), {leader, State0, []}; _ -> - ?DEBUG("~s: leader saw install_snapshot_result for term ~b" - " abdicates term: ~b!~n", [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + ?DEBUG("~s: leader saw install_snapshot_result from ~w for term ~b" + " abdicates term: ~b!~n", [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader({PeerId, #install_snapshot_result{last_index = LastIndex}}, - #{id := {_, _, LogId}} = State0) -> + #{cfg := #cfg{log_id = LogId}} = State0) -> case peer(PeerId, State0) of undefined -> ?WARN("~s: saw install_snapshot_result from unknown peer ~w~n", @@ -532,7 +532,8 @@ handle_leader(pipeline_rpcs, State0) -> handle_leader(#install_snapshot_rpc{term = Term, leader_id = Leader} = Evt, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> case peer(Leader, State0) of undefined -> ?WARN("~s: saw install_snapshot_rpc from unknown leader ~w~n", @@ -541,26 +542,28 @@ handle_leader(#install_snapshot_rpc{term = Term, _ -> ?INFO("~s: leader saw install_snapshot_rpc from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Evt#install_snapshot_rpc.leader_id, - Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Evt}]} + [LogId, Evt#install_snapshot_rpc.leader_id, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Evt}]} end; handle_leader(#append_entries_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) + when Term > CurTerm -> ?INFO("~s: leader saw append_entries_rpc from ~w for term ~b " "abdicates term: ~b!~n", [LogId, Msg#append_entries_rpc.leader_id, Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]}; + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]}; handle_leader(#append_entries_rpc{term = Term}, #{current_term := Term, - id := {_, _, LogId}}) -> + cfg := #cfg{log_id = LogId}}) -> ?ERR("~s: leader saw append_entries_rpc for same term ~b" " this should not happen!~n", [LogId, Term]), exit(leader_saw_append_entries_rpc_in_same_term); handle_leader(#append_entries_rpc{leader_id = LeaderId}, #{current_term := CurTerm, - id := {Id, _, _}} = State0) -> + cfg := #cfg{id = Id}} = State0) -> Reply = append_entries_reply(CurTerm, false, State0), {leader, State0, [cast_reply(Id, LeaderId, Reply)]}; handle_leader({consistent_query, From, QueryFun}, @@ -578,20 +581,22 @@ handle_leader({consistent_query, From, QueryFun}, %% Lihtweight version of append_entries_rpc handle_leader(#heartbeat_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when CurTerm < Term -> ?INFO("~s: leader saw heartbeat_rpc from ~w for term ~b " "abdicates term: ~b!~n", [LogId, Msg#heartbeat_rpc.leader_id, Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]}; + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]}; handle_leader(#heartbeat_rpc{term = Term, leader_id = LeaderId}, - #{current_term := CurTerm, id := {Id, _, _}} = State) + #{current_term := CurTerm, + cfg := #cfg{id = Id}} = State) when CurTerm > Term -> Reply = heartbeat_reply(State), {leader, State, [cast_reply(Id, LeaderId, Reply)]}; handle_leader(#heartbeat_rpc{term = Term}, - #{current_term := CurTerm, id := {_, _, LogId}}) + #{current_term := CurTerm, cfg := #cfg{log_id = LogId}}) when CurTerm == Term -> ?ERR("~s: leader saw heartbeat_rpc for same term ~b" " this should not happen!~n", [LogId, Term]), @@ -599,7 +604,7 @@ handle_leader(#heartbeat_rpc{term = Term}, handle_leader({PeerId, #heartbeat_reply{query_index = ReplyQueryIndex, term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) -> + cfg := #cfg{log_id = LogId}} = State0) -> case {CurTerm, Term} of {Same, Same} -> %% Heartbeat confirmed @@ -615,14 +620,14 @@ handle_leader({PeerId, #heartbeat_reply{query_index = ReplyQueryIndex, {leader, State0, []}; {CurLower, TermHigher} when CurLower < TermHigher -> %% A node with higher term confirmed heartbeat. This should not happen - ?NOTICE("~s leader saw heartbeat_reply for term ~b " + ?NOTICE("~s leader saw heartbeat_reply from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Term, CurTerm]), - {follower, update_term(Term, State0), []} + [LogId, PeerId, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), []} end; handle_leader(#request_vote_rpc{term = Term, candidate_id = Cand} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> case peer(Cand, State0) of undefined -> ?WARN("~s: leader saw request_vote_rpc for unknown peer ~w~n", @@ -631,24 +636,25 @@ handle_leader(#request_vote_rpc{term = Term, candidate_id = Cand} = Msg, _ -> ?INFO("~s: leader saw request_vote_rpc from ~w for term ~b " "abdicates term: ~b!~n", - [LogId, Msg#request_vote_rpc.candidate_id, - Term, CurTerm]), - {follower, update_term(Term, State0), [{next_event, Msg}]} + [LogId, Msg#request_vote_rpc.candidate_id, Term, CurTerm]), + {follower, update_term(Term, State0#{leader_id => undefined}), + [{next_event, Msg}]} end; handle_leader(#request_vote_rpc{}, State = #{current_term := Term}) -> Reply = #request_vote_result{term = Term, vote_granted = false}, {leader, State, [{reply, Reply}]}; handle_leader(#pre_vote_rpc{term = Term, candidate_id = Cand} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) when Term > CurTerm -> + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> case peer(Cand, State0) of undefined -> ?WARN("~s: leader saw pre_vote_rpc for unknown peer ~w~n", [LogId, Cand]), {leader, State0, []}; _ -> - ?INFO("~s: leader saw pre_vote_rpc for term ~b" - " abdicates term: ~b!~n", [LogId, Term, CurTerm]), + ?INFO("~s: leader saw pre_vote_rpc from ~w for term ~b" + " abdicates term: ~b!~n", + [LogId, Msg#pre_vote_rpc.candidate_id, Term, CurTerm]), {follower, update_term(Term, State0), [{next_event, Msg}]} end; handle_leader(#pre_vote_rpc{term = Term}, @@ -664,12 +670,12 @@ handle_leader(#pre_vote_result{}, State) -> %% handle to avoid logging as unhandled {leader, State, []}; handle_leader({transfer_leadership, Leader}, - State = #{id := {Leader, _, LogId}}) -> + #{cfg := #cfg{id = Leader, log_id = LogId}} = State) -> ?DEBUG("~s: transfer leadership requested but already leader", [LogId]), {leader, State, [{reply, already_leader}]}; handle_leader({transfer_leadership, ServerId}, - #{id := {_, _, LogId}} = State) -> + #{cfg := #cfg{log_id = LogId}} = State) -> ?DEBUG("~s: transfer leadership to ~w requested", [LogId, ServerId]), %% TODO find a timeout @@ -690,10 +696,10 @@ handle_leader(Msg, State) -> -spec handle_candidate(ra_msg() | election_timeout, ra_server_state()) -> {ra_state(), ra_server_state(), effects()}. handle_candidate(#request_vote_result{term = Term, vote_granted = true}, - #{current_term := Term, + #{cfg := #cfg{id = Id, + machine = Mac}, + current_term := Term, votes := Votes, - machine := Mac, - id := {Id, _, _}, cluster := Nodes} = State0) -> NewVotes = Votes + 1, case trunc(maps:size(Nodes) / 2) + 1 of @@ -709,7 +715,7 @@ handle_candidate(#request_vote_result{term = Term, vote_granted = true}, end; handle_candidate(#request_vote_result{term = Term}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate request_vote_result with higher term" " received ~b -> ~b", [LogId, CurTerm, Term]), @@ -735,7 +741,7 @@ handle_candidate(#heartbeat_rpc{leader_id = LeaderId}, State) -> Reply = heartbeat_reply(State), {candidate, State, [cast_reply(id(State), LeaderId, Reply)]}; handle_candidate({_PeerId, #heartbeat_reply{term = Term}}, - #{id := {_, _, LogId}, + #{cfg := #cfg{log_id = LogId}, current_term := CurTerm} = State0) when Term > CurTerm -> ?INFO("~s: candidate heartbeat_reply with higher" " term received ~b -> ~b~n", @@ -744,7 +750,7 @@ handle_candidate({_PeerId, #heartbeat_reply{term = Term}}, {follower, State, []}; handle_candidate({_PeerId, #append_entries_reply{term = Term}}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate append_entries_reply with higher" " term received ~b -> ~b~n", @@ -753,7 +759,7 @@ handle_candidate({_PeerId, #append_entries_reply{term = Term}}, {follower, State, []}; handle_candidate(#request_vote_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate request_vote_rpc with higher term received ~b -> ~b~n", [LogId, CurTerm, Term]), @@ -761,7 +767,7 @@ handle_candidate(#request_vote_rpc{term = Term} = Msg, {follower, State, [{next_event, Msg}]}; handle_candidate(#pre_vote_rpc{term = Term} = Msg, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term > CurTerm -> ?INFO("~s: candidate pre_vote_rpc with higher term received ~b -> ~b~n", [LogId, CurTerm, Term]), @@ -833,7 +839,7 @@ handle_pre_vote(#pre_vote_result{term = Term, vote_granted = true, token = Token}, #{current_term := Term, votes := Votes, - id := {_, _, LogId}, + cfg := #cfg{log_id = LogId}, pre_vote_token := Token, cluster := Nodes} = State0) -> ?DEBUG("~s: pre_vote granted ~w for term ~b votes ~b~n", @@ -879,8 +885,10 @@ handle_follower(#append_entries_rpc{term = Term, prev_log_index = PLIdx, prev_log_term = PLTerm, entries = Entries0}, - State00 = #{log := Log00, - id := {Id, _, LogId}, current_term := CurTerm}) + State00 = #{cfg := #cfg{log_id = LogId, + id = Id}, + log := Log00, + current_term := CurTerm}) when Term >= CurTerm -> %% this is a valid leader, append entries message Effects0 = [{record_leader_msg, LeaderId}], @@ -972,7 +980,7 @@ handle_follower(#append_entries_rpc{term = Term, Effects} end; handle_follower(#append_entries_rpc{term = _Term, leader_id = LeaderId}, - #{id := {Id, _, LogId}, + #{cfg := #cfg{id = Id, log_id = LogId}, current_term := CurTerm} = State) -> % the term is lower than current term Reply = append_entries_reply(CurTerm, false, State), @@ -982,7 +990,8 @@ handle_follower(#append_entries_rpc{term = _Term, leader_id = LeaderId}, {follower, State, [cast_reply(Id, LeaderId, Reply)]}; handle_follower(#heartbeat_rpc{query_index = RpcQueryIndex, term = Term, leader_id = LeaderId}, - #{current_term := CurTerm, id := {Id, _, _}} = State0) + #{current_term := CurTerm, + cfg := #cfg{id = Id}} = State0) when Term >= CurTerm -> State1 = update_term(Term, State0), #{query_index := QueryIndex} = State1, @@ -991,14 +1000,15 @@ handle_follower(#heartbeat_rpc{query_index = RpcQueryIndex, term = Term, Reply = heartbeat_reply(State2), {follower, State2, [cast_reply(Id, LeaderId, Reply)]}; handle_follower(#heartbeat_rpc{leader_id = LeaderId}, - #{id := {Id, _, _}} = State)-> + #{cfg := #cfg{id = Id}} = State)-> Reply = heartbeat_reply(State), {follower, State, [cast_reply(Id, LeaderId, Reply)]}; handle_follower({ra_log_event, {written, _} = Evt}, State0 = #{log := Log0, - id := {Id, _, _}, + cfg := #cfg{id = Id}, leader_id := LeaderId, - current_term := Term}) -> + current_term := Term}) + when LeaderId =/= undefined -> {Log, Effects} = ra_log:handle_event(Evt, Log0), State = State0#{log => Log}, Reply = append_entries_reply(Term, true, State), @@ -1011,7 +1021,7 @@ handle_follower(#pre_vote_rpc{} = PreVote, State) -> process_pre_vote(follower, PreVote, State); handle_follower(#request_vote_rpc{candidate_id = Cand, term = Term}, #{current_term := Term, voted_for := VotedFor, - id := {_, _, LogId}} = State) + cfg := #cfg{log_id = LogId}} = State) when VotedFor /= undefined andalso VotedFor /= Cand -> % already voted for another in this term ?DEBUG("~w: follower request_vote_rpc for ~w already voted for ~w in ~b", @@ -1022,7 +1032,7 @@ handle_follower(#request_vote_rpc{term = Term, candidate_id = Cand, last_log_index = LLIdx, last_log_term = LLTerm}, #{current_term := CurTerm, - id := {_, _, LogId}} = State0) + cfg := #cfg{log_id = LogId}} = State0) when Term >= CurTerm -> State1 = update_term(Term, State0), LastIdxTerm = last_idx_term(State1), @@ -1045,7 +1055,7 @@ handle_follower(#request_vote_rpc{term = Term, candidate_id = Cand, end; handle_follower(#request_vote_rpc{term = Term, candidate_id = _Cand}, State = #{current_term := CurTerm, - id := {_, _, LogId}}) + cfg := #cfg{log_id = LogId}}) when Term < CurTerm -> ?INFO("~s: declining vote to ~w for term ~b, current term ~b~n", [LogId, _Cand, Term, CurTerm]), @@ -1062,7 +1072,7 @@ handle_follower({_PeerId, #heartbeat_reply{term = TheirTerm}}, handle_follower(#install_snapshot_rpc{term = Term, meta = #{index := LastIndex, term := LastTerm}}, - State = #{id := {_, _, LogId}, current_term := CurTerm}) + State = #{cfg := #cfg{log_id = LogId}, current_term := CurTerm}) when Term < CurTerm -> ?DEBUG("~s: install_snapshot old term ~b in ~b~n", [LogId, LastIndex, LastTerm]), @@ -1077,7 +1087,7 @@ handle_follower(#install_snapshot_rpc{term = Term, meta = #{index := SnapIdx} = Meta, leader_id = LeaderId, chunk_state = {1, _ChunkFlag}} = Rpc, - #{id := {_, _, LogId}, log := Log0, + #{cfg := #cfg{log_id = LogId}, log := Log0, last_applied := LastApplied, current_term := CurTerm} = State0) when Term >= CurTerm andalso SnapIdx > LastApplied -> @@ -1117,7 +1127,8 @@ handle_receive_snapshot(#install_snapshot_rpc{term = Term, term := LastTerm}, chunk_state = {Num, ChunkFlag}, data = Data}, - #{id := {Id, _, LogId}, log := Log0, + #{cfg := #cfg{id = Id, log_id = LogId}, + log := Log0, current_term := CurTerm} = State0) when Term >= CurTerm -> ?DEBUG("~s: receiving snapshot chunk: ~b / ~w~n", @@ -1208,37 +1219,45 @@ process_new_leader_queries(#{pending_consistent_queries := Pending, From0 ++ From1}. -spec tick(ra_server_state()) -> effects(). -tick(#{effective_machine_module := MacMod, +tick(#{cfg := #cfg{effective_machine_module = MacMod}, machine_state := MacState}) -> Now = os:system_time(millisecond), ra_machine:tick(MacMod, Now, MacState). -spec handle_state_enter(ra_state() | eol, ra_server_state()) -> {ra_server_state() | eol, effects()}. -handle_state_enter(RaftState, #{effective_machine_module := MacMod, +handle_state_enter(RaftState, #{cfg := #cfg{effective_machine_module = MacMod}, machine_state := MacState} = State) -> {become(RaftState, State), ra_machine:state_enter(MacMod, RaftState, MacState)}. -spec overview(ra_server_state()) -> map(). -overview(#{log := Log, effective_machine_module := MacMod, - aux_state := Aux, - machine_state := MacState} = State) -> - O = maps:with([uid, current_term, commit_index, last_applied, - cluster, leader_id, voted_for, - machine_version, effective_machine_version], State), +overview(#{cfg := #cfg{effective_machine_module = MacMod} = Cfg, + log := Log, + machine_state := MacState, + aux_state := Aux + } = State) -> + O0 = maps:with([current_term, commit_index, last_applied, + cluster, leader_id, voted_for], State), + O = maps:merge(O0, cfg_to_map(Cfg)), LogOverview = ra_log:overview(Log), MacOverview = ra_machine:overview(MacMod, MacState), O#{log => LogOverview, aux => Aux, machine => MacOverview}. +cfg_to_map(Cfg) -> + element(2, lists:foldl( + fun (F, {N, Acc}) -> + {N, Acc#{F => element(N, Cfg)}} + end, {2, #{}}, record_info(fields, cfg))). + -spec metrics(ra_server_state()) -> {atom(), ra_term(), ra_index(), ra_index(), ra_index(), ra_index(), non_neg_integer()}. -metrics(#{metrics_key := Key, +metrics(#{cfg := #cfg{metrics_key = Key}, commit_index := CI, last_applied := LA, current_term := CT, @@ -1275,8 +1294,8 @@ is_fully_replicated(#{commit_index := CI} = State) -> MinMI >= CI end. -handle_aux(RaftState, Type, Cmd, #{aux_state := Aux0, log := Log0, - effective_machine_module := MacMod, +handle_aux(RaftState, Type, Cmd, #{cfg := #cfg{effective_machine_module = MacMod}, + aux_state := Aux0, log := Log0, machine_state := MacState0} = State0) -> case ra_machine:handle_aux(MacMod, RaftState, Type, Cmd, Aux0, Log0, MacState0) of @@ -1297,12 +1316,13 @@ handle_aux(RaftState, Type, Cmd, #{aux_state := Aux0, log := Log0, % property helpers -spec id(ra_server_state()) -> ra_server_id(). -id(#{id := {Id, _, _}}) -> Id. +id(#{cfg := #cfg{id = Id}}) -> Id. -log_id(#{id := {_, _, LogId}}) -> LogId. +-spec log_id(ra_server_state()) -> unicode:chardata(). +log_id(#{cfg := #cfg{log_id = LogId}}) -> LogId. -spec uid(ra_server_state()) -> ra_uid(). -uid(#{id := {_, UId, _}}) -> UId. +uid(#{cfg := #cfg{uid = UId}}) -> UId. -spec leader_id(ra_server_state()) -> maybe(ra_server_id()). leader_id(State) -> @@ -1312,6 +1332,18 @@ leader_id(State) -> current_term(State) -> maps:get(current_term, State). +-spec machine_query(fun((term()) -> term()), ra_server_state()) -> + {ra_idxterm(), term()}. +machine_query(QueryFun, #{cfg := #cfg{effective_machine_module = MacMod}, + machine_state := MacState, + last_applied := Last, + current_term := Term + }) -> + Res = ra_machine:query(MacMod, QueryFun, MacState), + {{Last, Term}, Res}. + + + % Internal become(leader, #{cluster := Cluster, log := Log0} = State) -> @@ -1375,7 +1407,7 @@ transfer_leadership_condition(_Msg, State) -> {false, State}. evaluate_commit_index_follower(#{commit_index := CommitIndex, - id := {Id, _, _}, + cfg := #cfg{id = Id}, leader_id := LeaderId, last_applied := LastApplied0, current_term := Term, @@ -1448,10 +1480,12 @@ filter_follower_effects(Effects) -> make_pipelined_rpc_effects(State, Effects) -> make_pipelined_rpc_effects(?AER_CHUNK_SIZE, State, Effects). -make_pipelined_rpc_effects(MaxBatchSize, #{id := {Id, _, _}, - commit_index := CommitIndex, - log := Log, - cluster := Cluster} = State, +make_pipelined_rpc_effects(MaxBatchSize, + #{cfg := #cfg{id = Id, + max_pipeline_count = MaxPipelineCount}, + commit_index := CommitIndex, + log := Log, + cluster := Cluster} = State, Effects) -> NextLogIdx = ra_log:next_index(Log), maps:fold( @@ -1470,16 +1504,15 @@ make_pipelined_rpc_effects(MaxBatchSize, #{id := {Id, _, _}, % there are unsent items or a new commit index % check if the match index isn't too far behind the % next index - case NI - MI < ?MAX_PIPELINE_DISTANCE of + case NI - MI < MaxPipelineCount of true -> {NextIdx, Eff, S} = - make_rpc_effect(PeerId, NI, - MaxBatchSize, S0), + make_rpc_effect(PeerId, NI, MaxBatchSize, S0), Peer = Peer0#{next_index => NextIdx, commit_index_sent => CommitIndex}, %% is there more potentially pipelining More = More0 orelse (NextIdx < NextLogIdx andalso - NextIdx - MI < ?MAX_PIPELINE_DISTANCE), + NextIdx - MI < MaxPipelineCount), {update_peer(PeerId, Peer, S), More, [Eff | Effs]}; @@ -1509,7 +1542,7 @@ make_rpcs_for(Peers, State) -> end, {State, []}, Peers). make_rpc_effect(PeerId, Next, MaxBatchSize, - #{id := {Id, _, _}, log := Log0, + #{cfg := #cfg{id = Id}, log := Log0, current_term := Term} = State) -> PrevIdx = Next - 1, case ra_log:fetch_term(PrevIdx, Log0) of @@ -1538,7 +1571,7 @@ make_rpc_effect(PeerId, Next, MaxBatchSize, make_append_entries_rpc(PeerId, PrevIdx, PrevTerm, Num, #{log := Log0, current_term := Term, - id := {Id, _, _}, + cfg := #cfg{id = Id}, commit_index := CommitIndex} = State) -> Next = PrevIdx + 1, %% TODO: refactor to avoid lists:last call later @@ -1587,7 +1620,7 @@ persist_last_applied(#{persisted_last_applied := PLA, % if last applied is less than PL for some reason do nothing State; persist_last_applied(#{last_applied := LastApplied, - id := {_, UId, _}} = State) -> + cfg := #cfg{uid = UId}} = State) -> ok = ra_log_meta:store(UId, last_applied, LastApplied), State#{persisted_last_applied => LastApplied}. @@ -1630,13 +1663,13 @@ handle_down(leader, machine, Pid, Info, State) {down, Pid, Info}, noreply}}, State); handle_down(leader, snapshot_sender, Pid, Info, - #{id := {_, _, LogId}} = State) + #{cfg := #cfg{log_id = LogId}} = State) when is_pid(Pid) -> ?DEBUG("~s: Snapshot sender process ~w exited with ~W~n", [LogId, Pid, Info, 10]), {leader, peer_snapshot_process_exited(Pid, State), []}; handle_down(RaftState, snapshot_writer, Pid, Info, - #{id := {_, _, LogId}, log := Log0} = State) + #{cfg := #cfg{log_id = LogId}, log := Log0} = State) when is_pid(Pid) -> case Info of noproc -> ok; @@ -1655,7 +1688,7 @@ handle_down(RaftState, log, Pid, Info, #{log := Log0} = State) -> handle_down(RaftState, aux, Pid, Info, State) when is_pid(Pid) -> handle_aux(RaftState, cast, {down, Pid, Info}, State); -handle_down(RaftState, Type, Pid, Info, #{id := {_, _, LogId}} = State) -> +handle_down(RaftState, Type, Pid, Info, #{cfg := #cfg{log_id = LogId}} = State) -> ?INFO("~s: handle_down: unexpected ~w ~w exited with ~W~n", [LogId, Type, Pid, Info, 10]), {RaftState, State, []}. @@ -1675,18 +1708,18 @@ handle_node_status(RaftState, aux, Node, Status, _Infos, State) when is_atom(Node) -> handle_aux(RaftState, cast, {Status, Node}, State); handle_node_status(RaftState, Type, Node, Status, _Info, - #{id := {_, _, LogId}} = State) -> + #{cfg := #cfg{log_id = LogId}} = State) -> ?DEBUG("~s: handle_node_status: unexpected ~w ~w status change ~w~n", [LogId, Type, Node, Status]), {RaftState, State, []}. -spec terminate(ra_server_state(), Reason :: {shutdown, delete} | term()) -> ok. terminate(#{log := Log, - id := {_, _, LogId}} = _State, {shutdown, delete}) -> + cfg := #cfg{log_id = LogId}} = _State, {shutdown, delete}) -> ?NOTICE("~s: terminating with reason 'delete'~n", [LogId]), catch ra_log:delete_everything(Log), ok; -terminate(#{id := {_, _, LogId}} = State, Reason) -> +terminate(#{cfg := #cfg{log_id = LogId}} = State, Reason) -> ?DEBUG("~s: terminating with reason '~w'~n", [LogId, Reason]), #{log := Log} = persist_last_applied(State), catch ra_log:close(Log), @@ -1714,7 +1747,7 @@ log_fold(#{log := Log} = RaState, Fun, State) -> {ok, term(), ra_server_state()} | {error, ra_server_state()}. read_at(Idx, #{log := Log0, - id := {_, _, LogId}} = RaState) -> + cfg := #cfg{log_id = LogId}} = RaState) -> case ra_log:fetch(Idx, Log0) of {{Idx, _, {'$usr', _, Data, _}}, Log} -> {ok, Data, RaState#{log => Log}}; @@ -1727,7 +1760,7 @@ read_at(Idx, #{log := Log0, %%% Internal functions %%%=================================================================== -call_for_election(candidate, #{id := {Id, _, LogId}, +call_for_election(candidate, #{cfg := #cfg{id = Id, log_id = LogId}, current_term := CurrentTerm} = State0) -> NewTerm = CurrentTerm + 1, ?DEBUG("~s: election called for in term ~b~n", [LogId, NewTerm]), @@ -1744,8 +1777,9 @@ call_for_election(candidate, #{id := {Id, _, LogId}, State = update_term_and_voted_for(NewTerm, Id, State0), {candidate, State#{leader_id => undefined, votes => 0}, [{next_event, cast, VoteForSelf}, {send_vote_requests, Reqs}]}; -call_for_election(pre_vote, #{id := {Id, _, LogId}, - machine_version := MacVer, +call_for_election(pre_vote, #{cfg := #cfg{id = Id, + log_id = LogId, + machine_version = MacVer}, current_term := Term} = State0) -> ?DEBUG("~s: pre_vote election called for in term ~b~n", [LogId, Term]), Token = make_ref(), @@ -1772,8 +1806,8 @@ process_pre_vote(FsmState, #pre_vote_rpc{term = Term, candidate_id = Cand, token = Token, last_log_index = LLIdx, last_log_term = LLTerm}, - #{current_term := CurTerm, - machine_version := OurMacVer}= State0) + #{cfg := #cfg{machine_version = OurMacVer}, + current_term := CurTerm} = State0) when Term >= CurTerm -> State = update_term(Term, State0), LastIdxTerm = last_idx_term(State), @@ -1833,7 +1867,7 @@ new_peer() -> new_peer_with(Map) -> maps:merge(new_peer(), Map). -peers(#{id := {Id, _, _}, cluster := Peers}) -> +peers(#{cfg := #cfg{id = Id}, cluster := Peers}) -> maps:remove(Id, Peers). %% remove any peers that are currently receiving a snapshot @@ -1844,7 +1878,7 @@ peers_not_sending_snapshots(State) -> % peers that could need an update stale_peers(#{commit_index := CommitIndex, - id := {ThisId, _, _}, + cfg := #cfg{id = ThisId}, cluster := Cluster}) -> maps:filter(fun (Id , _) when Id == ThisId -> false; @@ -1872,7 +1906,7 @@ peer(PeerId, #{cluster := Nodes}) -> update_peer(PeerId, Peer, #{cluster := Nodes} = State) -> State#{cluster => Nodes#{PeerId => Peer}}. -update_term_and_voted_for(Term, VotedFor, #{id := {_, UId, _}, +update_term_and_voted_for(Term, VotedFor, #{cfg := #cfg{uid = UId}, current_term := CurTerm} = State) -> CurVotedFor = maps:get(voted_for, State, undefined), case Term =:= CurTerm andalso VotedFor =:= CurVotedFor of @@ -1964,9 +1998,9 @@ apply_to(ApplyTo, ApplyFun, State, Effs) -> apply_to(ApplyTo, ApplyFun, Notifys0, Effects0, #{last_applied := LastApplied, - machine_version := MacVer, - effective_machine_module := MacMod, - effective_machine_version := EffMacVer, + cfg := #cfg{machine_version = MacVer, + effective_machine_module = MacMod, + effective_machine_version = EffMacVer}, machine_state := MacState0} = State0) when ApplyTo > LastApplied andalso MacVer >= EffMacVer -> From = LastApplied + 1, @@ -2009,15 +2043,15 @@ make_notify_effects(Nots, Prior) -> apply_with(_Cmd, {Mod, LastAppliedIdx, - #{machine_version := MacVer, - effective_machine_version := Effective} = State, + #{cfg := #cfg{machine_version = MacVer, + effective_machine_version = Effective}} = State, MacSt, Effects, Notifys, LastTs}) when MacVer < Effective -> %% we cannot apply any further entries {Mod, LastAppliedIdx, State, MacSt, Effects, Notifys, LastTs}; apply_with({Idx, Term, {'$usr', CmdMeta, Cmd, ReplyType}}, {Module, _LastAppliedIdx, - State = #{effective_machine_version := MacVer}, + State = #{cfg := #cfg{effective_machine_version = MacVer}}, MacSt, Effects, Notifys0, LastTs}) -> %% augment the meta data structure Meta = augment_command_meta(Idx, Term, MacVer, CmdMeta), @@ -2056,14 +2090,16 @@ apply_with({Idx, Term, {'$ra_cluster_change', CmdMeta, NewCluster, ReplyType}}, {Mod, Idx, State, MacSt, Effects, Notifys, LastTs}; apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, {CurModule, LastAppliedIdx, - #{current_term := CurrentTerm, - machine := Machine, - machine_version := MacVer, - %% active machine versions and their index (from last snapshot) - machine_versions := MacVersions, - cluster_change_permitted := ClusterChangePerm0, - effective_machine_version := OldMacVer, - id := {_, _, LogId}} = State0, + #{cfg := #cfg{log_id = LogId, + machine_version = MacVer, + %% active machine versions and their index + %% (from last snapshot) + machine = Machine, + machine_versions = MacVersions, + effective_machine_version = OldMacVer + } = Cfg0, + current_term := CurrentTerm, + cluster_change_permitted := ClusterChangePerm0} = State0, MacSt, Effects, Notifys, LastTs}) -> ClusterChangePerm = case CurrentTerm of Term -> @@ -2079,11 +2115,12 @@ apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, %% discover the next module to use Module = ra_machine:which_module(Machine, NextMacVer), %% enable cluster change if the noop command is for the current term - State = State0#{cluster_change_permitted => ClusterChangePerm, - effective_machine_version => NextMacVer, - %% record this machine version "term" - machine_versions => [{Idx, MacVer} | MacVersions], - effective_machine_module => Module}, + Cfg = Cfg0#cfg{effective_machine_version = NextMacVer, + %% record this machine version "term" + machine_versions = [{Idx, MacVer} | MacVersions], + effective_machine_module = Module}, + State = State0#{cfg => Cfg, + cluster_change_permitted => ClusterChangePerm}, Meta = augment_command_meta(Idx, Term, MacVer, CmdMeta), apply_with({Idx, Term, {'$usr', Meta, @@ -2099,7 +2136,8 @@ apply_with({Idx, Term, {noop, CmdMeta, NextMacVer}}, ?DEBUG("~s: unknown machine version ~b current ~b" " cannot apply any further entries~n", [LogId, NextMacVer, MacVer]), - State = State0#{effective_machine_version => NextMacVer}, + Cfg = Cfg0#cfg{effective_machine_version = NextMacVer}, + State = State0#{cfg => Cfg}, {CurModule, LastAppliedIdx, State, MacSt, Effects, Notifys, LastTs}; false -> @@ -2171,7 +2209,7 @@ append_log_leader({'$ra_join', From, JoiningNode, ReplyMode}, append_cluster_change(Cluster, From, ReplyMode, State) end; append_log_leader({'$ra_leave', From, LeavingServer, ReplyMode}, - State = #{id := {_, _, LogId}, + State = #{cfg := #cfg{log_id = LogId}, cluster := OldCluster}) -> case OldCluster of #{LeavingServer := _} -> @@ -2283,7 +2321,7 @@ increment_commit_index(State = #{current_term := CurrentTerm}) -> State#{log => Log} end. -query_indexes(#{id := {Id, _, _}, +query_indexes(#{cfg := #cfg{id = Id}, cluster := Cluster, query_index := QueryIndex}) -> maps:fold(fun (PeerId, _, Acc) when PeerId == Id -> @@ -2292,7 +2330,7 @@ query_indexes(#{id := {Id, _, _}, [Idx | Acc] end, [QueryIndex], Cluster). -match_indexes(#{id := {Id, _, _}, +match_indexes(#{cfg := #cfg{id = Id}, cluster := Cluster, log := Log}) -> {LWIdx, _} = ra_log:last_written(Log), @@ -2308,7 +2346,7 @@ agreed_commit(Indexes) -> Nth = trunc(length(SortedIdxs) / 2) + 1, lists:nth(Nth, SortedIdxs). -log_unhandled_msg(RaState, Msg, #{id := {_, _, LogId}}) -> +log_unhandled_msg(RaState, Msg, #{cfg := #cfg{log_id = LogId}}) -> ?DEBUG("~s: ~w received unhandled msg: ~W~n", [LogId, RaState, Msg, 6]). fold_log_from(From, Folder, {St, Log0}) -> @@ -2339,7 +2377,7 @@ cast_reply(From, To, Msg) -> {cast, To, {From, Msg}}. -index_machine_version(Idx, #{machine_versions := Versions}) -> +index_machine_version(Idx, #{cfg := #cfg{machine_versions = Versions}}) -> %% scan for versions index_machine_version0(Idx, Versions). @@ -2358,7 +2396,7 @@ heartbeat_reply(#{current_term := CurTerm, query_index := QueryIndex}) -> update_heartbeat_rpc_effects(#{query_index := QueryIndex, queries_waiting_heartbeats := Waiting, current_term := Term, - id := {Id, _, _}} = State) -> + cfg := #cfg{id = Id}} = State) -> Peers = peers(State), %% TODO: do a quorum evaluation to find a queries to apply and apply all %% queries until that point @@ -2377,7 +2415,7 @@ make_heartbeat_rpc_effects(QueryRef, #{query_index := QueryIndex, queries_waiting_heartbeats := Waiting0, current_term := Term, - id := {Id, _, _}} = State0) -> + cfg := #cfg{id = Id}} = State0) -> Peers = peers(State0), %% TODO: do a quorum evaluation to find a queries to apply and apply all %% queries until that point @@ -2486,9 +2524,10 @@ apply_consistent_queries_effects(QueryRefs, -spec consistent_query_reply(consistent_query_ref(), ra_server_state()) -> effect(). consistent_query_reply({From, QueryFun, _ReadCommitIndex}, - #{id := {Id, _, _}, - machine_state := MacState, - machine := {machine, MacMod, _}}) -> + #{cfg := #cfg{id = Id, + machine = {machine, MacMod, _}}, + machine_state := MacState + }) -> Result = ra_machine:query(MacMod, QueryFun, MacState), {reply, From, {ok, Result, Id}}. @@ -2513,19 +2552,19 @@ process_pending_consistent_queries(#{cluster_change_permitted := true, -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). -index_machine_version_test() -> - S0 = #{machine_versions => [{0, 0}]}, - ?assertEqual(0, index_machine_version(0, S0)), - ?assertEqual(0, index_machine_version(1123456, S0)), - - S1 = #{machine_versions => [{100, 4}, {50, 3}, {25, 2}]}, - ?assertEqual(4, index_machine_version(101, S1)), - ?assertEqual(4, index_machine_version(100, S1)), - ?assertEqual(3, index_machine_version(99, S1)), - ?assertEqual(2, index_machine_version(49, S1)), - ?assertEqual(2, index_machine_version(25, S1)), +index_machine_version0_test() -> + S0 = [{0, 0}], + ?assertEqual(0, index_machine_version0(0, S0)), + ?assertEqual(0, index_machine_version0(1123456, S0)), + + S1 = [{100, 4}, {50, 3}, {25, 2}], + ?assertEqual(4, index_machine_version0(101, S1)), + ?assertEqual(4, index_machine_version0(100, S1)), + ?assertEqual(3, index_machine_version0(99, S1)), + ?assertEqual(2, index_machine_version0(49, S1)), + ?assertEqual(2, index_machine_version0(25, S1)), ?assertExit({machine_version_for_index_not_known, _}, - index_machine_version(24, S1)), + index_machine_version0(24, S1)), ok. agreed_commit_test() -> diff --git a/deps/ra/src/ra_server.hrl b/deps/ra/src/ra_server.hrl new file mode 100644 index 0000000..33deef4 --- /dev/null +++ b/deps/ra/src/ra_server.hrl @@ -0,0 +1,19 @@ +-define(AER_CHUNK_SIZE, 25). +-define(FOLD_LOG_BATCH_SIZE, 25). +% TODO: test what is a good default here +% TODO: make configurable +-define(DEFAULT_MAX_PIPELINE_COUNT, 4096). +-define(MAX_FETCH_ENTRIES, 4096). + +-record(cfg, + {id :: ra_server_id(), + uid :: ra_uid(), + log_id :: unicode:chardata(), + metrics_key :: term(), + machine :: ra_machine:machine(), + machine_version :: ra_machine:version(), + machine_versions :: [{ra_index(), ra_machine:version()}, ...], + effective_machine_version :: ra_machine:version(), + effective_machine_module :: module(), + max_pipeline_count = ?DEFAULT_MAX_PIPELINE_COUNT :: non_neg_integer() + }). diff --git a/deps/ra/src/ra_server_proc.erl b/deps/ra/src/ra_server_proc.erl index 2f39dfa..d4d0a52 100644 --- a/deps/ra/src/ra_server_proc.erl +++ b/deps/ra/src/ra_server_proc.erl @@ -54,7 +54,6 @@ -define(DEFAULT_STOP_FOLLOWER_ELECTION, false). -define(DEFAULT_AWAIT_CONDITION_TIMEOUT, 30000). %% Utilisation average calculations are all in μs. --define(USE_AVG_HALF_LIFE, 1000000.0). -define(INSTALL_SNAP_RPC_TIMEOUT, 120 * 1000). -define(DEFAULT_RECEIVE_SNAPSHOT_TIMEOUT, 30000). -define(DEFAULT_SNAPSHOT_CHUNK_SIZE, 1000000). % 1MB @@ -162,7 +161,7 @@ cast_command(ServerId, Priority, Cmd) -> -spec query(server_loc(), query_fun(), local | consistent | leader, timeout()) -> ra_server_proc:ra_leader_call_ret(term()) - | {ok, Reply :: term(), ra_server_id() | not_known}. + | {ok, Reply :: term(), not_known}. query(ServerLoc, QueryFun, local, Timeout) -> statem_call(ServerLoc, {local_query, QueryFun}, Timeout); query(ServerLoc, QueryFun, leader, Timeout) -> @@ -238,8 +237,10 @@ multi_statem_call([ServerId | ServerIds], Msg, Errs, Timeout) -> init(Config0 = #{id := Id, cluster_name := ClusterName}) -> process_flag(trap_exit, true), Config = maps:merge(config_defaults(), Config0), - #{id := {_, UId, LogId}, - cluster := Cluster} = ServerState = ra_server:init(Config), + #{cluster := Cluster} = ServerState = ra_server:init(Config), + LogId = ra_server:log_id(ServerState), + UId = ra_server:uid(ServerState), + Id = ra_server:id(ServerState), Key = ra_lib:ra_server_id_to_local_name(Id), % ensure ra_directory has the new pid yes = ra_directory:register_name(UId, self(), @@ -259,8 +260,8 @@ init(Config0 = #{id := Id, cluster_name := ClusterName}) -> TickTime = maps:get(tick_timeout, Config), AwaitCondTimeout = maps:get(await_condition_timeout, Config), RaEventFormatterMFA = maps:get(ra_event_formatter, Config, undefined), - FlushCommandsSize = maps:get(low_priority_commands_flush_size, Config, - ?FLUSH_COMMANDS_SIZE), + FlushCommandsSize = application:get_env(ra, low_priority_commands_flush_size, + ?FLUSH_COMMANDS_SIZE), SnapshotChunkSize = application:get_env(ra, snapshot_chunk_size, ?DEFAULT_SNAPSHOT_CHUNK_SIZE), ReceiveSnapshotTimeout = application:get_env(ra, receive_snapshot_timeout, @@ -731,6 +732,11 @@ terminating_follower(EvtType, Msg, State0) -> {State, Actions} = case follower(EvtType, Msg, State0) of {next_state, terminating_follower, S, A} -> {S, A}; + {next_state, NextState, S, A} -> + ?DEBUG("~s: terminating follower requested state '~s'" + " - remaining in current state", + [LogName, NextState]), + {S, A}; {keep_state, S, A} -> {S, A} end, @@ -941,13 +947,10 @@ handle_receive_snapshot(Msg, State) -> handle_await_condition(Msg, State) -> handle_raft_state(?FUNCTION_NAME, Msg, State). -perform_local_query(QueryFun, Leader, #{effective_machine_module := MacMod, - machine_state := MacState, - last_applied := Last, - current_term := Term}) -> - try ra_machine:query(MacMod, QueryFun, MacState) of +perform_local_query(QueryFun, Leader, ServerState) -> + try ra_server:machine_query(QueryFun, ServerState) of Result -> - {ok, {{Last, Term}, Result}, Leader} + {ok, Result, Leader} catch _:_ = Err -> {error, Err} @@ -1166,12 +1169,12 @@ send_rpc(To, Msg) -> gen_cast(To, Msg) -> send(To, {'$gen_cast', Msg}). -send_ra_event(To, Msg, LeaderId, EvtType, State) -> - send(To, wrap_ra_event(State, LeaderId, EvtType, Msg)). +send_ra_event(To, Msg, FromId, EvtType, State) -> + send(To, wrap_ra_event(State, FromId, EvtType, Msg)). wrap_ra_event(#state{conf = #conf{ra_event_formatter = undefined}}, - LeaderId, EvtType, Evt) -> - {ra_event, LeaderId, {EvtType, Evt}}; + FromId, EvtType, Evt) -> + {ra_event, FromId, {EvtType, Evt}}; wrap_ra_event(#state{conf = #conf{ra_event_formatter = {M, F, A}}}, LeaderId, EvtType, Evt) -> apply(M, F, [LeaderId, {EvtType, Evt} | A]). @@ -1326,7 +1329,7 @@ reject_command(Pid, Corr, State) -> "Rejecting to ~w ~n", [log_id(State), Pid, LeaderId]) end, send_ra_event(Pid, {not_leader, LeaderId, Corr}, - LeaderId, rejected, State). + id(State), rejected, State). maybe_persist_last_applied(#state{server_state = NS} = State) -> State#state{server_state = ra_server:persist_last_applied(NS)}. diff --git a/deps/rabbit/Makefile b/deps/rabbit/Makefile index 0f37639..154100e 100644 --- a/deps/rabbit/Makefile +++ b/deps/rabbit/Makefile @@ -97,7 +97,7 @@ define PROJECT_ENV %% see rabbitmq-server#143, %% rabbitmq-server#949, rabbitmq-server#1098 {credit_flow_default_credit, {400, 200}}, - {quorum_commands_soft_limit, 256}, + {quorum_commands_soft_limit, 32}, {quorum_cluster_size, 5}, %% see rabbitmq-server#248 %% and rabbitmq-server#667 @@ -136,11 +136,19 @@ define PROJECT_ENV ] endef -LOCAL_DEPS = sasl mnesia os_mon inets compiler public_key crypto ssl syntax_tools xmerl +# With Erlang.mk default behavior, the value of `$(APPS_DIR)` is always +# relative to the top-level executed Makefile. In our case, it could be +# a plugin for instance. However, the rabbitmq_prelaunch application is +# in this repository, not the plugin's. That's why we need to override +# this value here. +APPS_DIR := $(CURDIR)/apps + +LOCAL_DEPS = sasl rabbitmq_prelaunch os_mon inets compiler public_key crypto ssl syntax_tools xmerl BUILD_DEPS = rabbitmq_cli syslog -DEPS = ranch lager rabbit_common ra sysmon_handler stdout_formatter recon observer_cli +DEPS = cuttlefish ranch lager rabbit_common ra sysmon_handler stdout_formatter recon observer_cli TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers amqp_client meck proper +dep_cuttlefish = hex 2.2.0 dep_syslog = git https://github.com/schlagert/syslog 3.4.5 define usage_xml_to_erl @@ -167,6 +175,9 @@ ERLANG_MK_COMMIT = rabbitmq-tmp include rabbitmq-components.mk include erlang.mk +# See above why we mess with `$(APPS_DIR)`. +unexport APPS_DIR + ifeq ($(strip $(BATS)),) BATS := $(ERLANG_MK_TMP)/bats/bin/bats endif @@ -257,20 +268,6 @@ USE_PROPER_QC := $(shell $(ERL) -eval 'io:format({module, proper} =:= code:ensur RMQ_ERLC_OPTS += $(if $(filter true,$(USE_PROPER_QC)),-Duse_proper_qc) endif -.PHONY: copy-escripts clean-extra-sources clean-escripts - -CLI_ESCRIPTS_DIR = escript - -copy-escripts: - $(gen_verbose) $(MAKE) -C $(DEPS_DIR)/rabbitmq_cli install \ - PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ - DESTDIR= - -clean:: clean-escripts - -clean-escripts: - $(gen_verbose) rm -rf "$(CLI_ESCRIPTS_DIR)" - # -------------------------------------------------------------------- # Documentation. # -------------------------------------------------------------------- @@ -314,5 +311,3 @@ distclean:: distclean-manpages distclean-manpages:: $(gen_verbose) rm -f $(WEB_MANPAGES) - -app-build: copy-escripts diff --git a/deps/rabbit/README.md b/deps/rabbit/README.md index d02991a..6f5cdbe 100644 --- a/deps/rabbit/README.md +++ b/deps/rabbit/README.md @@ -13,18 +13,23 @@ ## Installation * [Installation guides](https://rabbitmq.com/download.html) for various platforms + * [Changelog](https://www.rabbitmq.com/changelog.html) + * [Releases](https://github.com/rabbitmq/rabbitmq-server/releases) on GitHub * [Supported and unsupported series](https://www.rabbitmq.com/versions.html) * [Supported Erlang versions](https://www.rabbitmq.com/which-erlang.html) + ## Tutorials & Documentation * [RabbitMQ tutorials](https://rabbitmq.com/getstarted.html) * [All documentation guides](https://rabbitmq.com/documentation.html) - * [Documentation source](https://github.com/rabbitmq/rabbitmq-website/) + * [CLI tools guide](https://rabbitmq.com/cli.html) + * [Configuration guide](https://rabbitmq.com/configure.html) * [Client libraries and tools](https://rabbitmq.com/devtools.html) * [Monitoring guide](https://rabbitmq.com/monitoring.html) * [Production checklist](https://rabbitmq.com/production-checklist.html) * [Runnable tutorials](https://github.com/rabbitmq/rabbitmq-tutorials/) + * [Documentation source](https://github.com/rabbitmq/rabbitmq-website/) ## Getting Help diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/Makefile b/deps/rabbit/apps/rabbitmq_prelaunch/Makefile new file mode 100644 index 0000000..572f770 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/Makefile @@ -0,0 +1,11 @@ +PROJECT = rabbitmq_prelaunch +PROJECT_DESCRIPTION = RabbitMQ prelaunch setup +PROJECT_VERSION = 1.0.0 +PROJECT_MOD = rabbit_prelaunch_app + +DEPS = rabbit_common lager + +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk + +include ../../rabbitmq-components.mk +include ../../erlang.mk diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl new file mode 100644 index 0000000..9adcc92 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state.erl @@ -0,0 +1,84 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2019-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state). + +-include_lib("eunit/include/eunit.hrl"). + +-export([get/0, + set/1, + wait_for/2]). + +-define(PT_KEY_BOOT_STATE, {?MODULE, boot_state}). + +-type boot_state() :: 'stopped' | 'booting' | 'ready' | 'stopping'. + +-export_type([boot_state/0]). + +-spec get() -> boot_state(). +get() -> + persistent_term:get(?PT_KEY_BOOT_STATE, stopped). + +-spec set(boot_state()) -> ok. +set(BootState) -> + rabbit_log_prelaunch:debug("Change boot state to `~s`", [BootState]), + ?assert(is_valid(BootState)), + case BootState of + stopped -> persistent_term:erase(?PT_KEY_BOOT_STATE); + _ -> persistent_term:put(?PT_KEY_BOOT_STATE, BootState) + end, + rabbit_boot_state_sup:notify_boot_state_listeners(BootState). + +-spec wait_for(boot_state(), timeout()) -> ok | {error, timeout}. +wait_for(BootState, infinity) -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, infinity) + end; +wait_for(BootState, Timeout) + when is_integer(Timeout) andalso Timeout >= 0 -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, Timeout - Wait) + end; +wait_for(_, _) -> + {error, timeout}. + +boot_state_idx(stopped) -> 0; +boot_state_idx(booting) -> 1; +boot_state_idx(ready) -> 2; +boot_state_idx(stopping) -> 3. + +is_valid(BootState) -> + is_integer(boot_state_idx(BootState)). + +is_reached(TargetBootState) -> + is_reached(?MODULE:get(), TargetBootState). + +is_reached(CurrentBootState, CurrentBootState) -> + true; +is_reached(stopping, stopped) -> + false; +is_reached(_CurrentBootState, stopped) -> + true; +is_reached(stopped, _TargetBootState) -> + true; +is_reached(CurrentBootState, TargetBootState) -> + boot_state_idx(TargetBootState) =< boot_state_idx(CurrentBootState). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl new file mode 100644 index 0000000..44f421e --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl @@ -0,0 +1,46 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_sup). +-behaviour(supervisor). + +-export([start_link/0, + init/1]). + +-export([notify_boot_state_listeners/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + SystemdSpec = #{id => rabbit_boot_state_systemd, + start => {rabbit_boot_state_systemd, start_link, []}, + restart => transient}, + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, + [SystemdSpec]}}. + +-spec notify_boot_state_listeners(rabbit_boot_state:boot_state()) -> ok. +notify_boot_state_listeners(BootState) -> + lists:foreach( + fun + ({_, Child, _, _}) when is_pid(Child) -> + gen_server:cast(Child, {notify_boot_state, BootState}); + (_) -> + ok + end, + supervisor:which_children(?MODULE)). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl new file mode 100644 index 0000000..7a94274 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2015-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_systemd). + +-behaviour(gen_server). + +-export([start_link/0]). + +-export([init/1, + handle_call/3, + handle_cast/2, + terminate/2, + code_change/3]). + +-record(state, {mechanism, + sd_notify_module, + socket}). + +-define(LOG_PREFIX, "Boot state/systemd: "). + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + case os:type() of + {unix, _} -> + case code:load_file(sd_notify) of + {module, sd_notify} -> + {ok, #state{mechanism = legacy, + sd_notify_module = sd_notify}}; + {error, _} -> + case os:getenv("NOTIFY_SOCKET") of + false -> + ignore; + "" -> + ignore; + Socket -> + {ok, #state{mechanism = socat, + socket = Socket}} + end + end; + _ -> + ignore + end. + +handle_call(_Request, _From, State) -> + {noreply, State}. + +handle_cast({notify_boot_state, BootState}, State) -> + notify_boot_state(BootState, State), + {noreply, State}. + +terminate(normal, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%% Private + +notify_boot_state(ready = BootState, + #state{mechanism = legacy, sd_notify_module = SDNotify}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via native module)", + [BootState]), + sd_notify_legacy(SDNotify); +notify_boot_state(ready = BootState, + #state{mechanism = socat, socket = Socket}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via socat(1))", + [BootState]), + sd_notify_socat(Socket); +notify_boot_state(BootState, _) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "ignoring state `~s`", + [BootState]), + ok. + +sd_notify_message() -> + "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". + +sd_notify_legacy(SDNotify) -> + SDNotify:sd_notify(0, sd_notify_message()). + +%% socat(1) is the most portable way the sd_notify could be +%% implemented in erlang, without introducing some NIF. Currently the +%% following issues prevent us from implementing it in a more +%% reasonable way: +%% - systemd-notify(1) is unstable for non-root users +%% - erlang doesn't support unix domain sockets. +%% +%% Some details on how we ended with such a solution: +%% https://github.com/rabbitmq/rabbitmq-server/issues/664 +sd_notify_socat(Socket) -> + case sd_current_unit() of + {ok, Unit} -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemd unit for activation check: \"~s\"~n", + [Unit]), + sd_notify_socat(Socket, Unit); + _ -> + ok + end. + +sd_notify_socat(Socket, Unit) -> + try sd_open_port(Socket) of + Port -> + Port ! {self(), {command, sd_notify_message()}}, + Result = sd_wait_activation(Port, Unit), + port_close(Port), + Result + catch + Class:Reason -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "Failed to start socat(1): ~p:~p~n", + [Class, Reason]), + false + end. + +sd_current_unit() -> + CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), + Ret = (catch re:run(CmdOut, + "([-.@0-9a-zA-Z]+)", + [unicode, {capture, all_but_first, list}])), + case Ret of + {'EXIT', _} -> error; + {match, [Unit]} -> {ok, Unit}; + _ -> error + end. + +socat_socket_arg("@" ++ AbstractUnixSocket) -> + "abstract-sendto:" ++ AbstractUnixSocket; +socat_socket_arg(UnixSocket) -> + "unix-sendto:" ++ UnixSocket. + +sd_open_port(Socket) -> + open_port( + {spawn_executable, os:find_executable("socat")}, + [{args, [socat_socket_arg(Socket), "STDIO"]}, + use_stdio, out]). + +sd_wait_activation(Port, Unit) -> + case os:find_executable("systemctl") of + false -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemctl(1) unavailable, falling back to sleep~n"), + timer:sleep(5000), + ok; + _ -> + sd_wait_activation(Port, Unit, 10) + end. + +sd_wait_activation(_, _, 0) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "service still in 'activating' state, bailing out~n"), + ok; +sd_wait_activation(Port, Unit, AttemptsLeft) -> + Ret = os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'"), + case Ret of + "ActiveState=activating\n" -> + timer:sleep(1000), + sd_wait_activation(Port, Unit, AttemptsLeft - 1); + "ActiveState=" ++ _ -> + ok; + _ = Err -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "unexpected status from systemd: ~p~n", [Err]), + ok + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl new file mode 100644 index 0000000..ef15f47 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl @@ -0,0 +1,228 @@ +-module(rabbit_prelaunch). + +-include_lib("eunit/include/eunit.hrl"). + +-export([run_prelaunch_first_phase/0, + assert_mnesia_is_stopped/0, + get_context/0, + get_stop_reason/0, + set_stop_reason/1, + clear_stop_reason/0, + is_initial_pass/0, + initial_pass_finished/0, + shutdown_func/1]). + +-ifdef(TEST). +-export([store_context/1, + clear_context_cache/0]). +-endif. + +-define(PT_KEY_CONTEXT, {?MODULE, context}). +-define(PT_KEY_INITIAL_PASS, {?MODULE, initial_pass_finished}). +-define(PT_KEY_SHUTDOWN_FUNC, {?MODULE, chained_shutdown_func}). +-define(PT_KEY_STOP_REASON, {?MODULE, stop_reason}). + +run_prelaunch_first_phase() -> + try + do_run() + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error + end. + +do_run() -> + %% Indicate RabbitMQ is booting. + clear_stop_reason(), + rabbit_boot_state:set(booting), + + %% Configure dbg if requested. + rabbit_prelaunch_early_logging:enable_quick_dbg(rabbit_env:dbg_config()), + + %% Setup signal handler. + ok = rabbit_prelaunch_sighandler:setup(), + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. + %% + %% We need this because our cluster consistency check (in the second + %% phase) depends on Mnesia not being started before it has a chance + %% to run. + %% + %% Also, in the initial pass, we don't want Mnesia to run before + %% Erlang distribution is configured. + assert_mnesia_is_stopped(), + + %% Get informations to setup logging. + Context0 = rabbit_env:get_context_before_logging_init(), + ?assertMatch(#{}, Context0), + + %% Setup logging for the prelaunch phase. + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context0, true), + + IsInitialPass = is_initial_pass(), + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [1/2] (initial pass) =="), + rabbit_log_prelaunch:debug(""); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [1/2] =="), + rabbit_log_prelaunch:debug("") + end, + rabbit_env:log_process_env(), + + %% Load rabbitmq-env.conf, redo logging setup and continue. + Context1 = rabbit_env:get_context_after_logging_init(Context0), + ?assertMatch(#{}, Context1), + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context1, true), + rabbit_env:log_process_env(), + + %% Complete context now that we have the final environment loaded. + Context2 = rabbit_env:get_context_after_reloading_env(Context1), + ?assertMatch(#{}, Context2), + store_context(Context2), + rabbit_env:log_context(Context2), + ok = setup_shutdown_func(), + + Context = Context2#{initial_pass => IsInitialPass}, + + rabbit_env:context_to_code_path(Context), + rabbit_env:context_to_app_env_vars(Context), + + %% 1. Erlang/OTP compatibility check. + ok = rabbit_prelaunch_erlang_compat:check(Context), + + %% 2. Erlang distribution check + start. + ok = rabbit_prelaunch_dist:setup(Context), + + %% 3. Configuration check + loading. + ok = rabbit_prelaunch_conf:setup(Context), + + %% 4. Write PID file. + rabbit_log_prelaunch:debug(""), + _ = write_pid_file(Context), + ignore. + +assert_mnesia_is_stopped() -> + ?assertNot(lists:keymember(mnesia, 1, application:which_applications())). + +store_context(Context) when is_map(Context) -> + persistent_term:put(?PT_KEY_CONTEXT, Context). + +get_context() -> + case persistent_term:get(?PT_KEY_CONTEXT, undefined) of + undefined -> undefined; + Context -> Context#{initial_pass => is_initial_pass()} + end. + +-ifdef(TEST). +clear_context_cache() -> + persistent_term:erase(?PT_KEY_CONTEXT). +-endif. + +get_stop_reason() -> + persistent_term:get(?PT_KEY_STOP_REASON, undefined). + +set_stop_reason(Reason) -> + case get_stop_reason() of + undefined -> + rabbit_log_prelaunch:debug("Set stop reason to: ~p", [Reason]), + persistent_term:put(?PT_KEY_STOP_REASON, Reason); + _ -> + ok + end. + +clear_stop_reason() -> + persistent_term:erase(?PT_KEY_STOP_REASON). + +is_initial_pass() -> + not persistent_term:get(?PT_KEY_INITIAL_PASS, false). + +initial_pass_finished() -> + persistent_term:put(?PT_KEY_INITIAL_PASS, true). + +setup_shutdown_func() -> + ThisMod = ?MODULE, + ThisFunc = shutdown_func, + ExistingShutdownFunc = application:get_env(kernel, shutdown_func), + case ExistingShutdownFunc of + {ok, {ThisMod, ThisFunc}} -> + ok; + {ok, {ExistingMod, ExistingFunc}} -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1 " + "(chained with ~s:~s/1)", + [ThisMod, ThisFunc, ExistingMod, ExistingFunc]), + ok = persistent_term:put( + ?PT_KEY_SHUTDOWN_FUNC, + ExistingShutdownFunc), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc); + _ -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1", + [ThisMod, ThisFunc]), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc) + end. + +record_kernel_shutdown_func(Mod, Func) -> + application:set_env( + kernel, shutdown_func, {Mod, Func}, + [{persistent, true}]). + +shutdown_func(Reason) -> + rabbit_log_prelaunch:debug( + "Running ~s:shutdown_func() as part of `kernel` shutdown", [?MODULE]), + Context = get_context(), + remove_pid_file(Context), + ChainedShutdownFunc = persistent_term:get( + ?PT_KEY_SHUTDOWN_FUNC, + undefined), + case ChainedShutdownFunc of + {ChainedMod, ChainedFunc} -> ChainedMod:ChainedFunc(Reason); + _ -> ok + end. + +write_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Writing PID file: ~s", [PidFile]), + case filelib:ensure_dir(PidFile) of + ok -> + OSPid = os:getpid(), + case file:write_file(PidFile, OSPid) of + ok -> + ok; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to write PID file \"~s\": ~s", + [PidFile, file:format_error(Reason)]), + Error + end; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to create PID file \"~s\" directory: ~s", + [PidFile, file:format_error(Reason)]), + Error + end; +write_pid_file(_) -> + ok. + +remove_pid_file(#{pid_file := PidFile, keep_pid_file_on_exit := true}) -> + rabbit_log_prelaunch:debug("Keeping PID file: ~s", [PidFile]), + ok; +remove_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Deleting PID file: ~s", [PidFile]), + _ = file:delete(PidFile), + ok; +remove_pid_file(_) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl new file mode 100644 index 0000000..cef7f05 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl @@ -0,0 +1,11 @@ +-module(rabbit_prelaunch_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + rabbit_prelaunch_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl new file mode 100644 index 0000000..d2409f0 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -0,0 +1,503 @@ +-module(rabbit_prelaunch_conf). + +-include_lib("kernel/include/file.hrl"). +-include_lib("stdlib/include/zip.hrl"). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1, + get_config_state/0, + generate_config_from_cuttlefish_files/3, + decrypt_config/1]). + +-ifdef(TEST). +-export([decrypt_config/2]). +-endif. + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Configuration =="), + + %% TODO: Check if directories/files are inside Mnesia dir. + + ok = set_default_config(), + + AdditionalConfigFiles = find_additional_config_files(Context), + AdvancedConfigFile = find_actual_advanced_config_file(Context), + State = case find_actual_main_config_file(Context) of + {MainConfigFile, erlang} -> + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + MainConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => MainConfigFile}; + {MainConfigFile, cuttlefish} -> + ConfigFiles = [MainConfigFile | AdditionalConfigFiles], + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdditionalConfigFiles =/= [] -> + ConfigFiles = AdditionalConfigFiles, + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdvancedConfigFile =/= undefined -> + rabbit_log_prelaunch:warning( + "Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s", + [AdvancedConfigFile]), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined -> + #{config_files => [], + config_advanced_file => undefined} + end, + ok = override_with_hard_coded_critical_config(), + ok = set_credentials_obfuscation_secret(), + rabbit_log_prelaunch:debug( + "Saving config state to application env: ~p", [State]), + store_config_state(State). + +store_config_state(ConfigState) -> + persistent_term:put({rabbitmq_prelaunch, config_state}, ConfigState). + +get_config_state() -> + persistent_term:get({rabbitmq_prelaunch, config_state}, undefined). + +%% ------------------------------------------------------------------- +%% Configuration loading. +%% ------------------------------------------------------------------- + +set_default_config() -> + rabbit_log_prelaunch:debug("Setting default config"), + Config = [ + {ra, + [ + {wal_max_size_bytes, 536870912}, %% 5 * 2 ^ 20 + {wal_max_batch_size, 4096} + ]}, + {sysmon_handler, + [{process_limit, 100}, + {port_limit, 100}, + {gc_ms_limit, 0}, + {schedule_ms_limit, 0}, + {heap_word_limit, 0}, + {busy_port, false}, + {busy_dist_port, true}]} + ], + apply_erlang_term_based_config(Config). + +find_actual_main_config_file(#{main_config_file := File}) -> + case filelib:is_regular(File) of + true -> + Format = case filename:extension(File) of + ".conf" -> cuttlefish; + ".config" -> erlang; + _ -> determine_config_format(File) + end, + {File, Format}; + false -> + OldFormatFile = File ++ ".config", + NewFormatFile = File ++ ".conf", + case filelib:is_regular(OldFormatFile) of + true -> + case filelib:is_regular(NewFormatFile) of + true -> + rabbit_log_prelaunch:warning( + "Both old (.config) and new (.conf) format config " + "files exist."), + rabbit_log_prelaunch:warning( + "Using the old format config file: ~s", + [OldFormatFile]), + rabbit_log_prelaunch:warning( + "Please update your config files to the new format " + "and remove the old file."), + ok; + false -> + ok + end, + {OldFormatFile, erlang}; + false -> + case filelib:is_regular(NewFormatFile) of + true -> {NewFormatFile, cuttlefish}; + false -> undefined + end + end + end. + +find_additional_config_files(#{additional_config_files := Pattern}) + when Pattern =/= undefined -> + Pattern1 = case filelib:is_dir(Pattern) of + true -> filename:join(Pattern, "*"); + false -> Pattern + end, + OnlyFiles = [File || + File <- filelib:wildcard(Pattern1), + filelib:is_regular(File)], + lists:sort(OnlyFiles); +find_additional_config_files(_) -> + []. + +find_actual_advanced_config_file(#{advanced_config_file := File}) -> + case filelib:is_regular(File) of + true -> File; + false -> undefined + end. + +determine_config_format(File) -> + case filelib:file_size(File) of + 0 -> + cuttlefish; + _ -> + case file:consult(File) of + {ok, _} -> erlang; + _ -> cuttlefish + end + end. + +load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile) -> + Config = generate_config_from_cuttlefish_files( + Context, ConfigFiles, AdvancedConfigFile), + apply_erlang_term_based_config(Config), + Config. + +generate_config_from_cuttlefish_files(Context, + ConfigFiles, + AdvancedConfigFile) -> + %% Load schemas. + SchemaFiles = find_cuttlefish_schemas(Context), + case SchemaFiles of + [] -> + rabbit_log_prelaunch:error( + "No configuration schema found~n", []), + throw({error, no_configuration_schema_found}); + _ -> + rabbit_log_prelaunch:debug( + "Configuration schemas found:~n", []), + lists:foreach( + fun(SchemaFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [SchemaFile]) + end, + SchemaFiles), + ok + end, + Schema = cuttlefish_schema:files(SchemaFiles), + + %% Load configuration. + rabbit_log_prelaunch:debug( + "Loading configuration files (Cuttlefish based):"), + lists:foreach( + fun(ConfigFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [ConfigFile]) + end, ConfigFiles), + case cuttlefish_conf:files(ConfigFiles) of + {errorlist, Errors} -> + rabbit_log_prelaunch:error("Error parsing configuration:"), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)]) + end, Errors), + rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"), + throw({error, failed_to_parse_configuration_file}); + Config0 -> + %% Finalize configuration, based on the schema. + Config = case cuttlefish_generator:map(Schema, Config0) of + {error, Phase, {errorlist, Errors}} -> + %% TODO + rabbit_log_prelaunch:error( + "Error preparing configuration in phase ~ts:", + [Phase]), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error( + " - ~ts", + [cuttlefish_error:xlate(Error)]) + end, Errors), + throw( + {error, failed_to_prepare_configuration}); + ValidConfig -> + proplists:delete(vm_args, ValidConfig) + end, + + %% Apply advanced configuration overrides, if any. + override_with_advanced_config(Config, AdvancedConfigFile) + end. + +find_cuttlefish_schemas(Context) -> + Apps = list_apps(Context), + rabbit_log_prelaunch:debug( + "Looking up configuration schemas in the following applications:"), + find_cuttlefish_schemas(Apps, []). + +find_cuttlefish_schemas([App | Rest], AllSchemas) -> + Schemas = list_schemas_in_app(App), + find_cuttlefish_schemas(Rest, AllSchemas ++ Schemas); +find_cuttlefish_schemas([], AllSchemas) -> + lists:sort(fun(A,B) -> A < B end, AllSchemas). + +list_apps(#{os_type := {win32, _}, plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ";"), + list_apps1(PluginsDirs, []); +list_apps(#{plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ":"), + list_apps1(PluginsDirs, []). + + +list_apps1([Dir | Rest], Apps) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + NewApps = [list_to_atom( + hd( + string:split(filename:basename(F, ".ex"), "-"))) + || F <- Filenames], + Apps1 = lists:umerge(Apps, lists:sort(NewApps)), + list_apps1(Rest, Apps1); + {error, Reason} -> + rabbit_log_prelaunch:debug( + "Failed to list directory \"~ts\" content: ~ts", + [Dir, file:format_error(Reason)]), + list_apps1(Rest, Apps) + end; +list_apps1([], AppInfos) -> + AppInfos. + +list_schemas_in_app(App) -> + {Loaded, Unload} = case application:load(App) of + ok -> {true, true}; + {error, {already_loaded, _}} -> {true, false}; + {error, _} -> {false, false} + end, + List = case Loaded of + true -> + case code:priv_dir(App) of + {error, bad_name} -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable priv dir)", [App]), + []; + PrivDir -> + SchemaDir = filename:join([PrivDir, "schema"]), + do_list_schemas_in_app(App, SchemaDir) + end; + false -> + rabbit_log_prelaunch:debug( + " [ ] ~s (failed to load application)", [App]), + [] + end, + case Unload of + true -> _ = application:unload(App), + ok; + false -> ok + end, + List. + +do_list_schemas_in_app(App, SchemaDir) -> + case erl_prim_loader:list_dir(SchemaDir) of + {ok, Files} -> + rabbit_log_prelaunch:debug(" [x] ~s", [App]), + [filename:join(SchemaDir, File) + || [C | _] = File <- Files, + C =/= $.]; + error -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable schema dir)", [App]), + [] + end. + +override_with_advanced_config(Config, undefined) -> + Config; +override_with_advanced_config(Config, AdvancedConfigFile) -> + rabbit_log_prelaunch:debug( + "Override with advanced configuration file \"~ts\"", + [AdvancedConfigFile]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(Config, AdvancedConfig); + {ok, OtherTerms} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\", " + "incorrect format: ~p", + [AdvancedConfigFile, OtherTerms]), + throw({error, failed_to_parse_advanced_configuration_file}); + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\": ~ts", + [AdvancedConfigFile, file:format_error(Reason)]), + throw({error, failed_to_read_advanced_configuration_file}) + end. + +override_with_hard_coded_critical_config() -> + rabbit_log_prelaunch:debug("Override with hard-coded critical config"), + Config = [ + {ra, + %% Make Ra use a custom logger that dispatches to lager + %% instead of the default OTP logger + [{logger_module, rabbit_log_ra_shim}]} + ], + apply_erlang_term_based_config(Config). + +apply_erlang_term_based_config([{_, []} | Rest]) -> + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([{App, Vars} | Rest]) -> + rabbit_log_prelaunch:debug(" Applying configuration for '~s':", [App]), + ok = apply_app_env_vars(App, Vars), + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([]) -> + ok. + +apply_app_env_vars(App, [{Var, Value} | Rest]) -> + rabbit_log_prelaunch:debug( + " - ~s = ~p", + [Var, Value]), + ok = application:set_env(App, Var, Value, [{persistent, true}]), + apply_app_env_vars(App, Rest); +apply_app_env_vars(_, []) -> + ok. + +set_credentials_obfuscation_secret() -> + rabbit_log_prelaunch:debug("Refreshing credentials obfuscation configuration from env: ~p", + [application:get_all_env(credentials_obfuscation)]), + ok = credentials_obfuscation:refresh_config(), + CookieBin = rabbit_data_coercion:to_binary(erlang:get_cookie()), + rabbit_log_prelaunch:debug( + "Setting credentials obfuscation secret to '~s'", [CookieBin]), + ok = credentials_obfuscation:set_secret(CookieBin). + +%% ------------------------------------------------------------------- +%% Config decryption. +%% ------------------------------------------------------------------- + +decrypt_config(Apps) -> + rabbit_log_prelaunch:debug("Decoding encrypted config values (if any)"), + ConfigEntryDecoder = application:get_env(rabbit, config_entry_decoder, []), + decrypt_config(Apps, ConfigEntryDecoder). + +decrypt_config([], _) -> + ok; +decrypt_config([App | Apps], Algo) -> + Algo1 = decrypt_app(App, application:get_all_env(App), Algo), + decrypt_config(Apps, Algo1). + +decrypt_app(_, [], Algo) -> + Algo; +decrypt_app(App, [{Key, Value} | Tail], Algo) -> + Algo2 = try + case decrypt(Value, Algo) of + {Value, Algo1} -> + Algo1; + {NewValue, Algo1} -> + rabbit_log_prelaunch:debug( + "Value of `~s` decrypted", [Key]), + ok = application:set_env(App, Key, NewValue, + [{persistent, true}]), + Algo1 + end + catch + throw:{bad_config_entry_decoder, _} = Error -> + throw(Error); + _:Msg -> + throw({config_decryption_error, {key, Key}, Msg}) + end, + decrypt_app(App, Tail, Algo2). + +decrypt({encrypted, _}=EncValue, {Cipher, Hash, Iterations, PassPhrase} = Algo) -> + {rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, EncValue), Algo}; +decrypt({encrypted, _}=EncValue, + ConfigEntryDecoder) + when is_list(ConfigEntryDecoder) -> + Algo = config_entry_decoder_to_algo(ConfigEntryDecoder), + decrypt(EncValue, Algo); +decrypt(List, Algo) when is_list(List) -> + decrypt_list(List, Algo, []); +decrypt(Value, Algo) -> + {Value, Algo}. + +%% We make no distinction between strings and other lists. +%% When we receive a string, we loop through each element +%% and ultimately return the string unmodified, as intended. +decrypt_list([], Algo, Acc) -> + {lists:reverse(Acc), Algo}; +decrypt_list([{Key, Value} | Tail], Algo, Acc) + when Key =/= encrypted -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [{Key, Value1} | Acc]); +decrypt_list([Value | Tail], Algo, Acc) -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [Value1 | Acc]). + +config_entry_decoder_to_algo(ConfigEntryDecoder) -> + case get_passphrase(ConfigEntryDecoder) of + undefined -> + throw({bad_config_entry_decoder, missing_passphrase}); + PassPhrase -> + { + proplists:get_value( + cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), + proplists:get_value( + hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), + proplists:get_value( + iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), + PassPhrase + } + end. + +get_passphrase(ConfigEntryDecoder) -> + rabbit_log_prelaunch:debug("Getting encrypted config passphrase"), + case proplists:get_value(passphrase, ConfigEntryDecoder) of + prompt -> + IoDevice = get_input_iodevice(), + ok = io:setopts(IoDevice, [{echo, false}]), + PP = lists:droplast(io:get_line(IoDevice, + "\nPlease enter the passphrase to unlock encrypted " + "configuration entries.\n\nPassphrase: ")), + ok = io:setopts(IoDevice, [{echo, true}]), + io:format(IoDevice, "~n", []), + PP; + {file, Filename} -> + {ok, File} = file:read_file(Filename), + [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), + PP; + PP -> + PP + end. + +%% This function retrieves the correct IoDevice for requesting +%% input. The problem with using the default IoDevice is that +%% the Erlang shell prevents us from getting the input. +%% +%% Instead we therefore look for the io process used by the +%% shell and if it can't be found (because the shell is not +%% started e.g with -noshell) we use the 'user' process. +%% +%% This function will not work when either -oldshell or -noinput +%% options are passed to erl. +get_input_iodevice() -> + case whereis(user) of + undefined -> + user; + User -> + case group:interfaces(User) of + [] -> + user; + [{user_drv, Drv}] -> + case user_drv:interfaces(Drv) of + [] -> user; + [{current_group, IoDevice}] -> IoDevice + end + end + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl new file mode 100644 index 0000000..3d71843 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl @@ -0,0 +1,104 @@ +-module(rabbit_prelaunch_dist). + +-export([setup/1]). + +setup(#{nodename := Node, nodename_type := NameType} = Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang distribution =="), + rabbit_log_prelaunch:debug("Rqeuested node name: ~s (type: ~s)", + [Node, NameType]), + case node() of + nonode@nohost -> + ok = rabbit_nodes_common:ensure_epmd(), + ok = dist_port_range_check(Context), + ok = dist_port_use_check(Context), + ok = duplicate_node_check(Context), + + ok = do_setup(Context); + Node -> + rabbit_log_prelaunch:debug( + "Erlang distribution already running", []), + ok; + Unexpected -> + throw({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) + end, + ok. + +do_setup(#{nodename := Node, nodename_type := NameType}) -> + rabbit_log_prelaunch:debug("Starting Erlang distribution", []), + case application:get_env(kernel, net_ticktime) of + {ok, Ticktime} when is_integer(Ticktime) andalso Ticktime >= 1 -> + %% The value passed to net_kernel:start/1 is the + %% "minimum transition traffic interval" as defined in + %% net_kernel:set_net_ticktime/1. + MTTI = Ticktime * 1000 div 4, + {ok, _} = net_kernel:start([Node, NameType, MTTI]), + ok; + _ -> + {ok, _} = net_kernel:start([Node, NameType]), + ok + end, + ok. + +%% Check whether a node with the same name is already running +duplicate_node_check(#{split_nodename := {NodeName, NodeHost}}) -> + rabbit_log_prelaunch:debug( + "Checking if node name ~s is already used", [NodeName]), + PrelaunchName = rabbit_nodes_common:make( + {NodeName ++ "_prelaunch_" ++ os:getpid(), + "localhost"}), + {ok, _} = net_kernel:start([PrelaunchName, shortnames]), + case rabbit_nodes_common:names(NodeHost) of + {ok, NamePorts} -> + case proplists:is_defined(NodeName, NamePorts) of + true -> + throw({error, {duplicate_node_name, NodeName, NodeHost}}); + false -> + ok = net_kernel:stop(), + ok + end; + {error, EpmdReason} -> + throw({error, {epmd_error, NodeHost, EpmdReason}}) + end. + +dist_port_range_check(#{erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is valid", [DistTcpPort]), + case DistTcpPort of + _ when DistTcpPort < 1 orelse DistTcpPort > 65535 -> + throw({error, {invalid_dist_port_range, DistTcpPort}}); + _ -> + ok + end. + +dist_port_use_check(#{split_nodename := {_, NodeHost}, + erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is available", [DistTcpPort]), + dist_port_use_check_ipv4(NodeHost, DistTcpPort). + +dist_port_use_check_ipv4(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +dist_port_use_check_ipv6(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +-spec dist_port_use_check_fail(non_neg_integer(), string()) -> + no_return(). + +dist_port_use_check_fail(Port, Host) -> + {ok, Names} = rabbit_nodes_common:names(Host), + case [N || {N, P} <- Names, P =:= Port] of + [] -> + throw({error, {dist_port_already_used, Port, not_erlang, Host}}); + [Name] -> + throw({error, {dist_port_already_used, Port, Name, Host}}) + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl new file mode 100644 index 0000000..4314222 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl @@ -0,0 +1,109 @@ +-module(rabbit_prelaunch_early_logging). + +-include_lib("rabbit_common/include/rabbit_log.hrl"). + +-export([setup_early_logging/2, + enable_quick_dbg/1, + use_colored_logging/0, + use_colored_logging/1, + list_expected_sinks/0]). + +setup_early_logging(#{log_levels := undefined} = Context, + LagerEventToStdout) -> + setup_early_logging(Context#{log_levels => get_default_log_level()}, + LagerEventToStdout); +setup_early_logging(Context, LagerEventToStdout) -> + Configured = lists:member( + lager_util:make_internal_sink_name(rabbit_log_prelaunch), + lager:list_all_sinks()), + case Configured of + true -> ok; + false -> do_setup_early_logging(Context, LagerEventToStdout) + end. + +get_default_log_level() -> + #{"prelaunch" => warning}. + +do_setup_early_logging(#{log_levels := LogLevels} = Context, + LagerEventToStdout) -> + Colored = use_colored_logging(Context), + application:set_env(lager, colored, Colored), + ConsoleBackend = lager_console_backend, + case LagerEventToStdout of + true -> + GLogLevel = case LogLevels of + #{global := Level} -> Level; + _ -> warning + end, + _ = lager_app:start_handler( + lager_event, ConsoleBackend, [{level, GLogLevel}]), + ok; + false -> + ok + end, + lists:foreach( + fun(Sink) -> + CLogLevel = get_log_level(LogLevels, Sink), + lager_app:configure_sink( + Sink, + [{handlers, [{ConsoleBackend, [{level, CLogLevel}]}]}]) + end, list_expected_sinks()), + ok. + +use_colored_logging() -> + use_colored_logging(rabbit_prelaunch:get_context()). + +use_colored_logging(#{log_levels := #{color := true}, + output_supports_colors := true}) -> + true; +use_colored_logging(_) -> + false. + +list_expected_sinks() -> + Key = {?MODULE, lager_extra_sinks}, + case persistent_term:get(Key, undefined) of + undefined -> + CompileOptions = proplists:get_value(options, + module_info(compile), + []), + AutoList = [lager_util:make_internal_sink_name(M) + || M <- proplists:get_value(lager_extra_sinks, + CompileOptions, [])], + List = case lists:member(?LAGER_SINK, AutoList) of + true -> AutoList; + false -> [?LAGER_SINK | AutoList] + end, + %% Store the list in the application environment. If this + %% module is later cover-compiled, the compile option will + %% be lost, so we will be able to retrieve the list from the + %% application environment. + persistent_term:put(Key, List), + List; + List -> + List + end. + +sink_to_category(Sink) when is_atom(Sink) -> + re:replace( + atom_to_list(Sink), + "^rabbit_log_(.+)_lager_event$", + "\\1", + [{return, list}]). + +get_log_level(LogLevels, Sink) -> + Category = sink_to_category(Sink), + case LogLevels of + #{Category := Level} -> Level; + #{global := Level} -> Level; + _ -> warning + end. + +enable_quick_dbg(#{dbg_output := Output, dbg_mods := Mods}) -> + case Output of + stdout -> {ok, _} = dbg:tracer(), + ok; + _ -> {ok, _} = dbg:tracer(port, dbg:trace_port(file, Output)), + ok + end, + {ok, _} = dbg:p(all, c), + lists:foreach(fun(M) -> {ok, _} = dbg:tp(M, cx) end, Mods). diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl new file mode 100644 index 0000000..1e8fe26 --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl @@ -0,0 +1,47 @@ +-module(rabbit_prelaunch_erlang_compat). + +-export([check/1]). + +-define(OTP_MINIMUM, "21.3"). +-define(ERTS_MINIMUM, "10.3"). + +check(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang/OTP compatibility check =="), + + ERTSVer = erlang:system_info(version), + OTPRel = rabbit_misc:otp_release(), + rabbit_log_prelaunch:debug( + "Requiring: Erlang/OTP ~s (ERTS ~s)", [?OTP_MINIMUM, ?ERTS_MINIMUM]), + rabbit_log_prelaunch:debug( + "Running: Erlang/OTP ~s (ERTS ~s)", [OTPRel, ERTSVer]), + + case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of + true when ?ERTS_MINIMUM =/= ERTSVer -> + rabbit_log_prelaunch:debug( + "Erlang/OTP version requirement satisfied"), + ok; + true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> + %% When a critical regression or bug is found, a new OTP + %% release can be published without changing the ERTS + %% version. For instance, this is the case with R16B03 and + %% R16B03-1. + %% + %% In this case, we compare the release versions + %% alphabetically. + ok; + _ -> + Msg = + "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " + "minimum required version is ~s (erts ~s)", + Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], + rabbit_log_prelaunch:error(Msg, Args), + + %% Also print to stderr to make this more visible + io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), + + Msg2 = rabbit_misc:format( + "Erlang ~s or later is required, started on ~s", + [?OTP_MINIMUM, OTPRel]), + throw({error, {erlang_version_too_old, Msg2}}) + end. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl new file mode 100644 index 0000000..2a2eb2b --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl @@ -0,0 +1,112 @@ +-module(rabbit_prelaunch_errors). + +-export([format_error/1, + format_exception/3, + log_error/1, + log_exception/3]). + +-define(BOOT_FAILED_HEADER, + "\n" + "BOOT FAILED\n" + "===========\n"). + +-define(BOOT_FAILED_FOOTER, + "\n"). + +log_error(Error) -> + Message = format_error(Error), + log_message(Message). + +format_error({error, {duplicate_node_name, NodeName, NodeHost}}) -> + rabbit_misc:format( + "ERROR: node with name ~p already running on ~p", + [NodeName, NodeHost]); +format_error({error, {epmd_error, NodeHost, EpmdReason}}) -> + rabbit_misc:format( + "ERROR: epmd error for host ~s: ~s", + [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]); +format_error({error, {invalid_dist_port_range, DistTcpPort}}) -> + rabbit_misc:format( + "Invalid Erlang distribution TCP port: ~b", [DistTcpPort]); +format_error({error, {dist_port_already_used, Port, not_erlang, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use on ~s " + "(by non-Erlang process?)", [Port, Host]); +format_error({error, {dist_port_already_used, Port, Name, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use by ~s@~s", [Port, Name, Host]); +format_error({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) -> + rabbit_misc:format( + "Erlang distribution running with another node name (~s) " + "than the configured one (~s)", + [Unexpected, Node]); +format_error({bad_config_entry_decoder, missing_passphrase}) -> + rabbit_misc:format( + "Missing passphrase or missing passphrase read method in " + "`config_entry_decoder`", []); +format_error({config_decryption_error, {key, Key}, _Msg}) -> + rabbit_misc:format( + "Error while decrypting key '~p'. Please check encrypted value, " + "passphrase, and encryption configuration~n", + [Key]); +format_error({error, {timeout_waiting_for_tables, AllNodes, _}}) -> + Suffix = + "~nBACKGROUND~n==========~n~n" + "This cluster node was shut down while other nodes were still running.~n" + "To avoid losing data, you should start the other nodes first, then~n" + "start this one. To force this node to start, first invoke~n" + "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" + "cluster nodes after this one was shut down may be lost.", + {Message, Nodes} = + case AllNodes -- [node()] of + [] -> {rabbit_misc:format( + "Timeout contacting cluster nodes. Since RabbitMQ was" + " shut down forcefully~nit cannot determine which nodes" + " are timing out.~n" ++ Suffix, []), + []}; + Ns -> {rabbit_misc:format( + "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, + [Ns]), + Ns} + end, + Message ++ "\n" ++ rabbit_nodes_common:diagnostics(Nodes); +format_error({error, {cannot_log_to_file, unknown, Reason}}) -> + rabbit_misc:format( + "failed to initialised logger: ~p~n", + [Reason]); +format_error({error, {cannot_log_to_file, LogFile, + {cannot_create_parent_dirs, _, Reason}}}) -> + rabbit_misc:format( + "failed to create parent directory for log file at '~s', reason: ~s~n", + [LogFile, file:format_error(Reason)]); +format_error({error, {cannot_log_to_file, LogFile, Reason}}) -> + rabbit_misc:format( + "failed to open log file at '~s', reason: ~s", + [LogFile, file:format_error(Reason)]); +format_error(Error) -> + rabbit_misc:format("Error during startup: ~p", [Error]). + +log_exception(Class, Exception, Stacktrace) -> + Message = format_exception(Class, Exception, Stacktrace), + log_message(Message). + +format_exception(Class, Exception, Stacktrace) -> + rabbit_misc:format( + "Exception during startup:~n~s", + [lager:pr_stacktrace(Stacktrace, {Class, Exception})]). + +log_message(Message) -> + Lines = string:split( + ?BOOT_FAILED_HEADER ++ + Message ++ + ?BOOT_FAILED_FOOTER, + [$\n], + all), + lists:foreach( + fun(Line) -> + rabbit_log_prelaunch:error("~s", [Line]), + io:format(standard_error, "~s~n", [Line]) + end, Lines), + timer:sleep(1000), + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl new file mode 100644 index 0000000..f9a60ef --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl @@ -0,0 +1,93 @@ +-module(rabbit_prelaunch_sighandler). +-behaviour(gen_event). + +-export([setup/0, + init/1, + handle_event/2, + handle_call/2, + handle_info/2, + terminate/2, + code_change/3]). + +%% CAUTION: Signal handling in this module must be kept consistent +%% with the same handling in rabbitmq-server(8). + +%% #{signal => default | ignore | stop}. +-define(SIGNALS_HANDLED_BY_US, + #{ + %% SIGHUP is often used to reload the configuration or reopen + %% log files after they were rotated. We don't support any + %% of those two cases, so ignore it for now, until we can do + %% something about it. + sighup => ignore, + + %% SIGTSTP is triggered by Ctrl+Z to pause a program. However + %% we can't handle SIGCONT, the signal used to resume the + %% program. Unfortunately, it makes a SIGTSTP handler less + %% useful here. + sigtstp => ignore + }). + +-define(SIGNAL_HANDLED_BY_ERLANG(Signal), + Signal =:= sigusr1 orelse + Signal =:= sigquit orelse + Signal =:= sigterm). + +-define(SERVER, erl_signal_server). + +setup() -> + case os:type() of + {unix, _} -> + case whereis(?SERVER) of + undefined -> + ok; + _ -> + case lists:member(?MODULE, gen_event:which_handlers(?SERVER)) of + true -> ok; + false -> gen_event:add_handler(?SERVER, ?MODULE, []) + end + end; + _ -> + ok + end. + +init(_Args) -> + maps:fold( + fun + (Signal, _, Ret) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> Ret; + (Signal, default, ok) -> os:set_signal(Signal, default); + (Signal, ignore, ok) -> os:set_signal(Signal, ignore); + (Signal, _, ok) -> os:set_signal(Signal, handle) + end, ok, ?SIGNALS_HANDLED_BY_US), + {ok, #{}}. + +handle_event(Signal, State) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> + {ok, State}; +handle_event(Signal, State) -> + case ?SIGNALS_HANDLED_BY_US of + %% The code below can be uncommented if we introduce a signal + %% which should stop RabbitMQ. + % + %#{Signal := stop} -> + % error_logger:info_msg( + % "~s received - shutting down~n", + % [string:uppercase(atom_to_list(Signal))]), + % ok = init:stop(); + _ -> + error_logger:info_msg( + "~s received - unhandled signal~n", + [string:uppercase(atom_to_list(Signal))]) + end, + {ok, State}. + +handle_info(_, State) -> + {ok, State}. + +handle_call(_, State) -> + {ok, ok, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Args, _State) -> + ok. diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl new file mode 100644 index 0000000..9fd117d --- /dev/null +++ b/deps/rabbit/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_sup). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + BootStateSup = #{id => bootstate, + start => {rabbit_boot_state_sup, start_link, []}, + type => supervisor}, + %% `rabbit_prelaunch` does not start a process, it only configures + %% the node. + Prelaunch = #{id => prelaunch, + start => {rabbit_prelaunch, run_prelaunch_first_phase, []}, + restart => transient}, + Procs = [BootStateSup, Prelaunch], + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, Procs}}. diff --git a/deps/rabbit/check_xref b/deps/rabbit/check_xref deleted file mode 100755 index 9eee5bb..0000000 --- a/deps/rabbit/check_xref +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/env escript -%% -*- erlang -*- --mode(compile). - -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License -%% at https://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and -%% limitations under the License. -%% -%% The Original Code is RabbitMQ. -%% -%% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2010-2019 Pivotal Software, Inc. All rights reserved. -%% - -main(["-h"]) -> - io:format("usage: check_xref PluginDirectory (options)~n" - "options:~n" - " -q - quiet mode (only prints errors)~n" - " -X - disables all filters~n"); -main([PluginsDir|Argv]) -> - put({?MODULE, quiet}, lists:member("-q", Argv)), - put({?MODULE, no_filters}, lists:member("-X", Argv)), - - {ok, Cwd} = file:get_cwd(), - code:add_pathz(filename:join(Cwd, "ebin")), - LibDir = filename:join(Cwd, "lib"), - case filelib:is_dir(LibDir) of - false -> ok; - true -> os:cmd("rm -rf " ++ LibDir) - end, - Rc = try - check(Cwd, PluginsDir, LibDir, checks()) - catch - _:Err -> - io:format(user, "failed: ~p~n", [Err]), - 1 - end, - shutdown(Rc, LibDir). - -shutdown(Rc, LibDir) -> - os:cmd("rm -rf " ++ LibDir), - erlang:halt(Rc). - -check(Cwd, PluginsDir, LibDir, Checks) -> - {ok, Plugins} = file:list_dir(PluginsDir), - ok = file:make_dir(LibDir), - put({?MODULE, third_party}, []), - [begin - Source = filename:join(PluginsDir, Plugin), - Target = filename:join(LibDir, Plugin), - IsExternal = external_dependency(Plugin), - AppN = case IsExternal of - true -> filename:join(LibDir, unmangle_name(Plugin)); - false -> filename:join( - LibDir, filename:basename(Plugin, ".ez")) - end, - - report(info, "mkdir -p ~s~n", [Target]), - filelib:ensure_dir(Target), - - report(info, "cp ~s ~s~n", [Source, Target]), - {ok, _} = file:copy(Source, Target), - - report(info, "unzip -d ~s ~s~n", [LibDir, Target]), - {ok, _} = zip:unzip(Target, [{cwd, LibDir}]), - - UnpackDir = filename:join(LibDir, filename:basename(Target, ".ez")), - report(info, "mv ~s ~s~n", [UnpackDir, AppN]), - ok = file:rename(UnpackDir, AppN), - - code:add_patha(filename:join(AppN, "ebin")), - case IsExternal of - true -> App = list_to_atom(hd(string:tokens(filename:basename(AppN), - "-"))), - report(info, "loading ~p~n", [App]), - application:load(App), - store_third_party(App); - _ -> ok - end - end || Plugin <- Plugins, - lists:suffix(".ez", Plugin)], - - RabbitAppEbin = filename:join([LibDir, "rabbit", "ebin"]), - filelib:ensure_dir(filename:join(RabbitAppEbin, "foo")), - {ok, Beams} = file:list_dir("ebin"), - [{ok, _} = file:copy(filename:join("ebin", Beam), - filename:join(RabbitAppEbin, Beam)) || Beam <- Beams], - xref:start(?MODULE), - xref:set_default(?MODULE, [{verbose, false}, {warnings, false}]), - xref:set_library_path(?MODULE, code:get_path()), - xref:add_release(?MODULE, Cwd, {name, rabbit}), - store_unresolved_calls(), - Results = lists:flatten([perform_analysis(Q) || Q <- Checks]), - report(Results). - -%% -%% Analysis -%% - -perform_analysis({Query, Description, Severity}) -> - perform_analysis({Query, Description, Severity, fun(_) -> false end}); -perform_analysis({Query, Description, Severity, Filter}) -> - report_progress("Checking whether any code ~s " - "(~s)~n", [Description, Query]), - case analyse(Query) of - {ok, Analysis} -> - [filter(Result, Filter) || - Result <- process_analysis(Query, Description, - Severity, Analysis)]; - {error, Module, Reason} -> - {analysis_error, {Module, Reason}} - end. - -partition(Results) -> - lists:partition(fun({{_, L}, _}) -> L =:= error end, Results). - -analyse(Query) when is_atom(Query) -> - xref:analyse(?MODULE, Query, [{verbose, false}]); -analyse(Query) when is_list(Query) -> - xref:q(?MODULE, Query). - -process_analysis(Query, Tag, Severity, Analysis) when is_atom(Query) -> - [{{Tag, Severity}, MFA} || MFA <- Analysis]; -process_analysis(Query, Tag, Severity, Analysis) when is_list(Query) -> - [{{Tag, Severity}, Result} || Result <- Analysis]. - -checks() -> - [{"(XXL)(Lin) ((XC - UC) || (XU - X - B))", - "has call to undefined function(s)", - error, filters()}, - {"(Lin) (L - LU)", - "has unused local function(s)", - error, filters()}, - {"(E | \"(rabbit|amqp).*\":_/_ || \"gen_server2?\":call/2)", - "has 5 sec timeout in", - error, filters()}, - {"(Lin) (LU * (X - XU))", - "has exported function(s) only used locally", - warning, filters()}, - {"(Lin) (DF * (XU + LU))", "used deprecated function(s)", - warning, filters()}]. -%% {"(Lin) (X - XU)", "possibly unused export", -%% warning, fun filter_unused/1}]. - -%% -%% noise filters (can be disabled with -X) - strip uninteresting analyses -%% - -filter(Result, Filter) -> - case Filter(Result) of - false -> Result; - true -> [] %% NB: this gets flattened out later on.... - end. - -filters() -> - case get({?MODULE, no_filters}) of - true -> fun(_) -> false end; - _ -> filter_chain([fun is_unresolved_call/1, fun is_callback/1, - fun is_unused/1, fun is_irrelevant/1]) - end. - -filter_chain(FnChain) -> - fun(AnalysisResult) -> - Result = cleanup(AnalysisResult), - lists:foldl(fun(F, false) -> F(Result); - (_F, true) -> true - end, false, FnChain) - end. - -cleanup({{_, _},{{{{_,_,_}=MFA1,_},{{_,_,_}=MFA2,_}},_}}) -> {MFA1, MFA2}; -cleanup({{_, _},{{{_,_,_}=MFA1,_},{{_,_,_}=MFA2,_}}}) -> {MFA1, MFA2}; -cleanup({{_, _},{{_,_,_}=MFA1,{_,_,_}=MFA2},_}) -> {MFA1, MFA2}; -cleanup({{_, _},{{_,_,_}=MFA1,{_,_,_}=MFA2}}) -> {MFA1, MFA2}; -cleanup({{_, _}, {_,_,_}=MFA}) -> MFA; -cleanup({{_, _}, {{_,_,_}=MFA,_}}) -> MFA; -cleanup({{_,_,_}=MFA, {_,_,_}}) -> MFA; -cleanup({{_,_,_}=MFA, {_,_,_},_}) -> MFA; -cleanup(Other) -> Other. - -is_irrelevant({{M,_,_}, {_,_,_}}) -> - is_irrelevant(M); -is_irrelevant({M,_,_}) -> - is_irrelevant(M); -is_irrelevant(Mod) when is_atom(Mod) -> - lists:member(Mod, get({?MODULE, third_party})). - -is_unused({{_,_,_}=MFA, {_,_,_}}) -> - is_unused(MFA); -is_unused({M,_F,_A}) -> - lists:suffix("_tests", atom_to_list(M)); -is_unused(_) -> - false. - -is_unresolved_call({_, F, A}) -> - UC = get({?MODULE, unresolved_calls}), - sets:is_element({'$M_EXPR', F, A}, UC); -is_unresolved_call(_) -> - false. - -%% TODO: cache this.... -is_callback({M,_,_}=MFA) -> - Attributes = M:module_info(attributes), - Behaviours = proplists:append_values(behaviour, Attributes), - {_, Callbacks} = lists:foldl(fun acc_behaviours/2, {M, []}, Behaviours), - lists:member(MFA, Callbacks); -is_callback(_) -> - false. - -acc_behaviours(B, {M, CB}=Acc) -> - case catch(B:behaviour_info(callbacks)) of - [{_,_} | _] = Callbacks -> - {M, CB ++ [{M, F, A} || {F,A} <- Callbacks]}; - _ -> - Acc - end. - -%% -%% reporting/output -%% - -report(Results) -> - [report_failures(F) || F <- Results], - {Errors, Warnings} = partition(Results), - report(info, "Completed: ~p errors, ~p warnings~n", - [length(Errors), length(Warnings)]), - case length(Errors) > 0 of - true -> 1; - false -> 0 - end. - -report_failures({analysis_error, {Mod, Reason}}) -> - report(error, "~s:0 Analysis Error: ~p~n", [source_file(Mod), Reason]); -report_failures({{Tag, Level}, {{{{M,_,_},L},{{M2,F2,A2},_}},_}}) -> - report(Level, "~s:~w ~s ~p:~p/~p~n", - [source_file(M), L, Tag, M2, F2, A2]); -report_failures({{Tag, Level}, {{M,F,A},L}}) -> - report(Level, "~s:~w ~s ~p:~p/~p~n", [source_file(M), L, Tag, M, F, A]); -report_failures({{Tag, Level}, {M,F,A}}) -> - report(Level, "~s:unknown ~s ~p:~p/~p~n", [source_file(M), Tag, M, F, A]); -report_failures(Term) -> - report(error, "Ignoring ~p~n", [Term]), - ok. - -report_progress(Fmt, Args) -> - report(info, Fmt, Args). - -report(Level, Fmt, Args) -> - case {get({?MODULE, quiet}), Level} of - {true, error} -> do_report(lookup_prefix(Level), Fmt, Args); - {false, _} -> do_report(lookup_prefix(Level), Fmt, Args); - _ -> ok - end. - -do_report(Prefix, Fmt, Args) -> - io:format(Prefix ++ Fmt, Args). - -lookup_prefix(error) -> "ERROR: "; -lookup_prefix(warning) -> "WARNING: "; -lookup_prefix(info) -> "INFO: ". - -source_file(M) -> - proplists:get_value(source, M:module_info(compile)). - -%% -%% setup/code-path/file-system ops -%% - -store_third_party(App) -> - {ok, AppConfig} = application:get_all_key(App), - AppModules = proplists:get_value(modules, AppConfig), - put({?MODULE, third_party}, AppModules ++ get({?MODULE, third_party})). - -%% TODO: this ought not to be maintained in such a fashion -external_dependency(Path) -> - lists:any(fun(P) -> lists:prefix(P, Path) end, - ["mochiweb", "webmachine", "rfc4627", "eldap"]). - -unmangle_name(Path) -> - [Name, Vsn | _] = re:split(Path, "-", [{return, list}]), - string:join([Name, Vsn], "-"). - -store_unresolved_calls() -> - {ok, UCFull} = analyse("UC"), - UC = [MFA || {_, {_,_,_} = MFA} <- UCFull], - put({?MODULE, unresolved_calls}, sets:from_list(UC)). diff --git a/deps/rabbit/docs/rabbitmq-diagnostics.8 b/deps/rabbit/docs/rabbitmq-diagnostics.8 index 8493173..226125b 100644 --- a/deps/rabbit/docs/rabbitmq-diagnostics.8 +++ b/deps/rabbit/docs/rabbitmq-diagnostics.8 @@ -705,7 +705,19 @@ in See .Cm quorum_status in -.Xr rabbitmqctl 8 +.Xr rabbitmq-queues 8 +.It Cm check_if_node_is_mirror_sync_critical +.Pp +See +.Cm check_if_node_is_mirror_sync_critical +in +.Xr rabbitmq-queues 8 +.It Cm check_if_node_is_quorum_critical +.Pp +See +.Cm check_if_node_is_quorum_critical +in +.Xr rabbitmq-queues 8 .\" ------------------------------------------------------------------ .Sh SEE ALSO .\" ------------------------------------------------------------------ diff --git a/deps/rabbit/docs/rabbitmq-queues.8 b/deps/rabbit/docs/rabbitmq-queues.8 index 9ca5164..d72cb23 100644 --- a/deps/rabbit/docs/rabbitmq-queues.8 +++ b/deps/rabbit/docs/rabbitmq-queues.8 @@ -181,6 +181,20 @@ Displays quorum status of a quorum queue. Example: .Sp .Dl rabbitmq-queues quorum_status --vhost Qo a-vhost Qc Qo a-queue Qc +.It Cm check_if_node_is_mirror_sync_critical +.Pp +Health check that exits with a non-zero code if there are classic mirrored queues without online synchronised mirrors (queues that would potentially lose data if the target node is shut down). +.Pp +Example: +.Sp +.Dl rabbitmq-queues check_if_node_is_mirror_sync_critical +.It Cm check_if_node_is_quorum_critical +.Pp +Health check that exits with a non-zero code if there are queues with minimum online quorum (queues that would lose their quorum if the target node is shut down). +.Pp +Example: +.Sp +.Dl rabbitmq-queues check_if_node_is_quorum_critical .\" ------------------------------------------------------------------ .Sh SEE ALSO .\" ------------------------------------------------------------------ diff --git a/deps/rabbit/docs/rabbitmq.conf.example b/deps/rabbit/docs/rabbitmq.conf.example index ff8ea0a..a4ffbfa 100644 --- a/deps/rabbit/docs/rabbitmq.conf.example +++ b/deps/rabbit/docs/rabbitmq.conf.example @@ -456,7 +456,7 @@ ## # raft.segment_max_entries = 65536 # raft.wal_max_size_bytes = 1048576 -# raft.wal_max_batch_size = 32768 +# raft.wal_max_batch_size = 4096 # raft.snapshot_chunk_size = 1000000 ## diff --git a/deps/rabbit/erlang.mk b/deps/rabbit/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbit/erlang.mk +++ b/deps/rabbit/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 1220b0d..7fed137 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -952,6 +952,30 @@ fun(Conf) -> end end}. +%% Cluster formation: discovery failure retries + +{mapping, "cluster_formation.lock_retry_limit", "rabbit.cluster_formation.lock_retry_limit", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. +{mapping, "cluster_formation.lock_retry_timeout", "rabbit.cluster_formation.lock_retry_timeout", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. + +{mapping, "cluster_formation.discovery_retry_limit", "rabbit.cluster_formation.discovery_retry_limit", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. +{mapping, "cluster_formation.discovery_retry_interval", "rabbit.cluster_formation.discovery_retry_interval", + [ + {datatype, integer}, + {validators, ["non_zero_positive_integer"]} + ]}. + %% Classic config-driven peer discovery backend. %% %% Make clustering happen *automatically* at startup - only applied diff --git a/deps/rabbit/quickcheck b/deps/rabbit/quickcheck deleted file mode 100755 index 59da371..0000000 --- a/deps/rabbit/quickcheck +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env escript -%% -*- erlang -*- -%%! -sname quickcheck --mode(compile). - -%% A helper to test quickcheck properties on a running broker -%% NodeStr is a local broker node name -%% ModStr is the module containing quickcheck properties -%% TrialsStr is the number of trials -main([NodeStr, ModStr, NumTestsStr, MaxSizeStr]) -> - {ok, Hostname} = inet:gethostname(), - Node = list_to_atom(NodeStr ++ "@" ++ Hostname), - Mod = list_to_atom(ModStr), - NumTests = erlang:list_to_integer(NumTestsStr), - MaxSize = erlang:list_to_integer(MaxSizeStr), - case rpc:call(Node, code, ensure_loaded, [proper]) of - {module, proper} -> - case rpc:call(Node, proper, module, - [Mod] ++ [[{numtests, NumTests}, - {max_size, MaxSize}, - {constraint_tries, 200}]]) of - [] -> ok; - R -> io:format("~p.~n", [R]), - quit(1) - end; - {badrpc, Reason} -> - io:format("Could not contact node ~p: ~p.~n", [Node, Reason]), - quit(2); - {error,nofile} -> - io:format("Module PropEr was not found on node ~p~n", [Node]), - quit(2) - end; -main([]) -> - io:format("This script requires a node name and a module.~n"). - -quit(Status) -> - case os:type() of - {unix, _} -> halt(Status); - {win32, _} -> init:stop(Status) - end. - diff --git a/deps/rabbit/rabbitmq-components.mk b/deps/rabbit/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbit/rabbitmq-components.mk +++ b/deps/rabbit/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbit/scripts/cuttlefish b/deps/rabbit/scripts/cuttlefish deleted file mode 100755 index e63ac1c1b34e9c7876eb2d66fe996bb9bb5aa6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508786 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

    HqvNy($qVC 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%0AF~egsKk3`w(%_W~)@ff||!m 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

    *Q@H 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 YwxZFII!#bV)^BRMwQLwAGEC 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

    1JCNuJPf590&>6GlKO7_rN&e0sjnrZ* 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 s9>UxP1IgO|p)mi^Yndqo>;FC?Mo*gn+a diff --git a/deps/rabbit/scripts/rabbitmq-defaults b/deps/rabbit/scripts/rabbitmq-defaults index ba09c7c..eca44d8 100755 --- a/deps/rabbit/scripts/rabbitmq-defaults +++ b/deps/rabbit/scripts/rabbitmq-defaults @@ -18,41 +18,10 @@ ### next line potentially updated in package install steps SYS_PREFIX= -### next line will be updated when generating a standalone release -ERL_DIR= - CLEAN_BOOT_FILE=start_clean SASL_BOOT_FILE=start_sasl - -if [ -f "${RABBITMQ_HOME}/erlang.mk" ]; then - # RabbitMQ is executed from its source directory. The plugins - # directory and ERL_LIBS are tuned based on this. - RABBITMQ_DEV_ENV=1 -fi - -## Set default values - BOOT_MODULE="rabbit" -CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq -LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq -MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia -ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins -GENERATED_CONFIG_DIR=${SYS_PREFIX}/var/lib/rabbitmq/config -ADVANCED_CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/advanced.config -SCHEMA_DIR=${SYS_PREFIX}/var/lib/rabbitmq/schema - -PLUGINS_DIR="${RABBITMQ_HOME}/plugins" - -# RABBIT_HOME can contain a version number, so default plugins -# directory can be hard to find if we want to package some plugin -# separately. When RABBITMQ_HOME points to a standard location where -# it's usually being installed by package managers, we add -# "/usr/lib/rabbitmq/plugins" to plugin search path. -case "$RABBITMQ_HOME" in - /usr/lib/rabbitmq/*) - PLUGINS_DIR="/usr/lib/rabbitmq/plugins:$PLUGINS_DIR" - ;; -esac - -CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf +if test -z "$CONF_ENV_FILE" && test -z "$RABBITMQ_CONF_ENV_FILE"; then + CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf +fi diff --git a/deps/rabbit/scripts/rabbitmq-defaults.bat b/deps/rabbit/scripts/rabbitmq-defaults.bat index 18d4f46..0da11f2 100644 --- a/deps/rabbit/scripts/rabbitmq-defaults.bat +++ b/deps/rabbit/scripts/rabbitmq-defaults.bat @@ -1,23 +1,8 @@ @echo off -REM ### next line potentially updated in package install steps -REM set SYS_PREFIX= - -REM ### next line will be updated when generating a standalone release -REM ERL_DIR= -set ERL_DIR= - -REM This boot files isn't referenced in the batch scripts -REM set SASL_BOOT_FILE=start_sasl +set SASL_BOOT_FILE=start_sasl set CLEAN_BOOT_FILE=start_clean - -if exist "%RABBITMQ_HOME%\erlang.mk" ( - REM RabbitMQ is executed from its source directory. The plugins - REM directory and ERL_LIBS are tuned based on this. - set RABBITMQ_DEV_ENV=1 -) - -REM ## Set default values +set BOOT_MODULE=rabbit if "!RABBITMQ_BASE!"=="" ( set RABBITMQ_BASE=!APPDATA!\RabbitMQ @@ -29,22 +14,4 @@ if not exist "!RABBITMQ_BASE!" ( mkdir "!RABBITMQ_BASE!" ) -REM BOOT_MODULE="rabbit" -REM CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq -REM LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq -REM MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia -REM ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins -set BOOT_MODULE=rabbit -set CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq -set LOG_BASE=!RABBITMQ_BASE!\log -set MNESIA_BASE=!RABBITMQ_BASE!\db -set ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins -set GENERATED_CONFIG_DIR=!RABBITMQ_BASE!\config -set ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config -set SCHEMA_DIR=!RABBITMQ_BASE!\schema - -REM PLUGINS_DIR="${RABBITMQ_HOME}/plugins" -for /f "delims=" %%F in ("!TDP0!..\plugins") do set PLUGINS_DIR=%%~dpF%%~nF%%~xF - -REM CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf set CONF_ENV_FILE=!RABBITMQ_BASE!\rabbitmq-env-conf.bat diff --git a/deps/rabbit/scripts/rabbitmq-diagnostics.bat b/deps/rabbit/scripts/rabbitmq-diagnostics.bat index 07a0af5..9f62245 100644 --- a/deps/rabbit/scripts/rabbitmq-diagnostics.bat +++ b/deps/rabbit/scripts/rabbitmq-diagnostics.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-diagnostics" !STAR! @@ -61,4 +57,6 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal diff --git a/deps/rabbit/scripts/rabbitmq-env b/deps/rabbit/scripts/rabbitmq-env index d043747..bc451e0 100755 --- a/deps/rabbit/scripts/rabbitmq-env +++ b/deps/rabbit/scripts/rabbitmq-env @@ -91,20 +91,6 @@ rmq_realpath() { fi } -path_contains_existing_directory() { - local path="${1:?}" - local dir - local rc - local IFS=" - " - for dir in $(echo "$path" | tr ':' '\n'); do - if [ -d "$dir" ]; then - return 0 - fi - done - return 1 -} - RABBITMQ_HOME="$(rmq_realpath "${RABBITMQ_SCRIPTS_DIR}/..")" ESCRIPT_DIR="${RABBITMQ_HOME}/escript" @@ -118,7 +104,10 @@ saved_RABBITMQ_PID_FILE="$RABBITMQ_PID_FILE" ## Get configuration variables from the configure environment file [ "x" = "x$RABBITMQ_CONF_ENV_FILE" ] && RABBITMQ_CONF_ENV_FILE=${CONF_ENV_FILE} -[ -f ${RABBITMQ_CONF_ENV_FILE} ] && . ${RABBITMQ_CONF_ENV_FILE} || true +if [ -f "${RABBITMQ_CONF_ENV_FILE}" ]; then + CONF_ENV_FILE_PHASE=rabbitmq-env + . ${RABBITMQ_CONF_ENV_FILE} || true +fi [ -n "$ERL_EPMD_PORT" ] && export ERL_EPMD_PORT [ -n "$ERL_EPMD_ADDRESS" ] && export ERL_EPMD_ADDRESS @@ -142,125 +131,17 @@ DEFAULT_MAX_NUMBER_OF_ATOMS=5000000 ## Common server defaults SERVER_ERL_ARGS=" +P $RABBITMQ_MAX_NUMBER_OF_PROCESSES +t $RABBITMQ_MAX_NUMBER_OF_ATOMS +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE " -[ "x" = "x$RABBITMQ_USE_LONGNAME" ] && RABBITMQ_USE_LONGNAME=${USE_LONGNAME} -if [ "xtrue" = "x$RABBITMQ_USE_LONGNAME" ] ; then - RABBITMQ_NAME_TYPE=-name - [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname -f` - [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME} -else - RABBITMQ_NAME_TYPE=-sname - [ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname` - [ "x" = "x$NODENAME" ] && NODENAME=rabbit@${HOSTNAME%%.*} -fi - ##--- Set environment vars RABBITMQ_ to defaults if not set -rmq_normalize_path() { - local path=$1 - - # Remove redundant slashes and strip a trailing slash for a - # PATH-like vars - ':' is the delimiter - echo "$path" | sed -e 's#/\{2,\}#/#g' -e 's#/$##' -e 's#/:#:#g' -} - -rmq_normalize_path_var() { - local var warning - - local prefix="WARNING:" - - for var in "$@"; do - local path=$(eval "echo \"\$$var\"") - case "$path" in - */) - warning=1 - echo "$prefix Removing trailing slash from $var" 1>&2 - ;; - esac - - eval "$var=$(rmq_normalize_path "$path")" - - if [ "x$warning" = "x1" ]; then - prefix=" " - fi - done -} - -rmq_check_if_shared_with_mnesia() { - local var warning - - local mnesia_dir=$(rmq_realpath "${RABBITMQ_MNESIA_DIR}") - local prefix="WARNING:" - - for var in "$@"; do - local dir=$(eval "echo \"\$$var\"") - - case $(rmq_realpath "$dir") in - ${mnesia_dir}) - warning=1 - echo "$prefix $var is equal to RABBITMQ_MNESIA_DIR" 1>&2 - ;; - ${mnesia_dir}/*) - warning=1 - echo "$prefix $var is located inside RABBITMQ_MNESIA_DIR" 1>&2 - ;; - esac - - if [ "x$warning" = "x1" ]; then - prefix=" " - fi - done - - if [ "x$warning" = "x1" ]; then - echo "$prefix => Auto-clustering will not work ('cluster_nodes' in rabbitmq.config)" 1>&2 - fi -} - -DEFAULT_NODE_IP_ADDRESS=auto -DEFAULT_NODE_PORT=5672 - -[ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS} -[ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} - -[ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS} -[ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT} - -[ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT} -[ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000)) -[ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000)) - -[ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MIN" ] && RABBITMQ_CTL_DIST_PORT_MIN=${CTL_DIST_PORT_MIN} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MAX" ] && RABBITMQ_CTL_DIST_PORT_MAX=${CTL_DIST_PORT_MAX} -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MIN" ] && RABBITMQ_CTL_DIST_PORT_MIN=$((${RABBITMQ_DIST_PORT} + 10000)) -[ "x" = "x$RABBITMQ_CTL_DIST_PORT_MAX" ] && RABBITMQ_CTL_DIST_PORT_MAX=$((${RABBITMQ_DIST_PORT} + 10010)) - -[ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} +# FIXME [ "x" = "x$RABBITMQ_IO_THREAD_POOL_SIZE" ] && RABBITMQ_IO_THREAD_POOL_SIZE=${IO_THREAD_POOL_SIZE} [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} -[ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE} -[ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE} -[ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE} [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS} [ "x" = "x$RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS" ] && RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=${SERVER_ADDITIONAL_ERL_ARGS} [ "x" = "x$RABBITMQ_SERVER_CODE_PATH" ] && RABBITMQ_SERVER_CODE_PATH=${SERVER_CODE_PATH} -[ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR} -[ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} -[ "x" = "x$RABBITMQ_QUORUM_DIR" ] && RABBITMQ_QUORUM_DIR=${RABBITMQ_MNESIA_DIR}/quorum -[ "x" = "x$RABBITMQ_GENERATED_CONFIG_DIR" ] && RABBITMQ_GENERATED_CONFIG_DIR=${GENERATED_CONFIG_DIR} -[ "x" = "x$RABBITMQ_ADVANCED_CONFIG_FILE" ] && RABBITMQ_ADVANCED_CONFIG_FILE=${ADVANCED_CONFIG_FILE} -[ "x" = "x$RABBITMQ_SCHEMA_DIR" ] && RABBITMQ_SCHEMA_DIR=${SCHEMA_DIR} [ "x" = "x$RABBITMQ_IGNORE_SIGINT" ] && RABBITMQ_IGNORE_SIGINT="true" [ "xtrue" = "x$RABBITMQ_IGNORE_SIGINT" ] && RABBITMQ_IGNORE_SIGINT_FLAG="+B i" -rmq_normalize_path_var \ - RABBITMQ_CONFIG_FILE \ - RABBITMQ_LOG_BASE \ - RABBITMQ_MNESIA_BASE \ - RABBITMQ_MNESIA_DIR \ - RABBITMQ_QUORUM_DIR - -[ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE="$PID_FILE" - if [ -n "$saved_RABBITMQ_PID_FILE" ] && \ [ "$saved_RABBITMQ_PID_FILE" != "$RABBITMQ_PID_FILE" ] then @@ -271,155 +152,19 @@ then RABBITMQ_PID_FILE="$saved_RABBITMQ_PID_FILE" fi -# Note: at this point, no RABBITMQ_PID_FILE is set so we use the mnesia dir value -[ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE="${RABBITMQ_MNESIA_DIR}.pid" - -rmq_normalize_path_var RABBITMQ_PID_FILE - [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE} -[ "x" != "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE_source=environment -[ "x" = "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags -rmq_normalize_path_var RABBITMQ_FEATURE_FLAGS_FILE - -[ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR} -[ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand -rmq_normalize_path_var RABBITMQ_PLUGINS_EXPAND_DIR - -[ "x" != "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE_source=environment -[ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} -rmq_normalize_path_var RABBITMQ_ENABLED_PLUGINS_FILE - -[ "x" != "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR_source=environment -[ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} -rmq_normalize_path_var RABBITMQ_PLUGINS_DIR - -## Log rotation -[ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS} -[ "x" != "x$RABBITMQ_LOGS" ] && export RABBITMQ_LOGS_source=environment -[ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log" -[ "x" = "x$RABBITMQ_UPGRADE_LOG" ] && RABBITMQ_UPGRADE_LOG="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log" -[ "x" = "x$ERL_CRASH_DUMP" ] && ERL_CRASH_DUMP="${RABBITMQ_LOG_BASE}/erl_crash.dump" - -rmq_normalize_path_var RABBITMQ_LOGS - -rmq_normalize_path_var RABBITMQ_UPGRADE_LOG - -# Check if files and directories non-related to Mnesia are configured -# to be in $RABBITMQ_MNESIA_DIR. If this is the case, issue a warning -# because it will prevent auto-clustering from working (the node will be -# considered non-virgin). - -rmq_check_if_shared_with_mnesia \ - RABBITMQ_CONFIG_FILE \ - RABBITMQ_LOG_BASE \ - RABBITMQ_PID_FILE \ - RABBITMQ_FEATURE_FLAGS_FILE \ - RABBITMQ_PLUGINS_EXPAND_DIR \ - RABBITMQ_ENABLED_PLUGINS_FILE \ - RABBITMQ_PLUGINS_DIR \ - RABBITMQ_LOGS \ - RABBITMQ_UPGRADE_LOG - ##--- End of overridden variables -## Development-specific environment. -if [ "${RABBITMQ_DEV_ENV}" ]; then - if [ "$RABBITMQ_FEATURE_FLAGS_FILE_source" != 'environment' -o \ - "$RABBITMQ_PLUGINS_DIR_source" != 'environment' -o \ - "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' ]; then - # We need to query the running node for the plugins directory - # and the "enabled plugins" file. - for arg in "$@"; do - case "$arg" in - -n) - next_is_node=1 - ;; - *) - if test "$next_is_node"; then - # If the executed script is being passed a remote node - # name, use it here to query the remote node. - node_arg="-n $arg" - break - fi - ;; - esac - done - eval $( (${RABBITMQ_SCRIPTS_DIR}/rabbitmqctl $node_arg eval \ - '{ok, F} = application:get_env(rabbit, feature_flags_file), - {ok, P} = application:get_env(rabbit, plugins_dir), - {ok, E} = application:get_env(rabbit, enabled_plugins_file), - B = os:getenv("RABBITMQ_MNESIA_BASE"), - M = os:getenv("RABBITMQ_MNESIA_DIR"), - io:format( - "feature_flags_file=\"~s\"~n" - "plugins_dir=\"~s\"~n" - "enabled_plugins_file=\"~s\"~n" - "mnesia_base=\"~s\"~n" - "mnesia_dir=\"~s\"~n", [F, P, E, B, M]).' \ - 2>/dev/null | grep -E '^(feature_flags_file|plugins_dir|enabled_plugins_file|mnesia_base|mnesia_dir)=') || :) - - if [ "${feature_flags_file}" -a \ - "$RABBITMQ_FEATURE_FLAGS_FILE_source" != 'environment' ]; then - RABBITMQ_FEATURE_FLAGS_FILE="${feature_flags_file}" - fi - if [ "${plugins_dir}" -a \ - "$RABBITMQ_PLUGINS_DIR_source" != 'environment' ]; then - RABBITMQ_PLUGINS_DIR="${plugins_dir}" - fi - if [ "${enabled_plugins_file}" -a \ - "$RABBITMQ_ENABLED_PLUGINS_FILE_source" != 'environment' ]; then - RABBITMQ_ENABLED_PLUGINS_FILE="${enabled_plugins_file}" - fi - if [ "${mnesia_base}" -a \ - "$RABBITMQ_MNESIA_BASE_source" != 'environment' ]; then - RABBITMQ_MNESIA_BASE="${mnesia_base}" - fi - if [ "${mnesia_dir}" -a \ - "$RABBITMQ_MNESIA_DIR_source" != 'environment' ]; then - RABBITMQ_MNESIA_DIR="${mnesia_dir}" - fi - if [ "${mnesia_dir}" -a \ - "$RABBITMQ_QUORUM_DIR_source" != 'environment' ]; then - RABBITMQ_QUORUM_DIR="${mnesia_dir}/quorum" - fi - fi - - if path_contains_existing_directory "${RABBITMQ_PLUGINS_DIR}" ; then - # RabbitMQ was started with "make run-broker" from its own - # source tree. Take rabbit_common from the plugins directory. - ERL_LIBS="${RABBITMQ_PLUGINS_DIR}:${ERL_LIBS}" +_rmq_env_set_erl_libs() +{ + if [ -n "$ERL_LIBS" ] + then + export ERL_LIBS="$RABBITMQ_HOME/plugins:$ERL_LIBS" else - # RabbitMQ runs from a testsuite or a plugin. The .ez files are - # not available under RabbitMQ source tree. We need to look at - # $DEPS_DIR and default locations. - - if [ "${DEPS_DIR}" -a -d "${DEPS_DIR}/rabbit_common/ebin" ]; then - # $DEPS_DIR is set, and it contains rabbitmq-common, use - # this. - DEPS_DIR_norm="${DEPS_DIR}" - elif [ -f "${RABBITMQ_SCRIPTS_DIR}/../../../erlang.mk" -a \ - -d "${RABBITMQ_SCRIPTS_DIR}/../../rabbit_common/ebin" ]; then - # Look at default locations: "deps" subdirectory inside a - # plugin or the Umbrella. - DEPS_DIR_norm="${RABBITMQ_SCRIPTS_DIR}/../.." - fi - DEPS_DIR_norm=$(rmq_realpath "${DEPS_DIR_norm}") - - ERL_LIBS="${DEPS_DIR_norm}:${ERL_LIBS}" + export ERL_LIBS="$RABBITMQ_HOME/plugins" fi -else - if path_contains_existing_directory "${RABBITMQ_PLUGINS_DIR}" ; then - # RabbitMQ was started from its install directory. Take - # rabbit_common from the plugins directory. - ERL_LIBS="${RABBITMQ_PLUGINS_DIR}:${ERL_LIBS}" - fi -fi - -ERL_LIBS=${ERL_LIBS%:} -if [ "$ERL_LIBS" ]; then - export ERL_LIBS -fi +} run_escript() { @@ -428,17 +173,15 @@ run_escript() escript="${1:?escript must be defined}" shift + _rmq_env_set_erl_libs + # Important: do not quote RABBITMQ_CTL_ERL_ARGS as they must be # word-split # shellcheck disable=SC2086 - exec "${ERL_DIR}erl" +B \ + exec erl +B \ -boot "$CLEAN_BOOT_FILE" \ -noinput -noshell -hidden -smp enable \ $RABBITMQ_CTL_ERL_ARGS \ - -kernel inet_dist_listen_min "$RABBITMQ_CTL_DIST_PORT_MIN" \ - -kernel inet_dist_listen_max "$RABBITMQ_CTL_DIST_PORT_MAX" \ - -sasl errlog_type error \ - -mnesia dir "\"$RABBITMQ_MNESIA_DIR\"" \ -run escript start \ -escript main "$escript_main" \ -extra "$escript" "$@" diff --git a/deps/rabbit/scripts/rabbitmq-env.bat b/deps/rabbit/scripts/rabbitmq-env.bat index 0c97aaa..a871707 100644 --- a/deps/rabbit/scripts/rabbitmq-env.bat +++ b/deps/rabbit/scripts/rabbitmq-env.bat @@ -14,10 +14,16 @@ set SCRIPT_DIR=%TDP0% set SCRIPT_NAME=%1 for /f "delims=" %%F in ("%SCRIPT_DIR%..") do set RABBITMQ_HOME=%%~dpF%%~nF%%~xF +if defined ERL_LIBS ( + set ERL_LIBS=%RABBITMQ_HOME%\plugins;%ERL_LIBS% +) else ( + set ERL_LIBS=%RABBITMQ_HOME%\plugins +) + REM If ERLANG_HOME is not defined, check if "erl.exe" is available in REM the path and use that. if not defined ERLANG_HOME ( - for /f "delims=" %%F in ('where.exe erl.exe') do @set ERL_PATH=%%F + for /f "delims=" %%F in ('powershell.exe -NoLogo -NoProfile -NonInteractive -Command "(Get-Command erl.exe).Definition"') do @set ERL_PATH=%%F if exist "!ERL_PATH!" ( for /f "delims=" %%F in ("!ERL_PATH!") do set ERL_DIRNAME=%%~dpF for /f "delims=" %%F in ("!ERL_DIRNAME!\..") do @set ERLANG_HOME=%%~dpF%%~nF%%~xF @@ -82,163 +88,16 @@ if "!RABBITMQ_MAX_NUMBER_OF_ATOMS!"=="" ( set RABBITMQ_MAX_NUMBER_OF_ATOMS=!DEFAULT_MAX_NUMBER_OF_ATOMS! ) -REM Common defaults +REM Common server defaults set SERVER_ERL_ARGS=+P !RABBITMQ_MAX_NUMBER_OF_PROCESSES! +t !RABBITMQ_MAX_NUMBER_OF_ATOMS! +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE! -REM Check for the short names here too -if "!RABBITMQ_USE_LONGNAME!"=="true" ( - set RABBITMQ_NAME_TYPE=-name - set NAMETYPE=longnames -) else ( - if "!USE_LONGNAME!"=="true" ( - set RABBITMQ_USE_LONGNAME=true - set RABBITMQ_NAME_TYPE=-name - set NAMETYPE=longnames - ) else ( - set RABBITMQ_USE_LONGNAME=false - set RABBITMQ_NAME_TYPE=-sname - set NAMETYPE=shortnames - ) -) - -REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} -if "!RABBITMQ_NODENAME!"=="" ( - if "!NODENAME!"=="" ( - REM We use Erlang to query the local hostname because - REM !COMPUTERNAME! and Erlang may return different results. - REM Start erl with -sname to make sure epmd is started. - call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -sname rabbit-prelaunch-epmd -eval "init:stop()." >nul 2>&1 - for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F - set RABBITMQ_NODENAME=rabbit@!HOSTNAME! - set HOSTNAME= - ) else ( - set RABBITMQ_NODENAME=!NODENAME! - ) -) -set NAMETYPE= - -REM REM ##--- Set environment vars RABBITMQ_ to defaults if not set -REM -REM DEFAULT_NODE_IP_ADDRESS=auto -REM DEFAULT_NODE_PORT=5672 -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_NODE_IP_ADDRESS=${NODE_IP_ADDRESS} -REM [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${NODE_PORT} -REM [ "x" = "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_IP_ADDRESS=${DEFAULT_NODE_IP_ADDRESS} -REM [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_NODE_PORT=${DEFAULT_NODE_PORT} - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!NODE_IP_ADDRESS!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=!NODE_IP_ADDRESS! - ) -) - -if "!RABBITMQ_NODE_PORT!"=="" ( - if not "!NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=!NODE_PORT! - ) -) - -if "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_IP_ADDRESS=auto - ) -) else ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_NODE_PORT=5672 - ) -) - -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && RABBITMQ_DIST_PORT=${DIST_PORT} -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" = "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${DEFAULT_NODE_PORT} + 20000)) -REM [ "x" = "x$RABBITMQ_DIST_PORT" ] && [ "x" != "x$RABBITMQ_NODE_PORT" ] && RABBITMQ_DIST_PORT=$((${RABBITMQ_NODE_PORT} + 20000)) - -if "!RABBITMQ_DIST_PORT!"=="" ( - if "!DIST_PORT!"=="" ( - if "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_DIST_PORT=25672 - ) else ( - set /a RABBITMQ_DIST_PORT=20000+!RABBITMQ_NODE_PORT! - ) - ) else ( - set RABBITMQ_DIST_PORT=!DIST_PORT! - ) -) REM [ "x" = "x$RABBITMQ_SERVER_ERL_ARGS" ] && RABBITMQ_SERVER_ERL_ARGS=${SERVER_ERL_ARGS} if "!RABBITMQ_SERVER_ERL_ARGS!"=="" ( set RABBITMQ_SERVER_ERL_ARGS=!SERVER_ERL_ARGS! ) -REM [ "x" = "x$RABBITMQ_CONFIG_FILE" ] && RABBITMQ_CONFIG_FILE=${CONFIG_FILE} -if "!RABBITMQ_CONFIG_FILE!"=="" ( - if "!CONFIG_FILE!"=="" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_BASE!\rabbitmq - ) else ( - set RABBITMQ_CONFIG_FILE=!CONFIG_FILE:"=! - ) -) else ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE:"=! -) - -if "!RABBITMQ_GENERATED_CONFIG_DIR!"=="" ( - if "!GENERATED_CONFIG_DIR!"=="" ( - set RABBITMQ_GENERATED_CONFIG_DIR=!RABBITMQ_BASE!\config - ) else ( - set RABBITMQ_GENERATED_CONFIG_DIR=!GENERATED_CONFIG_DIR:"=! - ) -) else ( - set RABBITMQ_GENERATED_CONFIG_DIR=!RABBITMQ_GENERATED_CONFIG_DIR:"=! -) - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!"=="" ( - if "!ADVANCED_CONFIG_FILE!"=="" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_BASE!\advanced.config - ) else ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!ADVANCED_CONFIG_FILE:"=! - ) -) else ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE:"=! -) - -if "!RABBITMQ_SCHEMA_DIR!" == "" ( - if "!SCHEMA_DIR!"=="" ( - set RABBITMQ_SCHEMA_DIR=!RABBITMQ_HOME!\priv\schema - ) else ( - set RABBITMQ_SCHEMA_DIR=!SCHEMA_DIR:"=! - ) -) else ( - set RABBITMQ_SCHEMA_DIR=!RABBITMQ_SCHEMA_DIR:"=! -) - -REM [ "x" = "x$RABBITMQ_LOG_BASE" ] && RABBITMQ_LOG_BASE=${LOG_BASE} -if "!RABBITMQ_LOG_BASE!"=="" ( - if "!LOG_BASE!"=="" ( - set RABBITMQ_LOG_BASE=!RABBITMQ_BASE!\log - ) else ( - set RABBITMQ_LOG_BASE=!LOG_BASE:"=! - ) -) else ( - set RABBITMQ_LOG_BASE=!RABBITMQ_LOG_BASE:"=! -) -if not exist "!RABBITMQ_LOG_BASE!" ( - mkdir "!RABBITMQ_LOG_BASE!" -) - -REM [ "x" = "x$RABBITMQ_MNESIA_BASE" ] && RABBITMQ_MNESIA_BASE=${MNESIA_BASE} -if "!RABBITMQ_MNESIA_BASE!"=="" ( - if "!MNESIA_BASE!"=="" ( - set RABBITMQ_MNESIA_BASE=!RABBITMQ_BASE!\db - ) else ( - set RABBITMQ_MNESIA_BASE=!MNESIA_BASE:"=! - ) -) else ( - set RABBITMQ_MNESIA_BASE=!RABBITMQ_MNESIA_BASE:"=! -) -if not exist "!RABBITMQ_MNESIA_BASE!" ( - mkdir "!RABBITMQ_MNESIA_BASE!" -) - REM [ "x" = "x$RABBITMQ_SERVER_START_ARGS" ] && RABBITMQ_SERVER_START_ARGS=${SERVER_START_ARGS} if "!RABBITMQ_SERVER_START_ARGS!"=="" ( if not "!SERVER_START_ARGS!"=="" ( @@ -253,34 +112,6 @@ if "!RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS!"=="" ( ) ) -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${MNESIA_DIR} -REM [ "x" = "x$RABBITMQ_MNESIA_DIR" ] && RABBITMQ_MNESIA_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} -if "!RABBITMQ_MNESIA_DIR!"=="" ( - if "!MNESIA_DIR!"=="" ( - set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-mnesia - ) else ( - set RABBITMQ_MNESIA_DIR=!MNESIA_DIR:"=! - ) -) else ( - set RABBITMQ_MNESIA_DIR=!RABBITMQ_MNESIA_DIR:"=! -) -if not exist "!RABBITMQ_MNESIA_DIR!" ( - mkdir "!RABBITMQ_MNESIA_DIR!" -) - -REM [ "x" = "x$RABBITMQ_QUORUM_DIR" ] && RABBITMQ_QUORUM_DIR=${RABBITMQ_MNESIA_DIR}/quorum -if "!RABBITMQ_QUORUM_DIR!"=="" ( - set RABBITMQ_QUORUM_DIR=!RABBITMQ_MNESIA_DIR!\quorum -) -if not exist "!RABBITMQ_QUORUM_DIR!" ( - mkdir "!RABBITMQ_QUORUM_DIR!" -) -for /f "delims=" %%F in ("!RABBITMQ_QUORUM_DIR!") do set RABBITMQ_QUORUM_DIR=%%~sF - -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${PID_FILE} -REM [ "x" = "x$RABBITMQ_PID_FILE" ] && RABBITMQ_PID_FILE=${RABBITMQ_MNESIA_DIR}.pid -REM No Windows equivalent - REM [ "x" = "x$RABBITMQ_BOOT_MODULE" ] && RABBITMQ_BOOT_MODULE=${BOOT_MODULE} if "!RABBITMQ_BOOT_MODULE!"=="" ( if "!BOOT_MODULE!"=="" ( @@ -290,114 +121,12 @@ if "!RABBITMQ_BOOT_MODULE!"=="" ( ) ) -REM [ "x" = "x$RABBITMQ_FEATURE_FLAGS_FILE" ] && RABBITMQ_FEATURE_FLAGS_FILE=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags -if "!RABBITMQ_FEATURE_FLAGS_FILE!"=="" ( - if "!FEATURE_FLAGS_FILE!"=="" ( - set RABBITMQ_FEATURE_FLAGS_FILE=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-feature_flags - ) else ( - set RABBITMQ_FEATURE_FLAGS_FILE=!FEATURE_FLAGS_FILE:"=! - ) -) else ( - set RABBITMQ_FEATURE_FLAGS_FILE=!RABBITMQ_FEATURE_FLAGS_FILE:"=! - set RABBITMQ_FEATURE_FLAGS_FILE_source=environment -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${PLUGINS_EXPAND_DIR} -REM [ "x" = "x$RABBITMQ_PLUGINS_EXPAND_DIR" ] && RABBITMQ_PLUGINS_EXPAND_DIR=${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand -if "!RABBITMQ_PLUGINS_EXPAND_DIR!"=="" ( - if "!PLUGINS_EXPAND_DIR!"=="" ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_MNESIA_BASE!\!RABBITMQ_NODENAME!-plugins-expand - ) else ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!PLUGINS_EXPAND_DIR:"=! - ) -) else ( - set RABBITMQ_PLUGINS_EXPAND_DIR=!RABBITMQ_PLUGINS_EXPAND_DIR:"=! -) - -REM [ "x" = "x$RABBITMQ_ENABLED_PLUGINS_FILE" ] && RABBITMQ_ENABLED_PLUGINS_FILE=${ENABLED_PLUGINS_FILE} -if "!RABBITMQ_ENABLED_PLUGINS_FILE!"=="" ( - if "!ENABLED_PLUGINS_FILE!"=="" ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_BASE!\enabled_plugins - ) else ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!ENABLED_PLUGINS_FILE:"=! - ) -) else ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!RABBITMQ_ENABLED_PLUGINS_FILE:"=! - set RABBITMQ_ENABLED_PLUGINS_FILE_source=environment -) -if not exist "!RABBITMQ_ENABLED_PLUGINS_FILE!" ( - for /f "delims=" %%F in ("!RABBITMQ_ENABLED_PLUGINS_FILE!") do mkdir "%%~dpF" 2>NUL - copy /y NUL "!RABBITMQ_ENABLED_PLUGINS_FILE!" >NUL -) - -REM [ "x" = "x$RABBITMQ_PLUGINS_DIR" ] && RABBITMQ_PLUGINS_DIR=${PLUGINS_DIR} -if "!RABBITMQ_PLUGINS_DIR!"=="" ( - if "!PLUGINS_DIR!"=="" ( - set RABBITMQ_PLUGINS_DIR=!RABBITMQ_HOME!\plugins - ) else ( - set RABBITMQ_PLUGINS_DIR=!PLUGINS_DIR:"=! - ) -) else ( - set RABBITMQ_PLUGINS_DIR=!RABBITMQ_PLUGINS_DIR:"=! - set RABBITMQ_PLUGINS_DIR_source=environment -) -if not exist "!RABBITMQ_PLUGINS_DIR!" ( - mkdir "!RABBITMQ_PLUGINS_DIR!" -) - -REM ## Log rotation -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS=${LOGS} -REM [ "x" = "x$RABBITMQ_LOGS" ] && RABBITMQ_LOGS="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log" -if "!RABBITMQ_LOGS!"=="" ( - if "!LOGS!"=="" ( - set RABBITMQ_LOGS=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!.log - ) else ( - set RABBITMQ_LOGS=!LOGS:"=! - ) -) else ( - set RABBITMQ_LOGS=!RABBITMQ_LOGS:"=! -) -if not "!RABBITMQ_LOGS!" == "-" ( - if not exist "!RABBITMQ_LOGS!" ( - for /f "delims=" %%F in ("!RABBITMQ_LOGS!") do mkdir "%%~dpF" 2>NUL - copy /y NUL "!RABBITMQ_LOGS!" >NUL - ) -) -rem [ "x" = "x$RABBITMQ_UPGRADE_LOG" ] && RABBITMQ_UPGRADE_LOG="${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log" -if "!RABBITMQ_UPGRADE_LOG!" == "" ( - set RABBITMQ_UPGRADE_LOG=!RABBITMQ_LOG_BASE!\!RABBITMQ_NODENAME!_upgrade.log -) else ( - set RABBITMQ_UPGRADE_LOG=!RABBITMQ_UPGRADE_LOG:"=! -) -REM [ "x" = "x$ERL_CRASH_DUMP"] && ERL_CRASH_DUMP="${RABBITMQ_LOG_BASE}/erl_crash.dump" -if "!ERL_CRASH_DUMP!"=="" ( - set ERL_CRASH_DUMP=!RABBITMQ_LOG_BASE!\erl_crash.dump -) else ( - set ERL_CRASH_DUMP=!ERL_CRASH_DUMP:"=! -) - REM [ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} if "!RABBITMQ_CTL_ERL_ARGS!"=="" ( if not "!CTL_ERL_ARGS!"=="" ( set RABBITMQ_CTL_ERL_ARGS=!CTL_ERL_ARGS! ) ) -if "!RABBITMQ_CTL_DIST_PORT_MIN!"=="" ( - if not "!CTL_DIST_PORT_MIN!"=="" ( - set RABBITMQ_CTL_DIST_PORT_MIN=!CTL_DIST_PORT_MIN! - ) -) -if "!RABBITMQ_CTL_DIST_PORT_MAX!"=="" ( - if not "!CTL_DIST_PORT_MAX!"=="" ( - set RABBITMQ_CTL_DIST_PORT_MAX=!CTL_DIST_PORT_MAX! - ) -) -if "!RABBITMQ_CTL_DIST_PORT_MIN!"=="" ( - set /a RABBITMQ_CTL_DIST_PORT_MIN=10000+!RABBITMQ_DIST_PORT! -) -if "!RABBITMQ_CTL_DIST_PORT_MAX!"=="" ( - set /a RABBITMQ_CTL_DIST_PORT_MAX=10010+!RABBITMQ_DIST_PORT! -) REM ADDITIONAL WINDOWS ONLY CONFIG ITEMS @@ -409,93 +138,6 @@ if "!RABBITMQ_SERVICENAME!"=="" ( ) ) -REM Development-specific environment. -if defined RABBITMQ_DEV_ENV ( - if "!SCRIPT_NAME!" == "rabbitmq-plugins" ( - REM We may need to query the running node for the plugins directory - REM and the "enabled plugins" file. - if not "%RABBITMQ_FEATURE_FLAGS_FILE_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, feature_flags_file), io:format(""~s~n"", [P])."') do @set feature_flags_file=%%F - if exist "!feature_flags_file!" ( - set RABBITMQ_FEATURE_FLAGS_FILE=!feature_flags_file:"=! - ) - REM set feature_flags_file= - ) - if not "%RABBITMQ_PLUGINS_DIR_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, plugins_dir), io:format(""~s~n"", [P])."') do @set plugins_dir=%%F - if exist "!plugins_dir!" ( - set RABBITMQ_PLUGINS_DIR=!plugins_dir:"=! - ) - REM set plugins_dir= - ) - if not "%RABBITMQ_ENABLED_PLUGINS_FILE_source%" == "environment" ( - for /f "delims=" %%F in ('!SCRIPT_DIR!\rabbitmqctl.bat eval "{ok, P} = application:get_env(rabbit, enabled_plugins_file), io:format(""~s~n"", [P])."') do @set enabled_plugins_file=%%F - if exist "!enabled_plugins_file!" ( - set RABBITMQ_ENABLED_PLUGINS_FILE=!enabled_plugins_file:"=! - ) - REM set enabled_plugins_file= - ) - ) - - if exist "!RABBITMQ_PLUGINS_DIR!" ( - REM RabbitMQ was started with "make run-broker" from its own - REM source tree. Take rabbit_common from the plugins directory. - set ERL_LIBS=!RABBITMQ_PLUGINS_DIR!;!ERL_LIBS! - ) else ( - REM RabbitMQ runs from a testsuite or a plugin. The .ez files are - REM not available under RabbitMQ source tree. We need to look at - REM $DEPS_DIR and default locations. - - if "!DEPS_DIR!" == "" ( - if exist "!RABBITMQ_HOME!\..\..\deps\rabbit_common\erlang.mk" ( - REM Dependencies in the Umbrella or a plugin. - set DEPS_DIR_norm=!RABBITMQ_HOME!\..\..\deps - ) else ( - if exist "!RABBITMQ_HOME!\deps\rabbit_common\erlang.mk" ( - REM Dependencies in the broker. - set DEPS_DIR_norm=!RABBITMQ_HOME!\deps - ) - ) - ) else ( - for /f "delims=" %%F in ("!DEPS_DIR!") do @set DEPS_DIR_norm=%%~dpF%%~nF%%~xF - ) - - set ERL_LIBS=!DEPS_DIR_norm!;!ERL_LIBS! - ) -) else ( - if exist "!RABBITMQ_PLUGINS_DIR!" ( - REM RabbitMQ was started from its install directory. Take - REM rabbit_common from the plugins directory. - set ERL_LIBS=!RABBITMQ_PLUGINS_DIR:"=!;!ERL_LIBS:"=! - ) -) - -REM Ensure ERL_LIBS begins with valid path -set ERL_LIBS_orig=%ERL_LIBS:"=% -set ERL_LIBS= -call :filter_paths "%ERL_LIBS_orig%" -goto :filter_paths_done - -:filter_paths -set paths=%1 -set paths=%paths:"=% -for /f "tokens=1* delims=;" %%a in ("%paths%") do ( - if not "%%a" == "" call :filter_path "%%a" - if not "%%b" == "" call :filter_paths "%%b" -) -set paths= -goto :eof - -:filter_path -IF "%ERL_LIBS%"=="" ( - set "ERL_LIBS=%~dp1%~n1%~x1" -) else ( - set "ERL_LIBS=!ERL_LIBS!;%~dp1%~n1%~x1" -) -goto :eof - -:filter_paths_done - REM Environment cleanup set BOOT_MODULE= set CONFIG_FILE= @@ -509,6 +151,6 @@ set SCRIPT_NAME= set TDP0= REM ##--- End of overridden variables -REM + REM # Since we source this elsewhere, don't accidentally stop execution REM true diff --git a/deps/rabbit/scripts/rabbitmq-plugins.bat b/deps/rabbit/scripts/rabbitmq-plugins.bat index 37b2391..450ee27 100644 --- a/deps/rabbit/scripts/rabbitmq-plugins.bat +++ b/deps/rabbit/scripts/rabbitmq-plugins.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-plugins" !STAR! @@ -61,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-queues.bat b/deps/rabbit/scripts/rabbitmq-queues.bat index 45b1ded..db273d1 100644 --- a/deps/rabbit/scripts/rabbitmq-queues.bat +++ b/deps/rabbit/scripts/rabbitmq-queues.bat @@ -49,11 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ --nodename !RABBITMQ_NODENAME! ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-queues" !STAR! @@ -62,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-rel b/deps/rabbit/scripts/rabbitmq-rel new file mode 100755 index 0000000..a96ec78 --- /dev/null +++ b/deps/rabbit/scripts/rabbitmq-rel @@ -0,0 +1,58 @@ +#!/usr/bin/env escript +%% vim:ft=erlang:sw=2:et: + +main(["show-rel"]) -> + Rel = get_rel(), + io:format("~p.~n", [Rel]); +main(["gen-boot"]) -> + generate_rel(), + generate_boot(). + +get_rel() -> + ok = application:load(rabbit), + Apps0 = get_apps(rabbit), + Apps1 = lists:sort( + fun + (_, rabbitmq_prelaunch) -> false; + (rabbitmq_prelaunch, _) -> true; + (_, mnesia) -> true; + (mnesia, _) -> false; + (A, B) -> A =< B + end, Apps0), + Apps = [{App, get_vsn(App)} || App <- Apps1], + + ERTSVersion = erlang:system_info(version), + RabbitVersion = get_vsn(rabbit), + + {release, + {"RabbitMQ", RabbitVersion}, + {erts, ERTSVersion}, + Apps}. + +get_apps(App) -> + ok = load_app(App), + {ok, DirectDeps} = application:get_key(App, applications), + lists:umerge( + [lists:usort(get_apps(Dep)) || Dep <- DirectDeps] ++ + [lists:usort([kernel, stdlib, sasl, App, mnesia])]). + +load_app(App) -> + case application:load(App) of + ok -> ok; + {error, {already_loaded, App}} -> ok + end. + +generate_rel() -> + Rel = get_rel(), + io:format("~p.~n", [Rel]), + Output = io_lib:format("~p.~n", [Rel]), + ok = file:write_file("rabbit.rel", Output). + +generate_boot() -> + Options = [local, {path, code:get_path()}], + ok = systools:make_script("rabbit", Options). + +get_vsn(App) -> + load_app(App), + {ok, Vsn} = application:get_key(App, vsn), + Vsn. diff --git a/deps/rabbit/scripts/rabbitmq-server b/deps/rabbit/scripts/rabbitmq-server index 8f9a057..0976c55 100755 --- a/deps/rabbit/scripts/rabbitmq-server +++ b/deps/rabbit/scripts/rabbitmq-server @@ -1,4 +1,5 @@ #!/bin/sh +# vim:sw=4:et: ## The contents of this file are subject to the Mozilla Public License ## Version 1.1 (the "License"); you may not use this file except in ## compliance with the License. You may obtain a copy of the License @@ -19,247 +20,18 @@ set -e # Get default settings with user overrides for (RABBITMQ_) # Non-empty defaults should be set in rabbitmq-env -. `dirname $0`/rabbitmq-env - -RABBITMQ_START_RABBIT= -[ "x" = "x$RABBITMQ_ALLOW_INPUT" ] && RABBITMQ_START_RABBIT=" -noinput" -[ "x" = "x$RABBITMQ_NODE_ONLY" ] && RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -s $RABBITMQ_BOOT_MODULE boot " - -case "$(uname -s)" in - CYGWIN*) # we make no attempt to record the cygwin pid; rabbitmqctl wait - # will not be able to make sense of it anyway - ;; - *) # When -detached is passed, we don't write the pid, since it'd be the - # wrong one - detached="" - for opt in "$@"; do - if [ "$opt" = "-detached" ]; then - detached="true" - fi - done - if [ $detached ]; then - echo "Warning: PID file not written; -detached was passed." 1>&2 - else - RABBITMQ_PID_DIR="$(dirname ${RABBITMQ_PID_FILE})" - EX_CANTCREAT=73 # Standard exit code from sysexits(2) - if ! mkdir -p "$RABBITMQ_PID_DIR"; then - # Better diagnostics - 'mkdir -p' reports only the first directory in chain that - # it fails to create - echo "Failed to create directory: $RABBITMQ_PID_DIR" - exit $EX_CANTCREAT - fi - if ! echo $$ > ${RABBITMQ_PID_FILE}; then - # Better diagnostics - otherwise the only report in logs is about failed 'echo' - # command, but without any other details: neither what script has failed nor what - # file output was redirected to. - echo "Failed to write pid file: ${RABBITMQ_PID_FILE}" - exit $EX_CANTCREAT - fi - fi -esac - -RABBITMQ_EBIN_ROOT="${RABBITMQ_HOME}/ebin" +SCRIPTS_DIR=$(dirname "$0") +. "$SCRIPTS_DIR/rabbitmq-env" [ "$NOTIFY_SOCKET" ] && RUNNING_UNDER_SYSTEMD=true -get_noex() { - if [ "x" = "x${1}" ]; then - echo "" - else - local BASENAME=$(basename $1) - local DIRNAME=$(dirname $1) - if [ "x." = "x${DIRNAME}" ]; then - echo "${BASENAME%.*}" - else - echo "${DIRNAME}/${BASENAME%.*}" - fi - fi -} - -# Check that advanced config file has the .config extension -# Add .config extension if it's empty - -RABBITMQ_ADVANCED_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_ADVANCED_CONFIG_FILE}) -if [ "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - -o "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then - RABBITMQ_ADVANCED_CONFIG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" -fi - - -RABBITMQ_CONFIG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_FILE}) -# Extension is not specified. -# Determine config type from file - -if [ "${RABBITMQ_CONFIG_FILE_NOEX}" = "${RABBITMQ_CONFIG_FILE}" ]; then - if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.config" ]; then - if [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then - # Both files exist. Print a warning. - _rmq_env_pwarn 'Both old (.config) and new (.conf) format config files exist.' \ - "Using the old format config file: ${RABBITMQ_CONFIG_FILE_NOEX}.config" \ - 'Please update your config files to the new format and remove the old file.' - fi - RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.config" - elif [ -f "${RABBITMQ_CONFIG_FILE_NOEX}.conf" ]; then - RABBITMQ_CONFIG_FILE="${RABBITMQ_CONFIG_FILE_NOEX}.conf" - else - if [ -f ${RABBITMQ_ADVANCED_CONFIG_FILE} ]; then - _rmq_env_pwarn "Using RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" - fi - # No config file exist. Use advanced config for -config arg. - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" - RABBITMQ_CONFIG_FILE="" - fi -fi - -# Set the -config argument. -# The -config argument should not have extension. -# the file should exist -# the file should be a valid erlang term file - -# Config file extension is .config -if [ "${RABBITMQ_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_CONFIG_FILE}" -# Config file extension is .conf -elif [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then - RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}" -elif [ "x" != "x${RABBITMQ_CONFIG_FILE}" \ - -a "${RABBITMQ_CONFIG_FILE_NOEX}" != "${RABBITMQ_CONFIG_FILE}" ]; then - # Config file has an extension, but it's neither .conf or .config - _rmq_env_perr "Wrong extension for RABBITMQ_CONFIG_FILE: ${RABBITMQ_CONFIG_FILE}" \ - 'The extension should be either .conf or .config' - exit 64 # EX_USAGE -fi - -RABBITMQ_CONFIG_ARG_FILE_NOEX=$(get_noex ${RABBITMQ_CONFIG_ARG_FILE}) - -if [ "${RABBITMQ_CONFIG_ARG_FILE_NOEX}.config" != "${RABBITMQ_CONFIG_ARG_FILE}" ]; then - if [ "${RABBITMQ_CONFIG_ARG_FILE}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then - _rmq_env_perr "Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - 'The extension should be .config' - exit 64 # EX_USAGE - else - # We should never got here, but still there should be some explanation - _rmq_env_perr "Wrong extension for ${RABBITMQ_CONFIG_ARG_FILE}" - 'The extension should be .config' - exit 64 # EX_USAGE - fi -fi - -# Set -config if the file exists -if [ -f "${RABBITMQ_CONFIG_ARG_FILE}" ]; then - RABBITMQ_CONFIG_ARG="-config ${RABBITMQ_CONFIG_ARG_FILE_NOEX}" -fi - -# Set -conf and other generated config parameters -if [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then - if [ ! -d ${RABBITMQ_SCHEMA_DIR} ]; then - mkdir -p "${RABBITMQ_SCHEMA_DIR}" - fi - - if [ ! -d ${RABBITMQ_GENERATED_CONFIG_DIR} ]; then - mkdir -p "${RABBITMQ_GENERATED_CONFIG_DIR}" - fi - - cp -f "${RABBITMQ_HOME}/priv/schema/rabbit.schema" "${RABBITMQ_SCHEMA_DIR}" - - RABBITMQ_GENERATED_CONFIG_ARG="-conf ${RABBITMQ_CONFIG_FILE} \ - -conf_dir ${RABBITMQ_GENERATED_CONFIG_DIR} \ - -conf_script_dir `dirname $0` \ - -conf_schema_dir ${RABBITMQ_SCHEMA_DIR} - -conf_advanced ${RABBITMQ_ADVANCED_CONFIG_FILE}" -fi - -set +e - -# `net_kernel:start/1` will fail in `longnames` mode when erlang is -# unable to determine FQDN of a node (with a dot in it). But `erl` -# itself has some magic that still allow it to start when you -# explicitly specify host (a.la `erl -name test@localhost`). -# -# It's not possible to communicate with this node, unless it's a -# connection initiator. But as prelaunch IS an initiator, it doesn't -# matter what we actually put here. But `localhost` sounds good -# enough. -RABBITMQ_PRELAUNCH_NODENAME="rabbitmqprelaunch${$}@localhost" - -# NOTIFY_SOCKET is needed here to prevent epmd from impersonating the -# success of our startup sequence to systemd. -NOTIFY_SOCKET= \ -RABBITMQ_CONFIG_FILE=$RABBITMQ_CONFIG_FILE \ -ERL_CRASH_DUMP=$ERL_CRASH_DUMP \ -RABBITMQ_CONFIG_ARG_FILE=$RABBITMQ_CONFIG_ARG_FILE \ -RABBITMQ_DIST_PORT=$RABBITMQ_DIST_PORT \ - ${ERL_DIR}erl -pa "$RABBITMQ_EBIN_ROOT" \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput \ - -hidden \ - -s rabbit_prelaunch \ - ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ - ${RABBITMQ_NAME_TYPE} ${RABBITMQ_PRELAUNCH_NODENAME} \ - -conf_advanced "${RABBITMQ_ADVANCED_CONFIG_FILE}" \ - -rabbit feature_flags_file "\"$RABBITMQ_FEATURE_FLAGS_FILE\"" \ - -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \ - -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \ - -extra "${RABBITMQ_NODENAME}" - -PRELAUNCH_RESULT=$? -if [ ${PRELAUNCH_RESULT} = 2 ] ; then - # dist port is mentioned in config, so do not set it - true -elif [ ${PRELAUNCH_RESULT} = 0 ] ; then - # dist port is not mentioned in the config file, we can set it - RABBITMQ_DIST_ARG="-kernel inet_dist_listen_min ${RABBITMQ_DIST_PORT} -kernel inet_dist_listen_max ${RABBITMQ_DIST_PORT}" -else - exit ${PRELAUNCH_RESULT} -fi - -# The default allocation strategy RabbitMQ is using was introduced -# in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -# this configuration. We therefore need to ensure that erl accepts -# these values before we can use them. -# -# The defaults are meant to reduce RabbitMQ's memory usage and help -# it reclaim memory at the cost of a slight decrease in performance -# (due to an increase in memory operations). These defaults can be -# overridden using the RABBITMQ_SERVER_ERL_ARGS variable. RABBITMQ_DEFAULT_ALLOC_ARGS="+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30" -${ERL_DIR}erl ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput -eval 'halt(0)' 2>/dev/null - -if [ $? != 0 ] ; then - RABBITMQ_DEFAULT_ALLOC_ARGS= -fi - -set -e - -RABBITMQ_LISTEN_ARG= -[ "x" != "x$RABBITMQ_NODE_PORT" ] && [ "x" != "x$RABBITMQ_NODE_IP_ADDRESS" ] && RABBITMQ_LISTEN_ARG="-rabbit tcp_listeners [{\""${RABBITMQ_NODE_IP_ADDRESS}"\","${RABBITMQ_NODE_PORT}"}]" - -# If $RABBITMQ_LOGS is '-', send all log messages to stdout. This is -# particularly useful for Docker images. - -if [ "$RABBITMQ_LOGS" = '-' ]; then - SASL_ERROR_LOGGER=tty - RABBIT_LAGER_HANDLER=tty - RABBITMQ_LAGER_HANDLER_UPGRADE=tty -else - SASL_ERROR_LOGGER=false - RABBIT_LAGER_HANDLER='"'${RABBITMQ_LOGS}'"' - RABBITMQ_LAGER_HANDLER_UPGRADE='"'${RABBITMQ_UPGRADE_LOG}'"' -fi - # Bump ETS table limit to 50000 if [ "x" = "x$ERL_MAX_ETS_TABLES" ]; then ERL_MAX_ETS_TABLES=50000 fi -# we need to turn off path expansion because some of the vars, notably -# RABBITMQ_SERVER_ERL_ARGS, contain terms that look like globs and -# there is no other way of preventing their expansion. -set -f - # Lazy initialization of threed pool size - if it wasn't set # explicitly. This parameter is only needed when server is starting, # so it makes no sense to do this calculations in rabbitmq-env or @@ -267,70 +39,16 @@ set -f ensure_thread_pool_size() { if [ -z "${RABBITMQ_IO_THREAD_POOL_SIZE}" ]; then RABBITMQ_IO_THREAD_POOL_SIZE=$( - ${ERL_DIR}erl -pa "$RABBITMQ_EBIN_ROOT" \ - -boot "${CLEAN_BOOT_FILE}" \ - -noinput \ - -s rabbit_misc report_default_thread_pool_size + erl \ + -noinput \ + -boot "${CLEAN_BOOT_FILE}" \ + -s rabbit_misc report_default_thread_pool_size ) fi } -start_rabbitmq_server() { - # The arguments to -pa are in this order because they are *pre*-pended - # to the code path. Since we want RABBITMQ_SERVER_CODE_PATH to precede - # RABBITMQ_EBIN_ROOT, it must come as the second argument here. - # https://github.com/rabbitmq/rabbitmq-server/issues/1777 - ensure_thread_pool_size - check_start_params && - RABBITMQ_CONFIG_FILE=$RABBITMQ_CONFIG_FILE \ - ERL_MAX_ETS_TABLES=$ERL_MAX_ETS_TABLES \ - ERL_CRASH_DUMP=$ERL_CRASH_DUMP \ - exec ${ERL_DIR}erl \ - -pa "$RABBITMQ_EBIN_ROOT" "$RABBITMQ_SERVER_CODE_PATH" \ - ${RABBITMQ_START_RABBIT} \ - ${RABBITMQ_NAME_TYPE} ${RABBITMQ_NODENAME} \ - -boot "${SASL_BOOT_FILE}" \ - ${RABBITMQ_CONFIG_ARG} \ - ${RABBITMQ_GENERATED_CONFIG_ARG} \ - +W w \ - +A ${RABBITMQ_IO_THREAD_POOL_SIZE} \ - ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ - ${RABBITMQ_SERVER_ERL_ARGS} \ - +K true \ - -kernel inet_default_connect_options "[{nodelay,true}]" \ - ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ - ${RABBITMQ_LISTEN_ARG} \ - -sasl errlog_type error \ - -sasl sasl_error_logger "$SASL_ERROR_LOGGER" \ - -rabbit lager_log_root "\"$RABBITMQ_LOG_BASE\"" \ - -rabbit lager_default_file "$RABBIT_LAGER_HANDLER" \ - -rabbit lager_upgrade_file "$RABBITMQ_LAGER_HANDLER_UPGRADE" \ - -rabbit feature_flags_file "\"$RABBITMQ_FEATURE_FLAGS_FILE\"" \ - -rabbit enabled_plugins_file "\"$RABBITMQ_ENABLED_PLUGINS_FILE\"" \ - -rabbit plugins_dir "\"$RABBITMQ_PLUGINS_DIR\"" \ - -rabbit plugins_expand_dir "\"$RABBITMQ_PLUGINS_EXPAND_DIR\"" \ - -os_mon start_cpu_sup false \ - -os_mon start_disksup false \ - -os_mon start_memsup false \ - -mnesia dir "\"${RABBITMQ_MNESIA_DIR}\"" \ - -ra data_dir "\"${RABBITMQ_QUORUM_DIR}\"" \ - ${RABBITMQ_SERVER_START_ARGS} \ - ${RABBITMQ_DIST_ARG} \ - "$@" -} - -stop_rabbitmq_server() { - RABBITMQCTL="$(dirname "$0")/rabbitmqctl" - - if ${RABBITMQCTL} -n ${RABBITMQ_NODENAME} status >/dev/null 2>&1; then - ${RABBITMQCTL} -n ${RABBITMQ_NODENAME} stop - fi -} - check_start_params() { check_not_empty RABBITMQ_BOOT_MODULE - check_not_empty RABBITMQ_NAME_TYPE - check_not_empty RABBITMQ_NODENAME check_not_empty SASL_BOOT_FILE check_not_empty RABBITMQ_IO_THREAD_POOL_SIZE } @@ -346,6 +64,61 @@ check_not_empty() { fi } +start_rabbitmq_server() { + set -e + + _rmq_env_set_erl_libs + ensure_thread_pool_size + + RABBITMQ_START_RABBIT= + [ "x" = "x$RABBITMQ_ALLOW_INPUT" ] && RABBITMQ_START_RABBIT=" -noinput" + if test -z "$RABBITMQ_NODE_ONLY"; then + if test "$USE_RABBIT_BOOT_SCRIPT"; then + # TODO: This is experimental and undocumented at this point. + # It is here just to do simple checks while playing with how + # RabbitMQ is started. + "$SCRIPTS_DIR/rabbitmq-rel" gen-boot + SASL_BOOT_FILE=rabbit + test -f "$SASL_BOOT_FILE.boot" + RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -init_debug" + else + RABBITMQ_START_RABBIT="$RABBITMQ_START_RABBIT -s $RABBITMQ_BOOT_MODULE boot" + fi + fi + + # We need to turn off path expansion because some of the vars, + # notably RABBITMQ_SERVER_ERL_ARGS, contain terms that look like + # globs and there is no other way of preventing their expansion. + set -f + + export ERL_MAX_ETS_TABLES \ + SYS_PREFIX + + check_start_params + + exec erl \ + -pa "$RABBITMQ_SERVER_CODE_PATH" \ + ${RABBITMQ_START_RABBIT} \ + -boot "${SASL_BOOT_FILE}" \ + +W w \ + +K true \ + +A ${RABBITMQ_IO_THREAD_POOL_SIZE} \ + ${RABBITMQ_DEFAULT_ALLOC_ARGS} \ + ${RABBITMQ_SERVER_ERL_ARGS} \ + ${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS} \ + ${RABBITMQ_SERVER_START_ARGS} \ + -lager crash_log false \ + -lager handlers '[]' \ + "$@" +} + +stop_rabbitmq_server() { + if test "$rabbitmq_server_pid"; then + kill -TERM "$rabbitmq_server_pid" + wait "$rabbitmq_server_pid" || true + fi +} + if [ "$RABBITMQ_ALLOW_INPUT" -o "$RUNNING_UNDER_SYSTEMD" -o "$detached" ]; then # Run erlang VM directly, completely replacing current shell # process - so the pid file written in the code above will be @@ -382,13 +155,13 @@ else # # The behaviors below should remain consistent with the # equivalent signal handlers in the Erlang code - # (see src/rabbit_os_signal_handler.erl). + # (see apps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl). trap '' HUP TSTP CONT trap "stop_rabbitmq_server; exit 0" TERM trap "stop_rabbitmq_server; exit 130" INT start_rabbitmq_server "$@" & - rabbitmq_server_pid=$! + export rabbitmq_server_pid=$! # Block until RabbitMQ exits or a signal is caught. # Waits for last command (which is start_rabbitmq_server) @@ -406,5 +179,5 @@ else # force that statement to succeed and the signal handler to properly # execute. Because the statement below has an exit code of 0, the # signal handler has to restate the expected exit code. - wait $rabbitmq_server_pid || true + wait "$rabbitmq_server_pid" || true fi diff --git a/deps/rabbit/scripts/rabbitmq-server.bat b/deps/rabbit/scripts/rabbitmq-server.bat index d2b5b90..0be62f3 100644 --- a/deps/rabbit/scripts/rabbitmq-server.bat +++ b/deps/rabbit/scripts/rabbitmq-server.bat @@ -46,163 +46,8 @@ if not exist "!ERLANG_HOME!\bin\erl.exe" ( exit /B 1 ) -set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin - -CALL :convert_forward_slashes "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE -CALL :get_noex "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE_NOEX - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config - REM Try to create advanced config file, if it doesn't exist - REM It still can fail to be created, but at least not for default install - if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE_NOEX - -if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - rem Both files exist. Print a warning - echo "WARNING: Both old (.config) and new (.conf) format config files exist." - echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config" - echo "WARNING: Please update your config files to the new format and remove the old file" - ) - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config - ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf - ) else ( - rem No config file exist. Use advanced config for -config arg. - if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - ) - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -rem Set the -config argument. -rem The -config argument should not have extension. -rem the file should exist -rem the file should be a valid erlang term file - -rem Config file extension is .config -if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE! -) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! -) else if not "" == "!RABBITMQ_CONFIG_FILE!" ( - if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" ( - rem Config file has an extension, but it's neither .conf or .config - echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!" - echo "ERROR: extension should be either .conf or .config" - exit /B 1 - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE_NOEX - -if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" ( - if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) else ( - rem We should never got here, but still there should be some explanation - echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) -) - -rem Set -config if the file exists -if exist !RABBITMQ_CONFIG_ARG_FILE! ( - set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!" -) - -rem Set -conf and other generated config parameters -if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - if not exist "!RABBITMQ_SCHEMA_DIR!" ( - mkdir "!RABBITMQ_SCHEMA_DIR!" - ) - - if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" ( - mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!" - ) - - copy /Y "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" - - set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE:\=/!" ^ - -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR:\=/!" ^ - -conf_script_dir "!CONF_SCRIPT_DIR:\=/!" ^ - -conf_schema_dir "!RABBITMQ_SCHEMA_DIR:\=/!" ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE:\=/!" -) - -"!ERLANG_HOME!\bin\erl.exe" ^ - -pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -hidden ^ - -s rabbit_prelaunch ^ - !RABBITMQ_NAME_TYPE! rabbitmqprelaunch!RANDOM!!TIME:~9!@localhost ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^ - -rabbit feature_flags_file "!RABBITMQ_FEATURE_FLAGS_FILE!" ^ - -rabbit enabled_plugins_file "!RABBITMQ_ENABLED_PLUGINS_FILE!" ^ - -rabbit plugins_dir "!RABBITMQ_PLUGINS_DIR!" ^ - -extra "!RABBITMQ_NODENAME!" - -if ERRORLEVEL 2 ( - rem dist port mentioned in config, do not attempt to set it -) else if ERRORLEVEL 1 ( - exit /B 1 -) else ( - set RABBITMQ_DIST_ARG=-kernel inet_dist_listen_min !RABBITMQ_DIST_PORT! -kernel inet_dist_listen_max !RABBITMQ_DIST_PORT! -) - -rem The default allocation strategy RabbitMQ is using was introduced -rem in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -rem this configuration. We therefore need to ensure that erl accepts -rem these values before we can use them. -rem -rem The defaults are meant to reduce RabbitMQ's memory usage and help -rem it reclaim memory at the cost of a slight decrease in performance -rem (due to an increase in memory operations). These defaults can be -rem overridden using the RABBITMQ_SERVER_ERL_ARGS variable. - set RABBITMQ_DEFAULT_ALLOC_ARGS=+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30 -"!ERLANG_HOME!\bin\erl.exe" ^ - !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -eval "halt(0)" - -if ERRORLEVEL 1 ( - set RABBITMQ_DEFAULT_ALLOC_ARGS= -) - -set RABBITMQ_LISTEN_ARG= -if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_LISTEN_ARG=-rabbit tcp_listeners [{"\"!RABBITMQ_NODE_IP_ADDRESS!\"","!RABBITMQ_NODE_PORT!"}] - ) -) - -REM If !RABBITMQ_LOGS! is '-', send all log messages to stdout. This is -REM particularly useful for Docker images. - -if "!RABBITMQ_LOGS!" == "-" ( - set SASL_ERROR_LOGGER=tty - set RABBIT_LAGER_HANDLER=tty - set RABBITMQ_LAGER_HANDLER_UPGRADE=tty -) else ( - set SASL_ERROR_LOGGER=false - set RABBIT_LAGER_HANDLER="\"!RABBITMQ_LOGS:\=/!\"" - set RABBITMQ_LAGER_HANDLER_UPGRADE="\"!RABBITMQ_UPGRADE_LOG:\=/!\"" -) - set RABBITMQ_START_RABBIT= if "!RABBITMQ_ALLOW_INPUT!"=="" ( set RABBITMQ_START_RABBIT=!RABBITMQ_START_RABBIT! -noinput @@ -217,9 +62,6 @@ if "!RABBITMQ_IO_THREAD_POOL_SIZE!"=="" ( set ENV_OK=true CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! -CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! -CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! - if "!ENV_OK!"=="false" ( EXIT /b 78 @@ -232,35 +74,16 @@ if "!RABBITMQ_ALLOW_INPUT!"=="" ( ) "!ERLANG_HOME!\bin\!ERL_CMD!" ^ --pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ --boot start_sasl ^ !RABBITMQ_START_RABBIT! ^ -!RABBITMQ_CONFIG_ARG! ^ -!RABBITMQ_GENERATED_CONFIG_ARG! ^ -!RABBITMQ_NAME_TYPE! !RABBITMQ_NODENAME! ^ +-boot "!SASL_BOOT_FILE!" ^ +W w ^ +A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^ !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ !RABBITMQ_SERVER_ERL_ARGS! ^ -!RABBITMQ_LISTEN_ARG! ^ --kernel inet_default_connect_options "[{nodelay, true}]" ^ !RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^ --sasl errlog_type error ^ --sasl sasl_error_logger !SASL_ERROR_LOGGER! ^ --rabbit lager_log_root "\"!RABBITMQ_LOG_BASE:\=/!\"" ^ --rabbit lager_default_file !RABBIT_LAGER_HANDLER! ^ --rabbit lager_upgrade_file !RABBITMQ_LAGER_HANDLER_UPGRADE! ^ --rabbit feature_flags_file "\"!RABBITMQ_FEATURE_FLAGS_FILE:\=/!\"" ^ --rabbit enabled_plugins_file "\"!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!\"" ^ --rabbit plugins_dir "\"!RABBITMQ_PLUGINS_DIR:\=/!\"" ^ --rabbit plugins_expand_dir "\"!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!\"" ^ --mnesia dir "\"!RABBITMQ_MNESIA_DIR:\=/!\"" ^ --os_mon start_cpu_sup false ^ --os_mon start_disksup false ^ --os_mon start_memsup false ^ --ra data_dir \""!RABBITMQ_QUORUM_DIR:\=/!"\" ^ !RABBITMQ_SERVER_START_ARGS! ^ -!RABBITMQ_DIST_ARG! ^ +-lager crash_log false ^ +-lager handlers "[]" ^ !STAR! if ERRORLEVEL 1 ( @@ -277,17 +100,6 @@ if "%~2"=="" ( ) EXIT /B 0 -:get_noex -set "%~2=%~dpn1" -EXIT /B 0 - -rem Convert unix style path separators into windows style path separators -rem needed for comparing with _NOEX variables -rem rabbitmq/rabbitmq-server#1962 -:convert_forward_slashes -set "%~2=%~dpf1" -EXIT /B 0 - endlocal endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-service.bat b/deps/rabbit/scripts/rabbitmq-service.bat index c110e75..ab539e8 100644 --- a/deps/rabbit/scripts/rabbitmq-service.bat +++ b/deps/rabbit/scripts/rabbitmq-service.bat @@ -35,6 +35,38 @@ REM Get default settings with user overrides for (RABBITMQ_) REM Non-empty defaults should be set in rabbitmq-env call "%TDP0%\rabbitmq-env.bat" %~n0 +REM Check for the short names here too +if "!RABBITMQ_USE_LONGNAME!"=="true" ( + set RABBITMQ_NAME_TYPE=-name + set NAMETYPE=longnames +) else ( + if "!USE_LONGNAME!"=="true" ( + set RABBITMQ_USE_LONGNAME=true + set RABBITMQ_NAME_TYPE=-name + set NAMETYPE=longnames + ) else ( + set RABBITMQ_USE_LONGNAME=false + set RABBITMQ_NAME_TYPE=-sname + set NAMETYPE=shortnames + ) +) + +REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} +if "!RABBITMQ_NODENAME!"=="" ( + if "!NODENAME!"=="" ( + REM We use Erlang to query the local hostname because + REM !COMPUTERNAME! and Erlang may return different results. + REM Start erl with -sname to make sure epmd is started. + call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -sname rabbit-prelaunch-epmd -eval "init:stop()." >nul 2>&1 + for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F + set RABBITMQ_NODENAME=rabbit@!HOSTNAME! + set HOSTNAME= + ) else ( + set RABBITMQ_NODENAME=!NODENAME! + ) +) +set NAMETYPE= + set STARVAR= shift :loop1 @@ -112,16 +144,6 @@ if not exist "!RABBITMQ_BASE!" ( echo Creating base directory !RABBITMQ_BASE! & mkdir "!RABBITMQ_BASE!" ) -set ENV_OK=true -CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! -CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! -CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! - - -if "!ENV_OK!"=="false" ( - EXIT /b 78 -) - "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" list !RABBITMQ_SERVICENAME! 2>NUL 1>NUL if errorlevel 1 ( "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" add !RABBITMQ_SERVICENAME! -internalservicename !RABBITMQ_SERVICENAME! @@ -129,165 +151,8 @@ if errorlevel 1 ( echo !RABBITMQ_SERVICENAME! service is already present - only updating service parameters ) -set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin - -CALL :convert_forward_slashes "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE -CALL :get_noex "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE_NOEX - -if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" ( - set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config - REM Try to create advanced config file, if it doesn't exist - REM It still can fail to be created, but at least not for default install - if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE_NOEX - -if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" ( - if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - rem Both files exist. Print a warning - echo "WARNING: Both old (.config) and new (.conf) format config files exist." - echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config" - echo "WARNING: Please update your config files to the new format and remove the old file" - ) - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config - ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" ( - set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf - ) else ( - rem No config file exist. Use advanced config for -config arg. - if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - ) - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! - ) -) - -rem Set the -config argument. -rem The -config argument should not have extension. -rem the file should exist -rem the file should be a valid erlang term file - -rem Config file extension is .config -if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE! -) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE! -) else if not "" == "!RABBITMQ_CONFIG_FILE!" ( - if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" ( - rem Config file has an extension, but it's neither .conf or .config - echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!" - echo "ERROR: extension should be either .conf or .config" - exit /B 1 - ) -) - -CALL :convert_forward_slashes "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE -CALL :get_noex "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE_NOEX - -if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" ( - if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" ( - echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) else ( - rem We should never got here, but still there should be some explanation - echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!" - echo "ERROR: extension should be .config" - exit /B 1 - ) -) - -rem Set -config if the file exists -if exist !RABBITMQ_CONFIG_ARG_FILE! ( - set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!" -) - -rem Set -conf and other generated config parameters -if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" ( - if not exist "!RABBITMQ_SCHEMA_DIR!" ( - mkdir "!RABBITMQ_SCHEMA_DIR!" - ) - - if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" ( - mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!" - ) - - copy /Y "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema" - - set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE:\=/!" ^ - -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR:\=/!" ^ - -conf_script_dir "!CONF_SCRIPT_DIR:\=/!" ^ - -conf_schema_dir "!RABBITMQ_SCHEMA_DIR:\=/!" ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE:\=/!" -) - -"!ERLANG_HOME!\bin\erl.exe" ^ - -pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -hidden ^ - -s rabbit_prelaunch ^ - !RABBITMQ_NAME_TYPE! rabbitmqprelaunch!RANDOM!!TIME:~9!@localhost ^ - -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^ - -rabbit feature_flags_file "!RABBITMQ_FEATURE_FLAGS_FILE!" ^ - -rabbit enabled_plugins_file "!RABBITMQ_ENABLED_PLUGINS_FILE!" ^ - -rabbit plugins_dir "!RABBITMQ_PLUGINS_DIR!" ^ - -extra "!RABBITMQ_NODENAME!" - -if ERRORLEVEL 3 ( - rem ERRORLEVEL means (or greater) so we need to catch all other failure - rem cases here - exit /B 1 -) else if ERRORLEVEL 2 ( - rem dist port mentioned in config, do not attempt to set it -) else if ERRORLEVEL 1 ( - exit /B 1 -) else ( - set RABBITMQ_DIST_ARG=-kernel inet_dist_listen_min !RABBITMQ_DIST_PORT! -kernel inet_dist_listen_max !RABBITMQ_DIST_PORT! -) - -rem The default allocation strategy RabbitMQ is using was introduced -rem in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with -rem this configuration. We therefore need to ensure that erl accepts -rem these values before we can use them. -rem -rem The defaults are meant to reduce RabbitMQ's memory usage and help -rem it reclaim memory at the cost of a slight decrease in performance -rem (due to an increase in memory operations). These defaults can be -rem overridden using the RABBITMQ_SERVER_ERL_ARGS variable. - set RABBITMQ_DEFAULT_ALLOC_ARGS=+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30 -"!ERLANG_HOME!\bin\erl.exe" ^ - !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ - -boot !CLEAN_BOOT_FILE! ^ - -noinput -eval "halt(0)" - -if ERRORLEVEL 1 ( - set RABBITMQ_DEFAULT_ALLOC_ARGS= -) - - -set RABBITMQ_LISTEN_ARG= -if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" ( - if not "!RABBITMQ_NODE_PORT!"=="" ( - set RABBITMQ_LISTEN_ARG=-rabbit tcp_listeners "[{\"!RABBITMQ_NODE_IP_ADDRESS!\", !RABBITMQ_NODE_PORT!}]" - ) -) - -if "!RABBITMQ_LOGS!" == "-" ( - set SASL_ERROR_LOGGER=tty - set RABBIT_LAGER_HANDLER=tty - set RABBITMQ_LAGER_HANDLER_UPGRADE=tty -) else ( - set SASL_ERROR_LOGGER=false - set RABBIT_LAGER_HANDLER="\"!RABBITMQ_LOGS:\=/!\"" - set RABBITMQ_LAGER_HANDLER_UPGRADE="\"!RABBITMQ_UPGRADE_LOG:\=/!\"" -) - set RABBITMQ_START_RABBIT= if "!RABBITMQ_NODE_ONLY!"=="" ( set RABBITMQ_START_RABBIT=-s "!RABBITMQ_BOOT_MODULE!" boot @@ -301,45 +166,46 @@ if "!RABBITMQ_SERVICE_RESTART!"=="" ( set RABBITMQ_SERVICE_RESTART=restart ) +set ENV_OK=true +CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE! +CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE! +CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME! + +if "!ENV_OK!"=="false" ( + EXIT /b 78 +) + set ERLANG_SERVICE_ARGUMENTS= ^ --pa "!RABBITMQ_EBIN_ROOT:\=/!" ^ --boot start_sasl ^ !RABBITMQ_START_RABBIT! ^ -!RABBITMQ_CONFIG_ARG! ^ -!RABBITMQ_GENERATED_CONFIG_ARG! ^ +-boot "!SASL_BOOT_FILE!" ^ +W w ^ +A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^ !RABBITMQ_DEFAULT_ALLOC_ARGS! ^ !RABBITMQ_SERVER_ERL_ARGS! ^ -!RABBITMQ_LISTEN_ARG! ^ --kernel inet_default_connect_options "[{nodelay,true}]" ^ !RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^ --sasl errlog_type error ^ --sasl sasl_error_logger false ^ --rabbit lager_log_root "\"!RABBITMQ_LOG_BASE:\=/!\"" ^ --rabbit lager_default_file !RABBIT_LAGER_HANDLER! ^ --rabbit lager_upgrade_file !RABBITMQ_LAGER_HANDLER_UPGRADE! ^ --rabbit feature_flags_file "\"!RABBITMQ_FEATURE_FLAGS_FILE:\=/!\"" ^ --rabbit enabled_plugins_file "\"!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!\"" ^ --rabbit plugins_dir "\"!RABBITMQ_PLUGINS_DIR:\=/!\"" ^ --rabbit plugins_expand_dir "\"!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!\"" ^ --rabbit windows_service_config "\"!RABBITMQ_CONFIG_FILE:\=/!\"" ^ --mnesia dir "\"!RABBITMQ_MNESIA_DIR:\=/!\"" ^ --os_mon start_cpu_sup false ^ --os_mon start_disksup false ^ --os_mon start_memsup false ^ --ra data_dir \""!RABBITMQ_QUORUM_DIR:\=/!"\" ^ !RABBITMQ_SERVER_START_ARGS! ^ -!RABBITMQ_DIST_ARG! ^ +-lager crash_log false ^ +-lager handlers "[]" ^ !STARVAR! set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:\=\\! set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:"=\"! +rem We resolve %APPDATA% at install time so that the user's %APPDATA% +rem is passed to `rabbit_env` at runtime (instead of the service's +rem %APPDAT%). +rem +rem The goal is to keep the same behavior as when RabbitMQ data +rem locations were decided in `rabbitmq-env.bat` (sourced by this +rem script), even if now, we compute everything in `rabbit_env` at +rem runtime. +rem +rem We may revisit this in the future so that no data is stored in a +rem user-specific directory. "!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" set !RABBITMQ_SERVICENAME! ^ -onfail !RABBITMQ_SERVICE_RESTART! ^ -machine "!ERLANG_SERVICE_MANAGER_PATH!\erl.exe" ^ --env ERL_CRASH_DUMP="!RABBITMQ_BASE:\=/!/erl_crash.dump" ^ +-env APPDATA="!APPDATA!" ^ -env ERL_LIBS="!ERL_LIBS!" ^ -env ERL_MAX_ETS_TABLES="!ERL_MAX_ETS_TABLES!" ^ -env ERL_MAX_PORTS="!ERL_MAX_PORTS!" ^ @@ -386,17 +252,6 @@ if "%~2"=="" ( ) EXIT /B 0 -:get_noex -set "%~2=%~dpn1" -EXIT /B 0 - -rem Convert unix style path separators into windows style path separators -rem needed for comparing with _NOEX variables -rem rabbitmq/rabbitmq-server#1962 -:convert_forward_slashes -set "%~2=%~dpf1" -EXIT /B 0 - endlocal endlocal endlocal diff --git a/deps/rabbit/scripts/rabbitmq-upgrade.bat b/deps/rabbit/scripts/rabbitmq-upgrade.bat index b5bcd9e..8dde2c9 100644 --- a/deps/rabbit/scripts/rabbitmq-upgrade.bat +++ b/deps/rabbit/scripts/rabbitmq-upgrade.bat @@ -49,11 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ --nodename !RABBITMQ_NODENAME! ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmq-upgrade" !STAR! @@ -62,5 +57,6 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) -endlocal +EXIT /B 0 + endlocal diff --git a/deps/rabbit/scripts/rabbitmqctl.bat b/deps/rabbit/scripts/rabbitmqctl.bat index bc6fa3b..2d5c6db 100644 --- a/deps/rabbit/scripts/rabbitmqctl.bat +++ b/deps/rabbit/scripts/rabbitmqctl.bat @@ -49,10 +49,6 @@ if not defined ERL_CRASH_DUMP_SECONDS ( -boot !CLEAN_BOOT_FILE! ^ -noinput -noshell -hidden -smp enable ^ !RABBITMQ_CTL_ERL_ARGS! ^ --kernel inet_dist_listen_min !RABBITMQ_CTL_DIST_PORT_MIN! ^ --kernel inet_dist_listen_max !RABBITMQ_CTL_DIST_PORT_MAX! ^ --sasl errlog_type error ^ --mnesia dir \""!RABBITMQ_MNESIA_DIR:\=/!"\" ^ -run escript start ^ -escript main rabbitmqctl_escript ^ -extra "%RABBITMQ_HOME%\escript\rabbitmqctl" !STAR! @@ -61,5 +57,7 @@ if ERRORLEVEL 1 ( exit /B %ERRORLEVEL% ) +EXIT /B 0 + endlocal endlocal diff --git a/deps/rabbit/src/gatherer.erl b/deps/rabbit/src/gatherer.erl index 52efef2..99a487e 100644 --- a/deps/rabbit/src/gatherer.erl +++ b/deps/rabbit/src/gatherer.erl @@ -56,6 +56,7 @@ start_link() -> -spec stop(pid()) -> 'ok'. stop(Pid) -> + unlink(Pid), gen_server2:call(Pid, stop, infinity). -spec fork(pid()) -> 'ok'. diff --git a/deps/rabbit/src/rabbit.erl b/deps/rabbit/src/rabbit.erl index 721078d..e11e288 100644 --- a/deps/rabbit/src/rabbit.erl +++ b/deps/rabbit/src/rabbit.erl @@ -33,17 +33,13 @@ -export([product_info/0, product_name/0, product_version/0, + base_product_name/0, + base_product_version/0, motd_file/0, motd/0]). --export([log_locations/0, config_files/0, decrypt_config/2]). %% for testing and mgmt-agent +-export([log_locations/0, config_files/0]). %% for testing and mgmt-agent -export([is_booted/1, is_booted/0, is_booting/1, is_booting/0]). --ifdef(TEST). - --export([start_logger/0]). - --endif. - %%--------------------------------------------------------------------------- %% Boot steps. -export([maybe_insert_default_data/0, boot_delegate/0, recover/0]). @@ -99,12 +95,27 @@ {enables, worker_pool}]}). -rabbit_boot_step({worker_pool, - [{description, "worker pool"}, + [{description, "default worker pool"}, {mfa, {rabbit_sup, start_supervisor_child, [worker_pool_sup]}}, {requires, pre_boot}, {enables, external_infrastructure}]}). +-rabbit_boot_step({definition_import_worker_pool, + [{description, "dedicated worker pool for definition import"}, + {mfa, {rabbit_definitions, boot, []}}, + {requires, external_infrastructure}, + {enables, load_core_definitions}]}). + +%% We want to A) make sure we apply definitions before the node begins serving +%% traffic and B) in fact do it before empty_db_check (so the defaults will not +%% get created if we don't need 'em). +-rabbit_boot_step({load_core_definitions, + [{description, "imports definitions"}, + {mfa, {rabbit_definitions, maybe_load_definitions, []}}, + {requires, [recovery, definition_import_worker_pool]}, + {enables, empty_db_check}]}). + -rabbit_boot_step({external_infrastructure, [{description, "external infrastructure ready"}]}). @@ -192,15 +203,6 @@ {requires, [core_initialized]}, {enables, routing_ready}]}). -%% We want to A) make sure we apply definitions before the node begins serving -%% traffic and B) in fact do it before empty_db_check (so the defaults will not -%% get created if we don't need 'em). --rabbit_boot_step({load_core_definitions, - [{description, "imports definitions"}, - {mfa, {rabbit_definitions, maybe_load_definitions, []}}, - {requires, recovery}, - {enables, empty_db_check}]}). - -rabbit_boot_step({empty_db_check, [{description, "empty DB check"}, {mfa, {?MODULE, maybe_insert_default_data, []}}, @@ -246,11 +248,6 @@ {requires, pre_flight} ]}). --rabbit_boot_step({os_signal_handler, - [{description, "registers an OS signal handler"}, - {mfa, {rabbit_os_signal_handler, boot, []}}, - {requires, pre_flight}]}). - -rabbit_boot_step({direct_client, [{description, "direct client"}, {mfa, {rabbit_direct, boot, []}}, @@ -272,7 +269,7 @@ -include("rabbit_framing.hrl"). -include("rabbit.hrl"). --define(APPS, [os_mon, mnesia, rabbit_common, ra, sysmon_handler, rabbit]). +-define(APPS, [os_mon, mnesia, rabbit_common, rabbitmq_prelaunch, ra, sysmon_handler, rabbit]). -define(ASYNC_THREADS_WARNING_THRESHOLD, 8). @@ -292,225 +289,179 @@ %%---------------------------------------------------------------------------- -ensure_application_loaded() -> - %% We end up looking at the rabbit app's env for HiPE and log - %% handling, so it needs to be loaded. But during the tests, it - %% may end up getting loaded twice, so guard against that. - case application:load(rabbit) of - ok -> ok; - {error, {already_loaded, rabbit}} -> ok - end. - -spec start() -> 'ok'. start() -> - start_it(fun() -> - %% We do not want to upgrade mnesia after just - %% restarting the app. - ok = ensure_application_loaded(), - HipeResult = rabbit_hipe:maybe_hipe_compile(), - ok = start_logger(), - rabbit_hipe:log_hipe_result(HipeResult), - Apps = load_all_apps(), - rabbit_feature_flags:initialize_registry(), - rabbit_node_monitor:prepare_cluster_status_files(), - rabbit_mnesia:check_cluster_consistency(), - broker_start(Apps) - end). + %% start() vs. boot(): we want to throw an error in start(). + start_it(temporary). -spec boot() -> 'ok'. boot() -> - start_it(fun() -> - ensure_config(), - ok = ensure_application_loaded(), - HipeResult = rabbit_hipe:maybe_hipe_compile(), - ok = start_logger(), - rabbit_hipe:log_hipe_result(HipeResult), - Apps = load_all_apps(), - rabbit_feature_flags:initialize_registry(), - rabbit_node_monitor:prepare_cluster_status_files(), - ok = rabbit_upgrade:maybe_upgrade_mnesia(), - %% It's important that the consistency check happens after - %% the upgrade, since if we are a secondary node the - %% primary node will have forgotten us - rabbit_mnesia:check_cluster_consistency(), - broker_start(Apps) - end). - -ensure_config() -> - case rabbit_config:validate_config_files() of - ok -> ok; - {error, {ErrFmt, ErrArgs}} -> - throw({error, {check_config_file, ErrFmt, ErrArgs}}) + %% start() vs. boot(): we want the node to exit in boot(). Because + %% applications are started with `transient`, any error during their + %% startup will abort the node. + start_it(transient). + +run_prelaunch_second_phase() -> + %% Finish the prelaunch phase started by the `rabbitmq_prelaunch` + %% application. + %% + %% The first phase was handled by the `rabbitmq_prelaunch` + %% application. It was started in one of the following way: + %% - from an Erlang release boot script; + %% - from the rabbit:boot/0 or rabbit:start/0 functions. + %% + %% The `rabbitmq_prelaunch` application creates the context map from + %% the environment and the configuration files early during Erlang + %% VM startup. Once it is done, all application environments are + %% configured (in particular `mnesia` and `ra`). + %% + %% This second phase depends on other modules & facilities of + %% RabbitMQ core. That's why we need to run it now, from the + %% `rabbit` application start function. + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. See `rabbit_prelaunch` for an explanation. + %% + %% This is the second assertion, just in case Mnesia is started + %% between the two prelaunch phases. + rabbit_prelaunch:assert_mnesia_is_stopped(), + + %% Get the context created by `rabbitmq_prelaunch` then proceed + %% with all steps in this phase. + #{initial_pass := IsInitialPass} = + Context = rabbit_prelaunch:get_context(), + + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [2/2] (initial pass) =="); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [2/2] =="), + ok end, - case rabbit_config:prepare_and_use_config() of - {error, {generation_error, Error}} -> - throw({error, {generate_config_file, Error}}); - ok -> ok - end. -load_all_apps() -> - Plugins = rabbit_plugins:setup(), - ToBeLoaded = Plugins ++ ?APPS, - app_utils:load_applications(ToBeLoaded), - ToBeLoaded. - -broker_start(Apps) -> - start_loaded_apps(Apps), - maybe_sd_notify(), - ok = rabbit_lager:broker_is_started(), - ok = log_broker_started(rabbit_plugins:strictly_plugins(rabbit_plugins:active())). - -%% Try to send systemd ready notification if it makes sense in the -%% current environment. standard_error is used intentionally in all -%% logging statements, so all this messages will end in systemd -%% journal. -maybe_sd_notify() -> - case sd_notify_ready() of + %% 1. Enabled plugins file. + ok = rabbit_prelaunch_enabled_plugins_file:setup(Context), + + %% 2. Feature flags registry. + ok = rabbit_prelaunch_feature_flags:setup(Context), + + %% 3. Logging. + ok = rabbit_prelaunch_logging:setup(Context), + + case IsInitialPass of + true -> + %% 4. HiPE compilation. + ok = rabbit_prelaunch_hipe:setup(Context); false -> - io:format(standard_error, "systemd READY notification failed, beware of timeouts~n", []); - _ -> ok - end. + end, -sd_notify_ready() -> - case {os:type(), os:getenv("NOTIFY_SOCKET")} of - {{win32, _}, _} -> - true; - {_, [_|_]} -> %% Non-empty NOTIFY_SOCKET, give it a try - sd_notify_legacy() orelse sd_notify_socat(); - _ -> - true - end. + %% 5. Clustering. + ok = rabbit_prelaunch_cluster:setup(Context), -sd_notify_data() -> - "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". - -sd_notify_legacy() -> - case code:load_file(sd_notify) of - {module, sd_notify} -> - SDNotify = sd_notify, - SDNotify:sd_notify(0, sd_notify_data()), - true; - {error, _} -> - false - end. + %% Start Mnesia now that everything is ready. + rabbit_log_prelaunch:debug("Starting Mnesia"), + ok = mnesia:start(), -%% socat(1) is the most portable way the sd_notify could be -%% implemented in erlang, without introducing some NIF. Currently the -%% following issues prevent us from implementing it in a more -%% reasonable way: -%% - systemd-notify(1) is unstable for non-root users -%% - erlang doesn't support unix domain sockets. -%% -%% Some details on how we ended with such a solution: -%% https://github.com/rabbitmq/rabbitmq-server/issues/664 -sd_notify_socat() -> - case sd_current_unit() of - {ok, Unit} -> - io:format(standard_error, "systemd unit for activation check: \"~s\"~n", [Unit]), - sd_notify_socat(Unit); - _ -> - false - end. + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch DONE =="), -socat_socket_arg("@" ++ AbstractUnixSocket) -> - "abstract-sendto:" ++ AbstractUnixSocket; -socat_socket_arg(UnixSocket) -> - "unix-sendto:" ++ UnixSocket. - -sd_open_port() -> - open_port( - {spawn_executable, os:find_executable("socat")}, - [{args, [socat_socket_arg(os:getenv("NOTIFY_SOCKET")), "STDIO"]}, - use_stdio, out]). - -sd_notify_socat(Unit) -> - try sd_open_port() of - Port -> - Port ! {self(), {command, sd_notify_data()}}, - Result = sd_wait_activation(Port, Unit), - port_close(Port), - Result - catch - Class:Reason -> - io:format(standard_error, "Failed to start socat ~p:~p~n", [Class, Reason]), - false - end. + case IsInitialPass of + true -> rabbit_prelaunch:initial_pass_finished(); + false -> ok + end, + ok. -sd_current_unit() -> - CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), - case catch re:run(CmdOut, "([-.@0-9a-zA-Z]+)", [unicode, {capture, all_but_first, list}]) of - {'EXIT', _} -> - error; - {match, [Unit]} -> - {ok, Unit}; - _ -> - error +start_it(StartType) -> + case spawn_boot_marker() of + {ok, Marker} -> + T0 = erlang:timestamp(), + rabbit_log:info("RabbitMQ is asked to start...", []), + try + {ok, _} = application:ensure_all_started(rabbitmq_prelaunch, + StartType), + {ok, _} = application:ensure_all_started(rabbit, + StartType), + ok = wait_for_ready_or_stopped(), + + T1 = erlang:timestamp(), + rabbit_log_prelaunch:debug( + "Time to start RabbitMQ: ~p µs", + [timer:now_diff(T1, T0)]), + stop_boot_marker(Marker), + ok + catch + error:{badmatch, Error}:_ -> + stop_boot_marker(Marker), + case StartType of + temporary -> throw(Error); + _ -> exit(Error) + end + end; + {already_booting, Marker} -> + stop_boot_marker(Marker), + ok end. -sd_wait_activation(Port, Unit) -> - case os:find_executable("systemctl") of - false -> - io:format(standard_error, "'systemctl' unavailable, falling back to sleep~n", []), - timer:sleep(5000), - true; +wait_for_ready_or_stopped() -> + ok = rabbit_boot_state:wait_for(ready, ?BOOT_FINISH_TIMEOUT), + case rabbit_boot_state:get() of + ready -> + ok; _ -> - sd_wait_activation(Port, Unit, 10) + ok = rabbit_boot_state:wait_for(stopped, ?BOOT_FINISH_TIMEOUT), + rabbit_prelaunch:get_stop_reason() end. -sd_wait_activation(_, _, 0) -> - io:format(standard_error, "Service still in 'activating' state, bailing out~n", []), - false; -sd_wait_activation(Port, Unit, AttemptsLeft) -> - case os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'") of - "ActiveState=activating\n" -> - timer:sleep(1000), - sd_wait_activation(Port, Unit, AttemptsLeft - 1); - "ActiveState=" ++ _ -> - true; - _ = Err-> - io:format(standard_error, "Unexpected status from systemd ~p~n", [Err]), - false - end. - -start_it(StartFun) -> +spawn_boot_marker() -> + %% Compatibility with older RabbitMQ versions: + %% We register a process doing nothing to indicate that RabbitMQ is + %% booting. This is checked by `is_booting(Node)` on a remote node. Marker = spawn_link(fun() -> receive stop -> ok end end), case catch register(rabbit_boot, Marker) of - true -> try - case is_running() of - true -> ok; - false -> StartFun() - end - catch Class:Reason -> - boot_error(Class, Reason) - after - unlink(Marker), - Marker ! stop, - %% give the error loggers some time to catch up - timer:sleep(100) - end; - _ -> unlink(Marker), - Marker ! stop + true -> {ok, Marker}; + _ -> {already_booting, Marker} end. +stop_boot_marker(Marker) -> + unlink(Marker), + Marker ! stop, + ok. + -spec stop() -> 'ok'. stop() -> - ProductName = product_name(), - case whereis(rabbit_boot) of - undefined -> ok; - _ -> - rabbit_log:info("~s hasn't finished starting yet. Waiting for startup to finish before stopping...", [ProductName]), - ok = wait_for_boot_to_finish(node()) - end, - rabbit_log:info("~s is asked to stop...~n", [ProductName]), - Apps = ?APPS ++ rabbit_plugins:active(), + case wait_for_ready_or_stopped() of + ok -> + case rabbit_boot_state:get() of + ready -> + Product = product_name(), + rabbit_log:info("~s is asked to stop...", [Product]), + do_stop(), + rabbit_log:info( + "Successfully stopped ~s and its dependencies", + [Product]), + ok; + stopped -> + ok + end; + _ -> + ok + end. + +do_stop() -> + Apps0 = ?APPS ++ rabbit_plugins:active(), + %% We ensure that Mnesia is stopped last (or more exactly, after rabbit). + Apps1 = app_utils:app_dependency_order(Apps0, true) -- [mnesia], + Apps = [mnesia | Apps1], %% this will also perform unregistration with the peer discovery backend %% as needed - stop_apps(app_utils:app_dependency_order(Apps, true)), - rabbit_log:info("Successfully stopped ~s and its dependencies~n", [ProductName]). + stop_apps(Apps). -spec stop_and_halt() -> no_return(). @@ -549,166 +500,26 @@ start_apps(Apps) -> -spec start_apps([app_name()], #{app_name() => restart_type()}) -> 'ok'. +%% TODO: start_apps/2 and is now specific to plugins. This function +%% should be moved over `rabbit_plugins`, along with stop_apps/1, once +%% the latter stops using app_utils as well. + start_apps(Apps, RestartTypes) -> + false = lists:member(rabbit, Apps), %% Assertion. + %% We need to load all applications involved in order to be able to + %% find new feature flags. app_utils:load_applications(Apps), ok = rabbit_feature_flags:refresh_feature_flags_after_app_load(Apps), - start_loaded_apps(Apps, RestartTypes). - -start_loaded_apps(Apps) -> - start_loaded_apps(Apps, #{}). - -start_loaded_apps(Apps, RestartTypes) -> - ensure_sysmon_handler_app_config(), - %% make Ra use a custom logger that dispatches to lager instead of the - %% default OTP logger - application:set_env(ra, logger_module, rabbit_log_ra_shim), - %% use a larger segments size for queues - case application:get_env(ra, segment_max_entries) of - undefined -> - application:set_env(ra, segment_max_entries, 32768); - _ -> - ok - end, - case application:get_env(ra, wal_max_size_bytes) of - undefined -> - application:set_env(ra, wal_max_size_bytes, 536870912); %% 5 * 2 ^ 20 - _ -> - ok - end, - ConfigEntryDecoder = case application:get_env(rabbit, config_entry_decoder) of - undefined -> - []; - {ok, Val} -> - Val - end, - PassPhrase = case proplists:get_value(passphrase, ConfigEntryDecoder) of - prompt -> - IoDevice = get_input_iodevice(), - io:setopts(IoDevice, [{echo, false}]), - PP = lists:droplast(io:get_line(IoDevice, - "\nPlease enter the passphrase to unlock encrypted " - "configuration entries.\n\nPassphrase: ")), - io:setopts(IoDevice, [{echo, true}]), - io:format(IoDevice, "~n", []), - PP; - {file, Filename} -> - {ok, File} = file:read_file(Filename), - [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), - PP; - PP -> - PP - end, - Algo = { - proplists:get_value(cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), - proplists:get_value(hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), - proplists:get_value(iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), - PassPhrase - }, - decrypt_config(Apps, Algo), - OrderedApps = app_utils:app_dependency_order(Apps, false), - case lists:member(rabbit, Apps) of - false -> rabbit_boot_steps:run_boot_steps(Apps); %% plugin activation - true -> ok %% will run during start of rabbit app - end, - ok = app_utils:start_applications(OrderedApps, - handle_app_error(could_not_start), - RestartTypes). - -%% rabbitmq/rabbitmq-server#952 -%% This function is to be called after configuration has been optionally generated -%% and the sysmon_handler application loaded, but not started. It will ensure that -%% sane defaults are used for configuration settings that haven't been set by the -%% user -ensure_sysmon_handler_app_config() -> - Defaults = [ - {process_limit, 100}, - {port_limit, 100}, - {gc_ms_limit, 0}, - {schedule_ms_limit, 0}, - {heap_word_limit, 0}, - {busy_port, false}, - {busy_dist_port, true} - ], - lists:foreach(fun({K, V}) -> - case application:get_env(sysmon_handler, K) of - undefined -> - application:set_env(sysmon_handler, K, V); - _ -> - ok - end - end, Defaults). - -%% This function retrieves the correct IoDevice for requesting -%% input. The problem with using the default IoDevice is that -%% the Erlang shell prevents us from getting the input. -%% -%% Instead we therefore look for the io process used by the -%% shell and if it can't be found (because the shell is not -%% started e.g with -noshell) we use the 'user' process. -%% -%% This function will not work when either -oldshell or -noinput -%% options are passed to erl. -get_input_iodevice() -> - case whereis(user) of - undefined -> user; - User -> - case group:interfaces(User) of - [] -> - user; - [{user_drv, Drv}] -> - case user_drv:interfaces(Drv) of - [] -> - user; - [{current_group, IoDevice}] -> - IoDevice - end - end - end. - -decrypt_config([], _) -> - ok; -decrypt_config([App|Apps], Algo) -> - decrypt_app(App, application:get_all_env(App), Algo), - decrypt_config(Apps, Algo). - -decrypt_app(_, [], _) -> - ok; -decrypt_app(App, [{Key, Value}|Tail], Algo) -> - try begin - case decrypt(Value, Algo) of - Value -> - ok; - NewValue -> - application:set_env(App, Key, NewValue) - end - end - catch - exit:{bad_configuration, config_entry_decoder} -> - exit({bad_configuration, config_entry_decoder}); - _:Msg -> - rabbit_log:info("Error while decrypting key '~p'. Please check encrypted value, passphrase, and encryption configuration~n", [Key]), - exit({decryption_error, {key, Key}, Msg}) - end, - decrypt_app(App, Tail, Algo). - -decrypt({encrypted, _}, {_, _, _, undefined}) -> - exit({bad_configuration, config_entry_decoder}); -decrypt({encrypted, EncValue}, {Cipher, Hash, Iterations, Password}) -> - rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, Password, EncValue); -decrypt(List, Algo) when is_list(List) -> - decrypt_list(List, Algo, []); -decrypt(Value, _) -> - Value. - -%% We make no distinction between strings and other lists. -%% When we receive a string, we loop through each element -%% and ultimately return the string unmodified, as intended. -decrypt_list([], _, Acc) -> - lists:reverse(Acc); -decrypt_list([{Key, Value}|Tail], Algo, Acc) when Key =/= encrypted -> - decrypt_list(Tail, Algo, [{Key, decrypt(Value, Algo)}|Acc]); -decrypt_list([Value|Tail], Algo, Acc) -> - decrypt_list(Tail, Algo, [decrypt(Value, Algo)|Acc]). + rabbit_prelaunch_conf:decrypt_config(Apps), + lists:foreach( + fun(App) -> + RestartType = maps:get(App, RestartTypes, temporary), + ok = rabbit_boot_steps:run_boot_steps([App]), + case application:ensure_all_started(App, RestartType) of + {ok, _} -> ok; + {error, Reason} -> throw({could_not_start, App, Reason}) + end + end, Apps). -spec stop_apps([app_name()]) -> 'ok'. @@ -738,11 +549,15 @@ handle_app_error(Term) -> is_booting() -> is_booting(node()). +is_booting(Node) when Node =:= node() -> + case rabbit_boot_state:get() of + booting -> true; + _ -> false + end; is_booting(Node) -> - case rpc:call(Node, erlang, whereis, [rabbit_boot]) of + case rpc:call(Node, rabbit, is_booting, []) of {badrpc, _} = Err -> Err; - undefined -> false; - P when is_pid(P) -> true + Ret -> Ret end. @@ -808,9 +623,6 @@ do_wait_for_boot_to_start(Node, IterationsLeft) -> ok end. -wait_for_boot_to_finish(Node) -> - wait_for_boot_to_finish(Node, false, ?BOOT_FINISH_TIMEOUT). - wait_for_boot_to_finish(Node, PrintProgressReports) -> wait_for_boot_to_finish(Node, PrintProgressReports, ?BOOT_FINISH_TIMEOUT). @@ -860,7 +672,7 @@ maybe_print_boot_progress(true, IterationsLeft) -> {memory, any()}]. status() -> - Version = product_version(), + Version = base_product_version(), S1 = [{pid, list_to_integer(os:getpid())}, %% The timeout value used is twice that of gen_server:call/2. {running_applications, rabbit_misc:which_applications()}, @@ -907,7 +719,16 @@ status() -> [] end, S7 = [{totals, Totals}], - S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7. + S8 = lists:filter( + fun + ({product_base_name, _}) -> true; + ({product_base_version, _}) -> true; + ({product_name, _}) -> true; + ({product_version, _}) -> true; + (_) -> false + end, + maps:to_list(product_info())), + S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7 ++ S8. alarms() -> Alarms = rabbit_misc:with_exit_handler(rabbit_misc:const([]), @@ -930,17 +751,22 @@ total_queue_count() -> end, 0, rabbit_vhost:list_names()). -%% TODO this only determines if the rabbit application has started, -%% not if it is running, never mind plugins. It would be nice to have -%% more nuance here. - -spec is_running() -> boolean(). is_running() -> is_running(node()). -spec is_running(node()) -> boolean(). -is_running(Node) -> rabbit_nodes:is_process_running(Node, rabbit). +is_running(Node) when Node =:= node() -> + case rabbit_boot_state:get() of + ready -> true; + _ -> false + end; +is_running(Node) -> + case rpc:call(Node, rabbit, is_running, []) of + true -> true; + _ -> false + end. is_booted() -> is_booted(node()). @@ -977,10 +803,13 @@ rotate_logs() -> %% lager_file_backend. We should use a proper API, when %% it's added to Lager. %% - %% FIXME: This message is asynchronous, therefore this - %% entire call is asynchronous: at the end of this - %% function, we can't guaranty the rotation is completed. - [SinkName ! {rotate, FileName} || FileName <- FileNames], + %% FIXME: This call is effectively asynchronous: at the + %% end of this function, we can't guaranty the rotation + %% is completed. + [ok = gen_event:call(SinkName, + {lager_file_backend, FileName}, + rotate, + infinity) || FileName <- FileNames], lager:log(SinkName, info, self(), "Log file re-opened after forced rotation", []), Acc @@ -996,106 +825,157 @@ rotate_logs() -> {'ok',pid()}. start(normal, []) -> - case erts_version_check() of - ok -> - rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n ~s~n ~s~n", - [product_name(), product_version(), rabbit_misc:otp_release(), - ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]), - log_motd(), - {ok, SupPid} = rabbit_sup:start_link(), - true = register(rabbit, self()), - print_banner(), - log_banner(), - warn_if_kernel_config_dubious(), - warn_if_disc_io_options_dubious(), - rabbit_boot_steps:run_boot_steps(), - {ok, SupPid}; - {error, {erlang_version_too_old, - {found, OTPRel, ERTSVer}, - {required, ?OTP_MINIMUM, ?ERTS_MINIMUM}}} -> - Msg = "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " - "minimum required version is ~s (erts ~s)", - Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], - rabbit_log:error(Msg, Args), - %% also print to stderr to make this more visible - io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), - {error, {erlang_version_too_old, rabbit_misc:format("Erlang ~s or later is required, started on ~s", [?OTP_MINIMUM, OTPRel])}}; - Error -> + %% Reset boot state and clear the stop reason again (it was already + %% made in rabbitmq_prelaunch). + %% + %% This is important if the previous startup attempt failed after + %% rabbitmq_prelaunch was started and the application is still + %% running. + rabbit_boot_state:set(booting), + rabbit_prelaunch:clear_stop_reason(), + + try + run_prelaunch_second_phase(), + + ProductInfo = product_info(), + case ProductInfo of + #{product_overridden := true, + product_base_name := BaseName, + product_base_version := BaseVersion} -> + rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n Based on ~s ~s~n ~s~n ~s~n", + [product_name(), product_version(), rabbit_misc:otp_release(), + BaseName, BaseVersion, + ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]); + _ -> + rabbit_log:info("~n Starting ~s ~s on Erlang ~s~n ~s~n ~s~n", + [product_name(), product_version(), rabbit_misc:otp_release(), + ?COPYRIGHT_MESSAGE, ?INFORMATION_MESSAGE]) + end, + log_motd(), + {ok, SupPid} = rabbit_sup:start_link(), + + %% Compatibility with older RabbitMQ versions + required by + %% rabbit_node_monitor:notify_node_up/0: + %% + %% We register the app process under the name `rabbit`. This is + %% checked by `is_running(Node)` on a remote node. The process + %% is also monitord by rabbit_node_monitor. + %% + %% The process name must be registered *before* running the boot + %% steps: that's when rabbit_node_monitor will set the process + %% monitor up. + %% + %% Note that plugins were not taken care of at this point + %% either. + rabbit_log_prelaunch:debug( + "Register `rabbit` process (~p) for rabbit_node_monitor", + [self()]), + true = register(rabbit, self()), + + print_banner(), + log_banner(), + warn_if_kernel_config_dubious(), + warn_if_disc_io_options_dubious(), + %% We run `rabbit` boot steps only for now. Plugins boot steps + %% will be executed as part of the postlaunch phase after they + %% are started. + rabbit_boot_steps:run_boot_steps([rabbit]), + run_postlaunch_phase(), + {ok, SupPid} + catch + throw:{error, _} = Error -> + mnesia:stop(), + rabbit_prelaunch_errors:log_error(Error), + rabbit_prelaunch:set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + mnesia:stop(), + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + rabbit_prelaunch:set_stop_reason(Error), + rabbit_boot_state:set(stopped), Error end. +run_postlaunch_phase() -> + spawn(fun() -> do_run_postlaunch_phase() end). + +do_run_postlaunch_phase() -> + %% Once RabbitMQ itself is started, we need to run a few more steps, + %% in particular start plugins. + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Postlaunch phase =="), + + try + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Plugins =="), + + rabbit_log_prelaunch:debug("Setting plugins up"), + %% `Plugins` contains all the enabled plugins, plus their + %% dependencies. The order is important: dependencies appear + %% before plugin which depend on them. + Plugins = rabbit_plugins:setup(), + rabbit_log_prelaunch:debug( + "Starting the following plugins: ~p", [Plugins]), + %% We can load all plugins and refresh their feature flags at + %% once, because it does not involve running code from the + %% plugins. + app_utils:load_applications(Plugins), + ok = rabbit_feature_flags:refresh_feature_flags_after_app_load( + Plugins), + %% However, we want to run their boot steps and actually start + %% them one by one, to ensure a dependency is fully started + %% before a plugin which depends on it gets a chance to start. + lists:foreach( + fun(Plugin) -> + ok = rabbit_boot_steps:run_boot_steps([Plugin]), + case application:ensure_all_started(Plugin) of + {ok, _} -> ok; + Error -> throw(Error) + end + end, Plugins), + + rabbit_log_prelaunch:debug("Marking ~s as running", [product_name()]), + rabbit_boot_state:set(ready), + + ok = rabbit_lager:broker_is_started(), + ok = log_broker_started( + rabbit_plugins:strictly_plugins(rabbit_plugins:active())) + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + rabbit_prelaunch:set_stop_reason(Error), + do_stop(); + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + rabbit_prelaunch:set_stop_reason(Error), + do_stop() + end. + prep_stop(State) -> - rabbit_peer_discovery:maybe_unregister(), - State. + rabbit_boot_state:set(stopping), + rabbit_peer_discovery:maybe_unregister(), + State. -spec stop(_) -> 'ok'. -stop(_State) -> +stop(State) -> ok = rabbit_alarm:stop(), ok = case rabbit_mnesia:is_clustered() of true -> ok; false -> rabbit_table:clear_ram_only_tables() end, + case State of + [] -> rabbit_prelaunch:set_stop_reason(normal); + _ -> rabbit_prelaunch:set_stop_reason(State) + end, + rabbit_boot_state:set(stopped), ok. --spec boot_error(term(), not_available | [tuple()]) -> no_return(). - -boot_error(_, {could_not_start, rabbit, {{timeout_waiting_for_tables, _}, _}}) -> - AllNodes = rabbit_mnesia:cluster_nodes(all), - Suffix = "~nBACKGROUND~n==========~n~n" - "This cluster node was shut down while other nodes were still running.~n" - "To avoid losing data, you should start the other nodes first, then~n" - "start this one. To force this node to start, first invoke~n" - "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" - "cluster nodes after this one was shut down may be lost.~n", - {Err, Nodes} = - case AllNodes -- [node()] of - [] -> {"Timeout contacting cluster nodes. Since RabbitMQ was" - " shut down forcefully~nit cannot determine which nodes" - " are timing out.~n" ++ Suffix, []}; - Ns -> {rabbit_misc:format( - "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, [Ns]), - Ns} - end, - log_boot_error_and_exit( - timeout_waiting_for_tables, - "~n" ++ Err ++ rabbit_nodes:diagnostics(Nodes), []); -boot_error(_, {error, {cannot_log_to_file, unknown, Reason}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to initialised logger: ~p~n", - [Reason]); -boot_error(_, {error, {cannot_log_to_file, LogFile, - {cannot_create_parent_dirs, _, Reason}}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to create parent directory for log file at '~s', reason: ~p~n", - [LogFile, Reason]); -boot_error(_, {error, {cannot_log_to_file, LogFile, Reason}}) -> - log_boot_error_and_exit(could_not_initialise_logger, - "failed to open log file at '~s', reason: ~p~n", - [LogFile, Reason]); -boot_error(_, {error, {generate_config_file, Error}}) -> - log_boot_error_and_exit(generate_config_file, - "~nConfig file generation failed:~n~s" - "In case the setting comes from a plugin, make sure that the plugin is enabled.~n" - "Alternatively remove the setting from the config.~n", - [Error]); -boot_error(Class, Reason) -> - LogLocations = log_locations(), - log_boot_error_and_exit( - Reason, - "~nError description:~s" - "~nLog file(s) (may contain more information):~n" ++ - lists:flatten([" ~s~n" || _ <- lists:seq(1, length(LogLocations))]), - [lager:pr_stacktrace(erlang:get_stacktrace(), {Class, Reason})] ++ - LogLocations). - --spec log_boot_error_and_exit(_, _, _) -> no_return(). -log_boot_error_and_exit(Reason, Format, Args) -> - rabbit_log:error(Format, Args), - io:format(standard_error, "~nBOOT FAILED~n===========~n" ++ Format ++ "~n", Args), - timer:sleep(1000), - exit(Reason). - %%--------------------------------------------------------------------------- %% boot step functions @@ -1155,10 +1035,6 @@ insert_default_data() -> %%--------------------------------------------------------------------------- %% logging -start_logger() -> - rabbit_lager:start_logger(), - ok. - -spec log_locations() -> [rabbit_lager:log_location()]. log_locations() -> rabbit_lager:log_locations(). @@ -1190,25 +1066,29 @@ log_broker_started(Plugins) -> rabbit_log:info(Message), io:format(" completed with ~p plugins.~n", [length(Plugins)]). -erts_version_check() -> - ERTSVer = erlang:system_info(version), - OTPRel = rabbit_misc:otp_release(), - case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of - true when ?ERTS_MINIMUM =/= ERTSVer -> - ok; - true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> - %% When a critical regression or bug is found, a new OTP - %% release can be published without changing the ERTS - %% version. For instance, this is the case with R16B03 and - %% R16B03-1. - %% - %% In this case, we compare the release versions - %% alphabetically. - ok; - _ -> {error, {erlang_version_too_old, - {found, OTPRel, ERTSVer}, - {required, ?OTP_MINIMUM, ?ERTS_MINIMUM}}} - end. +-define(RABBIT_TEXT_LOGO, + "~n ## ## ~s ~s" + "~n ## ##" + "~n ########## ~s" + "~n ###### ##" + "~n ########## ~s"). +-define(FG8_START, "\033[38;5;202m"). +-define(BG8_START, "\033[48;5;202m"). +-define(FG32_START, "\033[38;2;255;102;0m"). +-define(BG32_START, "\033[48;2;255;102;0m"). +-define(C_END, "\033[0m"). +-define(RABBIT_8BITCOLOR_LOGO, + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END " \033[1m" ?FG8_START "~s" ?C_END " ~s" + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END + "~n " ?BG8_START " " ?C_END " ~s" + "~n " ?BG8_START " " ?C_END " " ?BG8_START " " ?C_END + "~n " ?BG8_START " " ?C_END " ~s"). +-define(RABBIT_32BITCOLOR_LOGO, + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END " \033[1m" ?FG32_START "~s" ?C_END " ~s" + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END + "~n " ?BG32_START " " ?C_END " ~s" + "~n " ?BG32_START " " ?C_END " " ?BG32_START " " ?C_END + "~n " ?BG32_START " " ?C_END " ~s"). print_banner() -> Product = product_name(), @@ -1219,6 +1099,19 @@ print_banner() -> (_, []) -> {"", ["(none)"]} end, + Logo = case rabbit_prelaunch:get_context() of + %% We use the colored logo only when running the + %% interactive shell and when colors are supported. + %% + %% Basically it means it will be used on Unix when + %% running "make run-broker" and that's about it. + #{os_type := {unix, darwin}, + interactive_shell := true, + output_supports_colors := true} -> ?RABBIT_8BITCOLOR_LOGO; + #{interactive_shell := true, + output_supports_colors := true} -> ?RABBIT_32BITCOLOR_LOGO; + _ -> ?RABBIT_TEXT_LOGO + end, %% padded list lines {LogFmt, LogLocations} = LineListFormatter("~n ~ts", log_locations()), {CfgFmt, CfgLocations} = LineListFormatter("~n ~ts", config_locations()), @@ -1234,11 +1127,7 @@ print_banner() -> || Line <- Lines], {"~n~ts", [Padded]} end, - io:format("~n ## ## ~s ~s" - "~n ## ##" - "~n ########## ~s" - "~n ###### ##" - "~n ########## ~s" + io:format(Logo ++ "~n" ++ MOTDFormat ++ "~n Doc guides: https://rabbitmq.com/documentation.html" @@ -1410,17 +1299,25 @@ validate_msg_store_io_batch_size_and_credit_disc_bound(CreditDiscBound, -spec product_name() -> string(). product_name() -> - #{name := ProductName} = product_info(), - ProductName. + case product_info() of + #{product_name := ProductName} -> ProductName; + #{product_base_name := BaseName} -> BaseName + end. -spec product_version() -> string(). product_version() -> - #{version := ProductVersion} = product_info(), - ProductVersion. + case product_info() of + #{product_version := ProductVersion} -> ProductVersion; + #{product_base_version := BaseVersion} -> BaseVersion + end. --spec product_info() -> #{name := string(), - version := string()}. +-spec product_info() -> #{product_base_name := string(), + product_base_version := string(), + product_overridden := boolean(), + product_name => string(), + product_version => string(), + otp_release := string()}. product_info() -> PTKey = {?MODULE, product}, @@ -1430,37 +1327,54 @@ product_info() -> persistent_term:get(PTKey) catch error:badarg -> - NameFromEnv = os:getenv("RABBITMQ_PRODUCT_NAME"), - VersionFromEnv = os:getenv("RABBITMQ_PRODUCT_VERSION"), - - Info = - if - NameFromEnv =/= false andalso - VersionFromEnv =/= false -> - #{name => NameFromEnv, - version => VersionFromEnv}; - true -> - Name = case NameFromEnv of - false -> - string_from_app_env( - product_name, - base_product_name()); - _ -> - NameFromEnv - end, - Version = case VersionFromEnv of - false -> - string_from_app_env( - product_version, - base_product_version()); - _ -> - VersionFromEnv - end, - #{name => Name, - version => Version} + BaseName = base_product_name(), + BaseVersion = base_product_version(), + Info0 = #{product_base_name => BaseName, + product_base_version => BaseVersion, + otp_release => rabbit_misc:otp_release()}, + + {NameFromEnv, VersionFromEnv} = + case rabbit_env:get_context() of + #{product_name := NFE, + product_version := VFE} -> {NFE, VFE}; + _ -> {undefined, undefined} end, - persistent_term:put(PTKey, Info), - Info + + Info1 = case NameFromEnv of + undefined -> + NameFromApp = string_from_app_env( + product_name, + undefined), + case NameFromApp of + undefined -> + Info0; + _ -> + Info0#{product_name => NameFromApp, + product_overridden => true} + end; + _ -> + Info0#{product_name => NameFromEnv, + product_overridden => true} + end, + + Info2 = case VersionFromEnv of + undefined -> + VersionFromApp = string_from_app_env( + product_version, + undefined), + case VersionFromApp of + undefined -> + Info1; + _ -> + Info1#{product_version => VersionFromApp, + product_overridden => true} + end; + _ -> + Info1#{product_version => VersionFromEnv, + product_overridden => true} + end, + persistent_term:put(PTKey, Info2), + Info2 end. string_from_app_env(Key, Default) -> @@ -1495,21 +1409,18 @@ motd_file() -> %% 1. The environment variable; %% 2. The `motd_file` configuration parameter; %% 3. The default value. - case os:getenv("RABBITMQ_MOTD_FILE") of - false -> - string_from_app_env(motd_file, default_motd_file()); - Val -> - Val - end. - -default_motd_file() -> - EnabledPluginsFile = rabbit_plugins:enabled_plugins_file(), - ConfigDir = filename:dirname(EnabledPluginsFile), - case os:type() of - {unix, _} -> - filename:join(ConfigDir, "motd"); - {win32, _} -> - filename:join(ConfigDir, "motd.txt") + Context = rabbit_env:get_context(), + case Context of + #{motd_file := File, + var_origins := #{motd_file := environment}} + when File =/= undefined -> + File; + _ -> + Default = case Context of + #{motd_file := File} -> File; + _ -> undefined + end, + string_from_app_env(motd_file, Default) end. motd() -> diff --git a/deps/rabbit/src/rabbit_access_control.erl b/deps/rabbit/src/rabbit_access_control.erl index a619b0b..aa7b91c 100644 --- a/deps/rabbit/src/rabbit_access_control.erl +++ b/deps/rabbit/src/rabbit_access_control.erl @@ -48,21 +48,17 @@ check_user_login(Username, AuthProps) -> %% extra auth properties like MQTT client id are in AuthProps {ok, Modules} = application:get_env(rabbit, auth_backends), R = lists:foldl( - fun ({ModN, ModZs0}, {refused, _, _, _}) -> - ModZs = case ModZs0 of - A when is_atom(A) -> [A]; - L when is_list(L) -> L - end, + fun (rabbit_auth_backend_cache=ModN, {refused, _, _, _}) -> + %% It is possible to specify authn/authz within the cache module settings, + %% so we have to do both auth steps here + %% See this rabbitmq-users discussion: + %% https://groups.google.com/d/topic/rabbitmq-users/ObqM7MQdA3I/discussion + try_authenticate_and_try_authorize(ModN, ModN, Username, AuthProps); + ({ModN, ModZs}, {refused, _, _, _}) -> %% Different modules for authN vs authZ. So authenticate %% with authN module, then if that succeeds do %% passwordless (i.e pre-authenticated) login with authZ. - case try_authenticate(ModN, Username, AuthProps) of - {ok, ModNUser = #auth_user{username = Username2}} -> - rabbit_log:debug("User '~s' authenticated successfully by backend ~s", [Username2, ModN]), - user(ModNUser, try_authorize(ModZs, Username2, AuthProps)); - Else -> - Else - end; + try_authenticate_and_try_authorize(ModN, ModZs, Username, AuthProps); (Mod, {refused, _, _, _}) -> %% Same module for authN and authZ. Just take the result %% it gives us @@ -80,6 +76,19 @@ check_user_login(Username, AuthProps) -> {refused, Username, "No modules checked '~s'", [Username]}, Modules), R. +try_authenticate_and_try_authorize(ModN, ModZs0, Username, AuthProps) -> + ModZs = case ModZs0 of + A when is_atom(A) -> [A]; + L when is_list(L) -> L + end, + case try_authenticate(ModN, Username, AuthProps) of + {ok, ModNUser = #auth_user{username = Username2}} -> + rabbit_log:debug("User '~s' authenticated successfully by backend ~s", [Username2, ModN]), + user(ModNUser, try_authorize(ModZs, Username2, AuthProps)); + Else -> + Else + end. + try_authenticate(Module, Username, AuthProps) -> case Module:user_login_authentication(Username, AuthProps) of {ok, AuthUser} -> {ok, AuthUser}; diff --git a/deps/rabbit/src/rabbit_amqqueue.erl b/deps/rabbit/src/rabbit_amqqueue.erl index f81c368..7fb330e 100644 --- a/deps/rabbit/src/rabbit_amqqueue.erl +++ b/deps/rabbit/src/rabbit_amqqueue.erl @@ -1088,7 +1088,8 @@ list_local_mirrored_classic_names() -> is_local_to_node(amqqueue:get_pid(Q), node()), is_replicated(Q)]. --spec list_local_mirrored_classic_without_synchronised_mirrors() -> [amqqueue:amqqueue()]. +-spec list_local_mirrored_classic_without_synchronised_mirrors() -> + [amqqueue:amqqueue()]. list_local_mirrored_classic_without_synchronised_mirrors() -> [ Q || Q <- list(), amqqueue:get_state(Q) =/= crashed, @@ -1097,7 +1098,8 @@ list_local_mirrored_classic_without_synchronised_mirrors() -> is_replicated(Q), not has_synchronised_mirrors_online(Q)]. --spec list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> [amqqueue:amqqueue()]. +-spec list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> + [#{binary => any()}]. list_local_mirrored_classic_without_synchronised_mirrors_for_cli() -> ClassicQs = list_local_mirrored_classic_without_synchronised_mirrors(), [begin diff --git a/deps/rabbit/src/rabbit_auth_backend_internal.erl b/deps/rabbit/src/rabbit_auth_backend_internal.erl index 3c63e3b..67f360c 100644 --- a/deps/rabbit/src/rabbit_auth_backend_internal.erl +++ b/deps/rabbit/src/rabbit_auth_backend_internal.erl @@ -494,11 +494,7 @@ put_user(User, Version, ActingUser) -> end, UserExists = case rabbit_auth_backend_internal:lookup_user(Username) of - %% expected {error, not_found} -> false; - %% shouldn't normally happen but worth guarding - %% against - {error, _} -> false; _ -> true end, diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl index 1e5e42f..3a4a432 100644 --- a/deps/rabbit/src/rabbit_channel.erl +++ b/deps/rabbit/src/rabbit_channel.erl @@ -122,7 +122,9 @@ %% Message content size limit max_message_size, consumer_timeout, - authz_context + authz_context, + %% defines how ofter gc will be executed + writer_gc_threshold }). -record(ch, {cfg :: #conf{}, @@ -169,9 +171,7 @@ delivery_flow, interceptor_state, queue_states, - tick_timer, - %% defines how ofter gc will be executed - writer_gc_threshold + tick_timer }). -define(QUEUE, lqueue). @@ -527,7 +527,8 @@ init([Channel, ReaderPid, WriterPid, ConnPid, ConnName, Protocol, User, VHost, consumer_prefetch = Prefetch, max_message_size = MaxMessageSize, consumer_timeout = ConsumerTimeout, - authz_context = OptionalVariables + authz_context = OptionalVariables, + writer_gc_threshold = GCThreshold }, limiter = Limiter, tx = none, @@ -546,8 +547,7 @@ init([Channel, ReaderPid, WriterPid, ConnPid, ConnName, Protocol, User, VHost, reply_consumer = none, delivery_flow = Flow, interceptor_state = undefined, - queue_states = #{}, - writer_gc_threshold = GCThreshold + queue_states = #{} }, State1 = State#ch{ interceptor_state = rabbit_channel_interceptor:init(State)}, @@ -1309,12 +1309,12 @@ handle_method(#'basic.publish'{exchange = ExchangeNameBin, user = #user{username = Username} = User, trace_state = TraceState, max_message_size = MaxMessageSize, - authz_context = AuthzContext + authz_context = AuthzContext, + writer_gc_threshold = GCThreshold }, tx = Tx, confirm_enabled = ConfirmEnabled, - delivery_flow = Flow, - writer_gc_threshold = GCThreshold + delivery_flow = Flow }) -> check_msg_size(Content, MaxMessageSize, GCThreshold), ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin), @@ -2693,9 +2693,9 @@ handle_deliver(ConsumerTag, AckRequired, #basic_message{exchange_name = ExchangeName, routing_keys = [RoutingKey | _CcRoutes], content = Content}}, - State = #ch{cfg = #conf{writer_pid = WriterPid}, - next_tag = DeliveryTag, - writer_gc_threshold = GCThreshold}) -> + State = #ch{cfg = #conf{writer_pid = WriterPid, + writer_gc_threshold = GCThreshold}, + next_tag = DeliveryTag}) -> Deliver = #'basic.deliver'{consumer_tag = ConsumerTag, delivery_tag = DeliveryTag, redelivered = Redelivered, diff --git a/deps/rabbit/src/rabbit_config.erl b/deps/rabbit/src/rabbit_config.erl index 6a2cc5c..1198035 100644 --- a/deps/rabbit/src/rabbit_config.erl +++ b/deps/rabbit/src/rabbit_config.erl @@ -1,187 +1,30 @@ -module(rabbit_config). -export([ - generate_config_file/5, - prepare_and_use_config/0, - prepare_config/1, - update_app_config/1, - schema_dir/0, config_files/0, - get_advanced_config/0, - validate_config_files/0 + get_advanced_config/0 ]). +-export([schema_dir/0]). +-deprecated([{schema_dir, 0, eventually}]). + -export_type([config_location/0]). -type config_location() :: string(). -prepare_and_use_config() -> - case legacy_erlang_term_config_used() of - true -> - %% Use .config file - ok; - false -> - case prepare_config(get_confs()) of - ok -> - %% No .conf to generate from - ok; - {ok, GeneratedConfigFile} -> - %% Generated config file - update_app_config(GeneratedConfigFile); - {error, Err} -> - {error, Err} - end - end. - -%% we support both the classic Erlang term -%% config file (rabbitmq.config) as well as rabbitmq.conf -legacy_erlang_term_config_used() -> - case init:get_argument(config) of - error -> false; - {ok, [Config | _]} -> - ConfigFile = Config ++ ".config", - rabbit_file:is_file(ConfigFile) - andalso - get_advanced_config() == none - end. - get_confs() -> - case init:get_argument(conf) of - {ok, Confs} -> [ filename:rootname(Conf, ".conf") ++ ".conf" - || Conf <- Confs ]; - _ -> [] - end. - -prepare_config(Confs) -> - case {init:get_argument(conf_dir), init:get_argument(conf_script_dir)} of - {{ok, ConfDir}, {ok, ScriptDir}} -> - ConfFiles = [Conf || Conf <- Confs, - rabbit_file:is_file(Conf)], - case ConfFiles of - [] -> ok; - _ -> - case generate_config_file(ConfFiles, ConfDir, ScriptDir) of - {ok, GeneratedConfigFile} -> - {ok, GeneratedConfigFile}; - {error, Reason} -> - {error, Reason} - end - end; - _ -> ok - end. - -update_app_config(ConfigFile) -> - RunningApps = [ App || {App, _, _} <- application:which_applications() ], - LoadedApps = [ App || {App, _, _} <- application:loaded_applications() ], - {ok, [Config]} = file:consult(ConfigFile), - %% For application config to be updated, applications should - %% be unloaded first. - %% If an application is already running, print an error. - lists:foreach(fun({App, AppConfig}) -> - case lists:member(App, RunningApps) of - true -> - maybe_print_warning_for_running_app(App, AppConfig); - false -> - case lists:member(App, LoadedApps) of - true -> application:unload(App); - false -> ok - end - end - end, - Config), - maybe_set_net_ticktime(proplists:get_value(kernel, Config)), - ok = application_controller:change_application_data([], [ConfigFile]), - %% Make sure to load all the applications we're unloaded - lists:foreach(fun(App) -> application:load(App) end, LoadedApps), - ok. - -maybe_print_warning_for_running_app(kernel, Config) -> - ConfigWithoutSupportedEntry = proplists:delete(net_ticktime, Config), - case length(ConfigWithoutSupportedEntry) > 0 of - true -> io:format(standard_error, - "~nUnable to update config for app ~p from a .conf file." - " The app is already running. Use advanced.config instead.~n", [kernel]); - false -> ok - end; -maybe_print_warning_for_running_app(App, _Config) -> - io:format(standard_error, - "~nUnable to update config for app ~p from a .conf file: " - " The app is already running.~n", - [App]). - -maybe_set_net_ticktime(undefined) -> - ok; -maybe_set_net_ticktime(KernelConfig) -> - case proplists:get_value(net_ticktime, KernelConfig) of - undefined -> - ok; - NetTickTime -> - case net_kernel:set_net_ticktime(NetTickTime, 0) of - unchanged -> - ok; - change_initiated -> - ok; - {ongoing_change_to, NewNetTicktime} -> - io:format(standard_error, - "~nCouldn't set net_ticktime to ~p " - "as net_kernel is busy changing net_ticktime to ~p seconds ~n", - [NetTickTime, NewNetTicktime]) - end - end. - -generate_config_file(ConfFiles, ConfDir, ScriptDir) -> - generate_config_file(ConfFiles, ConfDir, ScriptDir, - schema_dir(), get_advanced_config()). - - -generate_config_file(ConfFiles, ConfDir, ScriptDir, SchemaDir, Advanced) -> - prepare_plugin_schemas(SchemaDir), - Cuttlefish = filename:join([ScriptDir, "cuttlefish"]), - GeneratedDir = filename:join([ConfDir, "generated"]), - - AdvancedConfigArg = case check_advanced_config(Advanced) of - {ok, FileName} -> [" -a ", FileName]; - none -> [] - end, - rabbit_file:recursive_delete([GeneratedDir]), - Command = lists:concat(["escript ", "\"", Cuttlefish, "\"", - " -f rabbitmq -s ", "\"", SchemaDir, "\"", - " -e ", "\"", ConfDir, "\"", - [[" -c \"", ConfFile, "\""] || ConfFile <- ConfFiles], - AdvancedConfigArg]), - rabbit_log:debug("Generating config file using '~s'", [Command]), - Result = rabbit_misc:os_cmd(Command), - case string:str(Result, " -config ") of - 0 -> {error, {generation_error, Result}}; - _ -> - [OutFile] = rabbit_file:wildcard("rabbitmq.*.config", GeneratedDir), - ResultFile = filename:join([GeneratedDir, "rabbitmq.config"]), - rabbit_file:rename(filename:join([GeneratedDir, OutFile]), - ResultFile), - {ok, ResultFile} + case get_prelaunch_config_state() of + #{config_files := Confs} -> Confs; + _ -> [] end. schema_dir() -> - case init:get_argument(conf_schema_dir) of - {ok, SchemaDir} -> SchemaDir; - _ -> - case code:priv_dir(rabbit) of - {error, bad_name} -> filename:join([".", "priv", "schema"]); - PrivDir -> filename:join([PrivDir, "schema"]) - end - end. - -check_advanced_config(none) -> none; -check_advanced_config(ConfigName) -> - case rabbit_file:is_file(ConfigName) of - true -> {ok, ConfigName}; - false -> none - end. + undefined. get_advanced_config() -> - case init:get_argument(conf_advanced) of + case get_prelaunch_config_state() of %% There can be only one advanced.config - {ok, [FileName | _]} -> + #{config_advanced_file := FileName} when FileName =/= undefined -> case rabbit_file:is_file(FileName) of true -> FileName; false -> none @@ -189,138 +32,15 @@ get_advanced_config() -> _ -> none end. - -prepare_plugin_schemas(SchemaDir) -> - case rabbit_file:is_dir(SchemaDir) of - true -> rabbit_plugins:extract_schemas(SchemaDir); - false -> ok - end. - -spec config_files() -> [config_location()]. config_files() -> - case legacy_erlang_term_config_used() of - true -> - case init:get_argument(config) of - {ok, Files} -> [ filename:absname(filename:rootname(File) ++ ".config") - || [File] <- Files]; - error -> case config_setting() of - none -> []; - File -> [filename:absname(filename:rootname(File, ".config") ++ ".config") - ++ - " (not found)"] - end - end; - false -> - ConfFiles = [filename:absname(File) || File <- get_confs(), - filelib:is_regular(File)], - AdvancedFiles = case get_advanced_config() of - none -> []; - FileName -> [filename:absname(FileName)] - end, - AdvancedFiles ++ ConfFiles - - end. - - -%% This is a pain. We want to know where the config file is. But we -%% can't specify it on the command line if it is missing or the VM -%% will fail to start, so we need to find it by some mechanism other -%% than init:get_arguments/0. We can look at the environment variable -%% which is responsible for setting it... but that doesn't work for a -%% Windows service since the variable can change and the service not -%% be reinstalled, so in that case we add a magic application env. -config_setting() -> - case application:get_env(rabbit, windows_service_config) of - {ok, File1} -> File1; - undefined -> case os:getenv("RABBITMQ_CONFIG_FILE") of - false -> none; - File2 -> File2 - end - end. - --spec validate_config_files() -> ok | {error, {Fmt :: string(), Args :: list()}}. -validate_config_files() -> - ConfigFile = os:getenv("RABBITMQ_CONFIG_FILE"), - AdvancedConfigFile = get_advanced_config(), - AssertConfig = case filename:extension(ConfigFile) of - ".config" -> assert_config(ConfigFile, "RABBITMQ_CONFIG_FILE"); - ".conf" -> assert_conf(ConfigFile, "RABBITMQ_CONFIG_FILE"); - _ -> ok - end, - case AssertConfig of - ok -> - assert_config(AdvancedConfigFile, "RABBITMQ_ADVANCED_CONFIG_FILE"); - {error, Err} -> - {error, Err} - end. - -assert_config("", _) -> ok; -assert_config(none, _) -> ok; -assert_config(Filename, Env) -> - assert_config(filename:extension(Filename), Filename, Env). - --define(ERRMSG_INDENT, " "). - -assert_config(".config", Filename, Env) -> - case filelib:is_regular(Filename) of - true -> - case file:consult(Filename) of - {ok, []} -> {error, - {"Config file ~s should not be empty: ~s", - [Env, Filename]}}; - {ok, [_]} -> ok; - {ok, [_|_]} -> {error, - {"Config file ~s must contain ONE list ended by : ~s", - [Env, Filename]}}; - {error, {1, erl_parse, Err}} -> - % Note: the sequence of spaces is to indent from the [error] prefix, like this: - % - % 2018-09-06 07:05:40.225 [error] Unable to parse erlang terms from RABBITMQ_ADVANCED_CONFIG_FILE... - % Reason: ["syntax error before: ",[]] - {error, {"Unable to parse erlang terms from ~s file: ~s~n" - ?ERRMSG_INDENT - "Reason: ~p~n" - ?ERRMSG_INDENT - "Check that the file is in erlang term format. " ++ - case Env of - "RABBITMQ_CONFIG_FILE" -> - "If you are using the new ini-style format, the file extension should be '.conf'~n"; - _ -> "" - end, - [Env, Filename, Err]}}; - {error, Err} -> - {error, {"Unable to parse erlang terms from ~s file: ~s~n" - ?ERRMSG_INDENT - "Error: ~p~n", - [Env, Filename, Err]}} - end; - false -> - ok - end; -assert_config(BadExt, Filename, Env) -> - {error, {"'~s': Expected extension '.config', got extension '~s' for file '~s'~n", [Env, BadExt, Filename]}}. - -assert_conf("", _) -> ok; -assert_conf(Filename, Env) -> - assert_conf(filename:extension(Filename), Filename, Env). - -assert_conf(".conf", Filename, Env) -> - case filelib:is_regular(Filename) of - true -> - case file:consult(Filename) of - {ok, []} -> ok; - {ok, _} -> - {error, {"Wrong format of the config file ~s: ~s~n" - ?ERRMSG_INDENT - "Check that the file is in the new ini-style config format. " - "If you are using the old format the file extension should " - "be .config~n", - [Env, Filename]}}; - _ -> - ok - end; - false -> - ok - end; -assert_conf(BadExt, Filename, Env) -> - {error, {"'~s': Expected extension '.config', got extension '~s' for file '~s'~n", [Env, BadExt, Filename]}}. + ConfFiles = [filename:absname(File) || File <- get_confs(), + filelib:is_regular(File)], + AdvancedFiles = case get_advanced_config() of + none -> []; + FileName -> [filename:absname(FileName)] + end, + AdvancedFiles ++ ConfFiles. + +get_prelaunch_config_state() -> + rabbit_prelaunch_conf:get_config_state(). diff --git a/deps/rabbit/src/rabbit_connection_tracking.erl b/deps/rabbit/src/rabbit_connection_tracking.erl index 403fbf4..e58723c 100644 --- a/deps/rabbit/src/rabbit_connection_tracking.erl +++ b/deps/rabbit/src/rabbit_connection_tracking.erl @@ -261,6 +261,7 @@ tracked_connection_per_vhost_table_name_for(Node) -> -spec register_connection(rabbit_types:tracked_connection()) -> ok. +-dialyzer([{nowarn_function, [register_connection/1]}, race_conditions]). register_connection(#tracked_connection{vhost = VHost, id = ConnId, node = Node} = Conn) when Node =:= node() -> TableName = tracked_connection_table_name_for(Node), diff --git a/deps/rabbit/src/rabbit_control_pbe.erl b/deps/rabbit/src/rabbit_control_pbe.erl index 674d38b..525b361 100644 --- a/deps/rabbit/src/rabbit_control_pbe.erl +++ b/deps/rabbit/src/rabbit_control_pbe.erl @@ -52,10 +52,9 @@ encode(Cipher, Hash, Iterations, Args) -> [Value, PassPhrase] = Args, try begin TermValue = evaluate_input_as_term(Value), - Result = rabbit_pbe:encrypt_term(Cipher, Hash, Iterations, - list_to_binary(PassPhrase), - TermValue), - {ok, io_lib:format("~p", [{encrypted, Result}])} + Result = {encrypted, _} = rabbit_pbe:encrypt_term(Cipher, Hash, Iterations, + list_to_binary(PassPhrase), TermValue), + {ok, io_lib:format("~p", [Result])} end catch _:Msg -> {error, io_lib:format("Error during cipher operation: ~p", [Msg])} @@ -70,10 +69,10 @@ decode(Cipher, Hash, Iterations, Args) -> try begin TermValue = evaluate_input_as_term(Value), TermToDecrypt = case TermValue of - {encrypted, EncryptedTerm} -> + {encrypted, _}=EncryptedTerm -> EncryptedTerm; _ -> - TermValue + {encrypted, TermValue} end, Result = rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, list_to_binary(PassPhrase), diff --git a/deps/rabbit/src/rabbit_core_ff.erl b/deps/rabbit/src/rabbit_core_ff.erl index 03f686f..c26221f 100644 --- a/deps/rabbit/src/rabbit_core_ff.erl +++ b/deps/rabbit/src/rabbit_core_ff.erl @@ -63,8 +63,9 @@ quorum_queue_migration(_FeatureName, _FeatureProps, is_enabled) -> mnesia:table_info(rabbit_durable_queue, attributes) =:= Fields. migrate_to_amqqueue_with_type(FeatureName, [Table | Rest], Fields) -> - rabbit_log:info("Feature flag `~s`: migrating Mnesia table ~s...", - [FeatureName, Table]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: migrating Mnesia table ~s...", + [FeatureName, Table]), Fun = fun(Queue) -> amqqueue:upgrade_to(amqqueue_v2, Queue) end, case mnesia:transform_table(Table, Fun, Fields) of {atomic, ok} -> migrate_to_amqqueue_with_type(FeatureName, @@ -73,8 +74,9 @@ migrate_to_amqqueue_with_type(FeatureName, [Table | Rest], Fields) -> {aborted, Reason} -> {error, Reason} end; migrate_to_amqqueue_with_type(FeatureName, [], _) -> - rabbit_log:info("Feature flag `~s`: Mnesia tables migration done", - [FeatureName]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: Mnesia tables migration done", + [FeatureName]), ok. %% ------------------------------------------------------------------- @@ -96,10 +98,10 @@ implicit_default_bindings_migration(_Feature_Name, _FeatureProps, remove_explicit_default_bindings(_FeatureName, []) -> ok; remove_explicit_default_bindings(FeatureName, Queues) -> - rabbit_log:info("Feature flag `~s`: deleting explicit " - "default bindings for ~b queues " - "(it may take some time)...", - [FeatureName, length(Queues)]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: deleting explicit default bindings " + "for ~b queues (it may take some time)...", + [FeatureName, length(Queues)]), [rabbit_binding:remove_default_exchange_binding_rows_of(Q) || Q <- Queues], ok. diff --git a/deps/rabbit/src/rabbit_definitions.erl b/deps/rabbit/src/rabbit_definitions.erl index 4d666b8..a9e71e3 100644 --- a/deps/rabbit/src/rabbit_definitions.erl +++ b/deps/rabbit/src/rabbit_definitions.erl @@ -17,6 +17,7 @@ -module(rabbit_definitions). -include_lib("rabbit_common/include/rabbit.hrl"). +-export([boot/0]). %% automatic import on boot -export([maybe_load_definitions/0, maybe_load_definitions_from/2]). %% import @@ -58,6 +59,12 @@ -export_type([definition_object/0, definition_list/0, definition_category/0, definitions/0]). +-define(IMPORT_WORK_POOL, definition_import_pool). + +boot() -> + PoolSize = application:get_env(rabbit, definition_import_work_pool_size, rabbit_runtime:guess_number_of_cpu_cores()), + rabbit_sup:start_supervisor_child(definition_import_pool_sup, worker_pool_sup, [PoolSize, ?IMPORT_WORK_POOL]). + maybe_load_definitions() -> %% this feature was a part of rabbitmq-management for a long time, %% so we check rabbit_management.load_definitions for backward compatibility. @@ -224,20 +231,22 @@ apply_defs(Map, ActingUser, VHost) when is_binary(VHost) -> apply_defs(Map, ActingUser, SuccessFun) when is_function(SuccessFun) -> Version = maps:get(rabbitmq_version, Map, maps:get(rabbit_version, Map, undefined)), try - for_all(users, ActingUser, Map, + concurrent_for_all(users, ActingUser, Map, fun(User, _Username) -> rabbit_auth_backend_internal:put_user(User, Version, ActingUser) end), - for_all(vhosts, ActingUser, Map, fun add_vhost/2), + concurrent_for_all(vhosts, ActingUser, Map, fun add_vhost/2), validate_limits(Map), - for_all(permissions, ActingUser, Map, fun add_permission/2), - for_all(topic_permissions, ActingUser, Map, fun add_topic_permission/2), - for_all(parameters, ActingUser, Map, fun add_parameter/2), - for_all(global_parameters, ActingUser, Map, fun add_global_parameter/2), - for_all(policies, ActingUser, Map, fun add_policy/2), - for_all(queues, ActingUser, Map, fun add_queue/2), - for_all(exchanges, ActingUser, Map, fun add_exchange/2), - for_all(bindings, ActingUser, Map, fun add_binding/2), + concurrent_for_all(permissions, ActingUser, Map, fun add_permission/2), + concurrent_for_all(topic_permissions, ActingUser, Map, fun add_topic_permission/2), + sequential_for_all(parameters, ActingUser, Map, fun add_parameter/2), + sequential_for_all(global_parameters, ActingUser, Map, fun add_global_parameter/2), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, fun add_policy/2), + concurrent_for_all(queues, ActingUser, Map, fun add_queue/2), + concurrent_for_all(exchanges, ActingUser, Map, fun add_exchange/2), + concurrent_for_all(bindings, ActingUser, Map, fun add_binding/2), SuccessFun(), ok catch {error, E} -> {error, E}; @@ -254,11 +263,13 @@ apply_defs(Map, ActingUser, SuccessFun, VHost) when is_binary(VHost) -> [VHost, ActingUser]), try validate_limits(Map, VHost), - for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), - for_all(policies, ActingUser, Map, VHost, fun add_policy/3), - for_all(queues, ActingUser, Map, VHost, fun add_queue/3), - for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), - for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), + sequential_for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, VHost, fun add_policy/3), + concurrent_for_all(queues, ActingUser, Map, VHost, fun add_queue/3), + concurrent_for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), + concurrent_for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), SuccessFun() catch {error, E} -> {error, format(E)}; exit:E -> {error, format(E)} @@ -275,42 +286,93 @@ apply_defs(Map, ActingUser, SuccessFun, ErrorFun, VHost) -> [VHost, ActingUser]), try validate_limits(Map, VHost), - for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), - for_all(policies, ActingUser, Map, VHost, fun add_policy/3), - for_all(queues, ActingUser, Map, VHost, fun add_queue/3), - for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), - for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), + sequential_for_all(parameters, ActingUser, Map, VHost, fun add_parameter/3), + %% importing policies concurrently can be unsafe as queues will be getting + %% potentially out of order notifications of applicable policy changes + sequential_for_all(policies, ActingUser, Map, VHost, fun add_policy/3), + concurrent_for_all(queues, ActingUser, Map, VHost, fun add_queue/3), + concurrent_for_all(exchanges, ActingUser, Map, VHost, fun add_exchange/3), + concurrent_for_all(bindings, ActingUser, Map, VHost, fun add_binding/3), SuccessFun() catch {error, E} -> ErrorFun(format(E)); exit:E -> ErrorFun(format(E)) end. -for_all(Category, ActingUser, Definitions, Fun) -> +sequential_for_all(Category, ActingUser, Definitions, Fun) -> case maps:get(rabbit_data_coercion:to_atom(Category), Definitions, undefined) of undefined -> ok; List -> case length(List) of 0 -> ok; - N -> rabbit_log:info("Importing ~p ~s...", [N, human_readable_category_name(Category)]) + N -> rabbit_log:info("Importing sequentially ~p ~s...", [N, human_readable_category_name(Category)]) end, [begin %% keys are expected to be atoms - Atomized = maps:fold(fun (K, V, Acc) -> - maps:put(rabbit_data_coercion:to_atom(K), V, Acc) - end, #{}, M), - Fun(Atomized, ActingUser) + Fun(atomize_keys(M), ActingUser) end || M <- List, is_map(M)] end. -for_all(Name, ActingUser, Definitions, VHost, Fun) -> +sequential_for_all(Name, ActingUser, Definitions, VHost, Fun) -> + case maps:get(rabbit_data_coercion:to_atom(Name), Definitions, undefined) of + undefined -> ok; + List -> [Fun(VHost, atomize_keys(M), ActingUser) || M <- List, is_map(M)] + end. + +concurrent_for_all(Category, ActingUser, Definitions, Fun) -> + case maps:get(rabbit_data_coercion:to_atom(Category), Definitions, undefined) of + undefined -> ok; + List -> + case length(List) of + 0 -> ok; + N -> rabbit_log:info("Importing concurrently ~p ~s...", [N, human_readable_category_name(Category)]) + end, + WorkPoolFun = fun(M) -> + Fun(atomize_keys(M), ActingUser) + end, + do_concurrent_for_all(List, WorkPoolFun) + end. +concurrent_for_all(Name, ActingUser, Definitions, VHost, Fun) -> case maps:get(rabbit_data_coercion:to_atom(Name), Definitions, undefined) of undefined -> ok; - List -> [Fun(VHost, maps:from_list([{atomise_name(K), V} || {K, V} <- maps:to_list(M)]), - ActingUser) || - M <- List, is_map(M)] + List -> + WorkPoolFun = fun(M) -> + Fun(VHost, atomize_keys(M), ActingUser) + end, + do_concurrent_for_all(List, WorkPoolFun) + end. + +do_concurrent_for_all(List, WorkPoolFun) -> + {ok, Gatherer} = gatherer:start_link(), + [begin + %% keys are expected to be atoms + ok = gatherer:fork(Gatherer), + worker_pool:submit_async( + ?IMPORT_WORK_POOL, + fun() -> + try + WorkPoolFun(M) + catch {error, E} -> gatherer:in(Gatherer, {error, E}); + _:E -> gatherer:in(Gatherer, {error, E}) + end, + gatherer:finish(Gatherer) + end) + end || M <- List, is_map(M)], + case gatherer:out(Gatherer) of + empty -> + ok = gatherer:stop(Gatherer); + {value, {error, E}} -> + ok = gatherer:stop(Gatherer), + throw({error, E}) end. +-spec atomize_keys(#{any() => any()}) -> #{atom() => any()}. + +atomize_keys(M) -> + maps:fold(fun(K, V, Acc) -> + maps:put(rabbit_data_coercion:to_atom(K), V, Acc) + end, #{}, M). + -spec human_readable_category_name(definition_category()) -> string(). human_readable_category_name(topic_permissions) -> "topic permissions"; @@ -390,6 +452,8 @@ add_policy(VHost, Param, Username) -> exit(rabbit_data_coercion:to_binary(rabbit_misc:escape_html_tags(E ++ S))) end. +-spec add_vhost(map(), rabbit_types:username()) -> ok. + add_vhost(VHost, ActingUser) -> VHostName = maps:get(name, VHost, undefined), VHostTrace = maps:get(tracing, VHost, undefined), @@ -533,25 +597,12 @@ build_filtered_map([Queue|Rest], AccMap0) -> {Rec, VHost} = build_queue_data(Queue), case rabbit_amqqueue:lookup(Rec) of {error, not_found} -> - AccMap1 = maps_update_with(VHost, fun(V) -> V + 1 end, 1, AccMap0), + AccMap1 = maps:update_with(VHost, fun(V) -> V + 1 end, 1, AccMap0), build_filtered_map(Rest, AccMap1); {ok, _} -> build_filtered_map(Rest, AccMap0) end. -%% Copy of maps:with_util/3 from Erlang 20.0.1. -maps_update_with(Key,Fun,Init,Map) when is_function(Fun,1), is_map(Map) -> - case maps:find(Key,Map) of - {ok,Val} -> maps:update(Key,Fun(Val),Map); - error -> maps:put(Key,Init,Map) - end; -maps_update_with(Key,Fun,Init,Map) -> - erlang:error(maps_error_type(Map),[Key,Fun,Init,Map]). - -%% Copy of maps:error_type/1 from Erlang 20.0.1. -maps_error_type(M) when is_map(M) -> badarg; -maps_error_type(V) -> {badmap, V}. - validate_vhost_limit(VHost, AddCount, ok) -> WouldExceed = rabbit_vhost_limit:would_exceed_queue_limit(AddCount, VHost), validate_vhost_queue_limit(VHost, AddCount, WouldExceed). @@ -569,8 +620,6 @@ validate_vhost_queue_limit(VHost, AddCount, {true, Limit, QueueCount}) -> ErrMsg = rabbit_misc:format(ErrFmt, ErrInfo), exit({vhost_limit_exceeded, ErrMsg}). -atomise_name(N) -> rabbit_data_coercion:to_atom(N). - get_or_missing(K, L) -> case maps:get(K, L, undefined) of undefined -> {key_missing, K}; @@ -588,7 +637,8 @@ list_exchanges() -> %% exclude internal exchanges, they are not meant to be declared or used by %% applications [exchange_definition(X) || X <- lists:filter(fun(#exchange{internal = true}) -> false; - (#exchange{}) -> true + (#exchange{name = #resource{name = <<>>}}) -> false; + (X) -> not rabbit_exchange:is_amq_prefixed(X) end, rabbit_exchange:list())]. @@ -664,14 +714,14 @@ list_users() -> end || U <- rabbit_auth_backend_internal:list_users()]. list_runtime_parameters() -> - [runtime_parameter_definition(P) || P <- rabbit_runtime_parameters:list()]. + [runtime_parameter_definition(P) || P <- rabbit_runtime_parameters:list(), is_list(P)]. runtime_parameter_definition(Param) -> #{ <<"vhost">> => pget(vhost, Param), <<"component">> => pget(component, Param), <<"name">> => pget(name, Param), - <<"value">> => maps:from_list(pget(value, Param)) + <<"value">> => pget(value, Param) }. list_global_runtime_parameters() -> diff --git a/deps/rabbit/src/rabbit_epmd_monitor.erl b/deps/rabbit/src/rabbit_epmd_monitor.erl index 19e8220..f034b49 100644 --- a/deps/rabbit/src/rabbit_epmd_monitor.erl +++ b/deps/rabbit/src/rabbit_epmd_monitor.erl @@ -52,28 +52,8 @@ start_link() -> init([]) -> {Me, Host} = rabbit_nodes:parts(node()), Mod = net_kernel:epmd_module(), - init_handle_port_please(Mod:port_please(Me, Host), Mod, Me, Host). - -init_handle_port_please(noport, Mod, Me, Host) -> - State = #state{mod = Mod, - me = Me, - host = Host, - port = undefined}, - rabbit_log:info("epmd does not know us, re-registering as ~s~n", [Me]), - {ok, ensure_timer(State)}; -init_handle_port_please({port, Port, _Version}, Mod, Me, Host) -> - rabbit_log:info("epmd monitor knows us, inter-node communication (distribution) port: ~p", [Port]), - State = #state{mod = Mod, - me = Me, - host = Host, - port = Port}, - {ok, ensure_timer(State)}; -init_handle_port_please({error, Error}, Mod, Me, Host) -> - rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), - State = #state{mod = Mod, - me = Me, - host = Host, - port = undefined}, + {ok, Port} = handle_port_please(init, Mod:port_please(Me, Host), Me, undefined), + State = #state{mod = Mod, me = Me, host = Host, port = Port}, {ok, ensure_timer(State)}. handle_call(_Request, _From, State) -> @@ -106,20 +86,28 @@ ensure_timer(State) -> check_epmd(State = #state{mod = Mod, me = Me, host = Host, - port = Port}) -> + port = Port0}) -> rabbit_log:debug("Asked to [re-]register this node (~s@~s) with epmd...", [Me, Host]), - Port1 = case Mod:port_please(Me, Host) of - noport -> - rabbit_log:warning("epmd does not know us, re-registering ~s at port ~b~n", - [Me, Port]), - Port; - {port, NewPort, _Version} -> - NewPort; - {error, Error} -> - rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), - Port - end, + {ok, Port1} = handle_port_please(check, Mod:port_please(Me, Host), Me, Port0), rabbit_nodes:ensure_epmd(), Mod:register_node(Me, Port1), rabbit_log:debug("[Re-]registered this node (~s@~s) with epmd at port ~p", [Me, Host, Port1]), {ok, State#state{port = Port1}}. + +handle_port_please(init, noport, Me, Port) -> + rabbit_log:info("epmd does not know us, re-registering as ~s~n", [Me]), + {ok, Port}; +handle_port_please(check, noport, Me, Port) -> + rabbit_log:warning("epmd does not know us, re-registering ~s at port ~b~n", [Me, Port]), + {ok, Port}; +handle_port_please(_, closed, _Me, Port) -> + rabbit_log:error("epmd monitor failed to retrieve our port from epmd: closed"), + {ok, Port}; +handle_port_please(init, {port, NewPort, _Version}, _Me, _Port) -> + rabbit_log:info("epmd monitor knows us, inter-node communication (distribution) port: ~p", [NewPort]), + {ok, NewPort}; +handle_port_please(check, {port, NewPort, _Version}, _Me, _Port) -> + {ok, NewPort}; +handle_port_please(_, {error, Error}, _Me, Port) -> + rabbit_log:error("epmd monitor failed to retrieve our port from epmd: ~p", [Error]), + {ok, Port}. diff --git a/deps/rabbit/src/rabbit_exchange.erl b/deps/rabbit/src/rabbit_exchange.erl index df0138d..fd9ff0c 100644 --- a/deps/rabbit/src/rabbit_exchange.erl +++ b/deps/rabbit/src/rabbit_exchange.erl @@ -24,7 +24,7 @@ update_scratch/3, update_decorators/1, immutable/1, info_keys/0, info/1, info/2, info_all/1, info_all/2, info_all/4, route/2, delete/3, validate_binding/2, count/0]). --export([list_names/0]). +-export([list_names/0, is_amq_prefixed/1]). %% these must be run inside a mnesia tx -export([maybe_auto_delete/2, serial/1, peek_serial/1, update/2]). @@ -102,6 +102,18 @@ serial(#exchange{name = XName} = X) -> (false) -> none end. +-spec is_amq_prefixed(rabbit_types:exchange() | binary()) -> boolean(). + +is_amq_prefixed(Name) when is_binary(Name) -> + case re:run(Name, <<"^amq\.">>) of + nomatch -> false; + {match, _} -> true + end; +is_amq_prefixed(#exchange{name = #resource{name = <<>>}}) -> + false; +is_amq_prefixed(#exchange{name = #resource{name = Name}}) -> + is_amq_prefixed(Name). + -spec declare (name(), type(), boolean(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:username()) diff --git a/deps/rabbit/src/rabbit_feature_flags.erl b/deps/rabbit/src/rabbit_feature_flags.erl index 941d161..7f2d3d6 100644 --- a/deps/rabbit/src/rabbit_feature_flags.erl +++ b/deps/rabbit/src/rabbit_feature_flags.erl @@ -129,10 +129,12 @@ do_sync_feature_flags_with_node/1]). -ifdef(TEST). --export([initialize_registry/3, +-export([inject_test_feature_flags/1, + initialize_registry/3, query_supported_feature_flags/0, mark_as_enabled_remotely/2, - mark_as_enabled_remotely/4]). + mark_as_enabled_remotely/4, + registry_loading_lock/0]). -endif. %% Default timeout for operations on remote nodes. @@ -234,6 +236,8 @@ -type migration_fun_context() :: enable | is_enabled. +-type registry_vsn() :: term(). + -export_type([feature_flag_modattr/0, feature_props/0, feature_name/0, @@ -300,28 +304,31 @@ list(Which, Stability) %% dependency tree are left unchanged). enable(FeatureName) when is_atom(FeatureName) -> - rabbit_log:debug("Feature flag `~s`: REQUEST TO ENABLE", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: REQUEST TO ENABLE", + [FeatureName]), case is_enabled(FeatureName) of true -> - rabbit_log:debug("Feature flag `~s`: already enabled", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: already enabled", + [FeatureName]), ok; false -> - rabbit_log:debug("Feature flag `~s`: not enabled, " - "check if supported by cluster", - [FeatureName]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: not enabled, check if supported by cluster", + [FeatureName]), %% The feature flag must be supported locally and remotely %% (i.e. by all members of the cluster). case is_supported(FeatureName) of true -> - rabbit_log:info("Feature flag `~s`: supported, " - "attempt to enable...", - [FeatureName]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: supported, attempt to enable...", + [FeatureName]), do_enable(FeatureName); false -> - rabbit_log:error("Feature flag `~s`: not supported", - [FeatureName]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: not supported", + [FeatureName]), {error, unsupported} end end; @@ -459,22 +466,23 @@ is_supported_remotely(FeatureNames) -> is_supported_remotely(FeatureName, Timeout) when is_atom(FeatureName) -> is_supported_remotely([FeatureName], Timeout); is_supported_remotely([], _) -> - rabbit_log:debug("Feature flags: skipping query for feature flags " - "support as the given list is empty", - []), + rabbit_log_feature_flags:debug( + "Feature flags: skipping query for feature flags support as the " + "given list is empty"), true; is_supported_remotely(FeatureNames, Timeout) when is_list(FeatureNames) -> case running_remote_nodes() of [] -> - rabbit_log:debug("Feature flags: isolated node; " - "skipping remote node query " - "=> consider `~p` supported", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: isolated node; skipping remote node query " + "=> consider `~p` supported", + [FeatureNames]), true; RemoteNodes -> - rabbit_log:debug("Feature flags: about to query these remote nodes " - "about support for `~p`: ~p", - [FeatureNames, RemoteNodes]), + rabbit_log_feature_flags:debug( + "Feature flags: about to query these remote nodes about " + "support for `~p`: ~p", + [FeatureNames, RemoteNodes]), is_supported_remotely(RemoteNodes, FeatureNames, Timeout) end. @@ -493,23 +501,24 @@ is_supported_remotely(FeatureNames, Timeout) when is_list(FeatureNames) -> %% all nodes, or `false' if one of them is not or the RPC timed out. is_supported_remotely(_, [], _) -> - rabbit_log:debug("Feature flags: skipping query for feature flags " - "support as the given list is empty", - []), + rabbit_log_feature_flags:debug( + "Feature flags: skipping query for feature flags support as the " + "given list is empty"), true; is_supported_remotely([Node | Rest], FeatureNames, Timeout) -> case does_node_support(Node, FeatureNames, Timeout) of true -> is_supported_remotely(Rest, FeatureNames, Timeout); false -> - rabbit_log:debug("Feature flags: stopping query " - "for support for `~p` here", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: stopping query for support for `~p` here", + [FeatureNames]), false end; is_supported_remotely([], FeatureNames, _) -> - rabbit_log:debug("Feature flags: all running remote nodes support `~p`", - [FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: all running remote nodes support `~p`", + [FeatureNames]), true. -spec is_enabled(feature_name() | [feature_name()]) -> boolean(). @@ -825,6 +834,31 @@ list_of_enabled_feature_flags_to_feature_states(FeatureNames) -> initialize_registry(NewSupportedFeatureFlags, NewFeatureStates, WrittenToDisk) -> + Ret = maybe_initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk), + case Ret of + ok -> ok; + restart -> initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk); + Error -> Error + end. + +-spec maybe_initialize_registry(feature_flags(), + feature_states(), + boolean()) -> + ok | restart | {error, any()} | no_return(). + +maybe_initialize_registry(NewSupportedFeatureFlags, + NewFeatureStates, + WrittenToDisk) -> + %% We save the version of the current registry before computing + %% the new one. This is used when we do the actual reload: if the + %% current registry was reloaded in the meantime, we need to restart + %% the computation to make sure we don't loose data. + RegistryVsn = registry_vsn(), + %% We take the feature flags already registered. RegistryInitialized = rabbit_ff_registry:is_registry_initialized(), KnownFeatureFlags1 = case RegistryInitialized of @@ -877,13 +911,22 @@ initialize_registry(NewSupportedFeatureFlags, case Proceed of true -> - rabbit_log:debug("Feature flags: (re)initialize registry", []), - do_initialize_registry(AllFeatureFlags, - FeatureStates, - WrittenToDisk); + rabbit_log_feature_flags:debug( + "Feature flags: (re)initialize registry (~p)", + [self()]), + T0 = erlang:timestamp(), + Ret = do_initialize_registry(RegistryVsn, + AllFeatureFlags, + FeatureStates, + WrittenToDisk), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to regen registry: ~p µs", + [timer:now_diff(T1, T0)]), + Ret; false -> - rabbit_log:debug("Feature flags: registry already up-to-date, " - "skipping init", []), + rabbit_log_feature_flags:debug( + "Feature flags: registry already up-to-date, skipping init"), ok end. @@ -902,29 +945,54 @@ does_registry_need_refresh(AllFeatureFlags, %% changes. CurrentAllFeatureFlags = rabbit_ff_registry:list(all), CurrentFeatureStates = rabbit_ff_registry:states(), - CurrentWrittenToDisk = rabbit_ff_registry:is_registry_written_to_disk(), + CurrentWrittenToDisk = + rabbit_ff_registry:is_registry_written_to_disk(), - AllFeatureFlags =/= CurrentAllFeatureFlags orelse - FeatureStates =/= CurrentFeatureStates orelse - WrittenToDisk =/= CurrentWrittenToDisk; + if + AllFeatureFlags =/= CurrentAllFeatureFlags -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, list of feature flags differs"), + true; + FeatureStates =/= CurrentFeatureStates -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, feature flag states differ"), + true; + WrittenToDisk =/= CurrentWrittenToDisk -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, \"written to disk\" state changed"), + true; + true -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: no"), + false + end; false -> + rabbit_log_feature_flags:debug( + "Feature flags: registry refresh needed: " + "yes, first-time initialization"), true end. --spec do_initialize_registry(feature_flags(), +-spec do_initialize_registry(registry_vsn(), + feature_flags(), feature_states(), boolean()) -> - ok | {error, any()} | no_return(). + ok | restart | {error, any()} | no_return(). %% @private -do_initialize_registry(AllFeatureFlags, +do_initialize_registry(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk) -> %% We log the state of those feature flags. - rabbit_log:info("Feature flags: list of feature flags found:", []), + rabbit_log_feature_flags:info( + "Feature flags: list of feature flags found:"), lists:foreach( fun(FeatureName) -> - rabbit_log:info( + rabbit_log_feature_flags:info( "Feature flags: [~s] ~s", [case maps:is_key(FeatureName, FeatureStates) of true -> @@ -937,15 +1005,17 @@ do_initialize_registry(AllFeatureFlags, end, FeatureName]) end, lists:sort(maps:keys(AllFeatureFlags))), - rabbit_log:info("Feature flags: feature flag states written to disk: ~s", - [case WrittenToDisk of - true -> "yes"; - false -> "no" - end]), + rabbit_log_feature_flags:info( + "Feature flags: feature flag states written to disk: ~s", + [case WrittenToDisk of + true -> "yes"; + false -> "no" + end]), %% We request the registry to be regenerated and reloaded with the %% new state. - regen_registry_mod(AllFeatureFlags, + regen_registry_mod(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk). @@ -953,54 +1023,51 @@ do_initialize_registry(AllFeatureFlags, %% @private -ifdef(TEST). +-define(PT_TESTSUITE_ATTRS, {?MODULE, testsuite_feature_flags_attrs}). + +inject_test_feature_flags(AttributesFromTestsuite) -> + rabbit_log_feature_flags:debug( + "Feature flags: injecting feature flags from testsuite: ~p", + [AttributesFromTestsuite]), + ok = persistent_term:put(?PT_TESTSUITE_ATTRS, AttributesFromTestsuite), + initialize_registry(). + module_attributes_from_testsuite() -> - try - throw(force_exception) - catch - throw:force_exception:Stacktrace -> - Modules = lists:filter( - fun({Mod, _, _, _}) -> - ModS = atom_to_list(Mod), - re:run(ModS, "_SUITE$", [{capture, none}]) - =:= - match - end, Stacktrace), - case Modules of - [{Module, _, _, _} | _] -> - ModInfo = Module:module_info(attributes), - Attrs = lists:append( - [Attr || {Name, Attr} <- ModInfo, - Name =:= rabbit_feature_flag]), - case Attrs of - [] -> []; - _ -> [{Module, Module, Attrs}] - end; - _ -> - [] - end - end. + persistent_term:get(?PT_TESTSUITE_ATTRS, []). query_supported_feature_flags() -> - rabbit_log:debug( - "Feature flags: query feature flags in loaded applications + test " - "module"), - AttributesPerApp = rabbit_misc:all_module_attributes(rabbit_feature_flag), + rabbit_log_feature_flags:debug( + "Feature flags: query feature flags in loaded applications " + "+ testsuite"), + T0 = erlang:timestamp(), + AttributesPerApp = rabbit_misc:rabbitmq_related_module_attributes( + rabbit_feature_flag), AttributesFromTestsuite = module_attributes_from_testsuite(), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to find supported feature flags: ~p µs", + [timer:now_diff(T1, T0)]), AllAttributes = AttributesPerApp ++ AttributesFromTestsuite, prepare_queried_feature_flags(AllAttributes, #{}). -else. query_supported_feature_flags() -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: query feature flags in loaded applications"), - AttributesPerApp = rabbit_misc:all_module_attributes(rabbit_feature_flag), + T0 = erlang:timestamp(), + AttributesPerApp = rabbit_misc:rabbitmq_related_module_attributes( + rabbit_feature_flag), + T1 = erlang:timestamp(), + rabbit_log_feature_flags:debug( + "Feature flags: time to find supported feature flags: ~p µs", + [timer:now_diff(T1, T0)]), prepare_queried_feature_flags(AttributesPerApp, #{}). -endif. prepare_queried_feature_flags([{App, _Module, Attributes} | Rest], AllFeatureFlags) -> - rabbit_log:debug("Feature flags: application `~s` " - "has ~b feature flags", - [App, length(Attributes)]), + rabbit_log_feature_flags:debug( + "Feature flags: application `~s` has ~b feature flags", + [App, length(Attributes)]), AllFeatureFlags1 = lists:foldl( fun({FeatureName, FeatureProps}, AllFF) -> merge_new_feature_flags(AllFF, @@ -1028,12 +1095,15 @@ merge_new_feature_flags(AllFeatureFlags, App, FeatureName, FeatureProps) maps:merge(AllFeatureFlags, #{FeatureName => FeatureProps1}). --spec regen_registry_mod(feature_flags(), +-spec regen_registry_mod(registry_vsn(), + feature_flags(), feature_states(), - boolean()) -> ok | {error, any()} | no_return(). + boolean()) -> + ok | restart | {error, any()} | no_return(). %% @private -regen_registry_mod(AllFeatureFlags, +regen_registry_mod(RegistryVsn, + AllFeatureFlags, FeatureStates, WrittenToDisk) -> %% Here, we recreate the source code of the `rabbit_ff_registry` @@ -1210,56 +1280,108 @@ regen_registry_mod(AllFeatureFlags, return_warnings], case compile:forms(Forms, CompileOpts) of {ok, Mod, Bin, _} -> - load_registry_mod(Mod, Bin); + load_registry_mod(RegistryVsn, Mod, Bin); {error, Errors, Warnings} -> - rabbit_log:error("Feature flags: registry compilation:~n" - "Errors: ~p~n" - "Warnings: ~p", - [Errors, Warnings]), + rabbit_log_feature_flags:error( + "Feature flags: registry compilation:~n" + "Errors: ~p~n" + "Warnings: ~p", + [Errors, Warnings]), {error, {compilation_failure, Errors, Warnings}} end. --ifdef(TEST). maybe_log_registry_source_code(Forms) -> - case os:getenv("LOG_FF_REGISTRY") of - false -> - ok; - _ -> - rabbit_log:debug( + case rabbit_prelaunch:get_context() of + #{log_feature_flags_registry := true} -> + rabbit_log_feature_flags:debug( "== FEATURE FLAGS REGISTRY ==~n" "~s~n" "== END ==~n", - [erl_prettypr:format(erl_syntax:form_list(Forms))]) + [erl_prettypr:format(erl_syntax:form_list(Forms))]); + _ -> + ok end. --else. -maybe_log_registry_source_code(_) -> - ok. + +-ifdef(TEST). +registry_loading_lock() -> ?FF_REGISTRY_LOADING_LOCK. -endif. --spec load_registry_mod(atom(), binary()) -> - ok | {error, any()} | no_return(). +-spec load_registry_mod(registry_vsn(), atom(), binary()) -> + ok | restart | no_return(). %% @private -load_registry_mod(Mod, Bin) -> - rabbit_log:debug("Feature flags: registry module ready, loading it..."), - FakeFilename = "Compiled and loaded by " ++ ?MODULE_STRING, +load_registry_mod(RegistryVsn, Mod, Bin) -> + rabbit_log_feature_flags:debug( + "Feature flags: registry module ready, loading it (~p)...", + [self()]), + FakeFilename = "Compiled and loaded by " ?MODULE_STRING, %% Time to load the new registry, replacing the old one. We use a %% lock here to synchronize concurrent reloads. global:set_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), - _ = code:soft_purge(Mod), - _ = code:delete(Mod), - Ret = code:load_binary(Mod, FakeFilename, Bin), + rabbit_log_feature_flags:debug( + "Feature flags: acquired lock before reloading registry module (~p)", + [self()]), + %% We want to make sure that the old registry (not the one being + %% currently in use) is purged by the code server. It means no + %% process lingers on that old code. + %% + %% We use code:soft_purge() for that (meaning no process is killed) + %% and we wait in an infinite loop for that to succeed. + ok = purge_old_registry(Mod), + %% Now we can replace the currently loaded registry by the new one. + %% The code server takes care of marking the current registry as old + %% and load the new module in an atomic operation. + %% + %% Therefore there is no chance of a window where there is no + %% registry module available, causing the one on disk to be + %% reloaded. + Ret = case registry_vsn() of + RegistryVsn -> code:load_binary(Mod, FakeFilename, Bin); + OtherVsn -> {error, {restart, RegistryVsn, OtherVsn}} + end, + rabbit_log_feature_flags:debug( + "Feature flags: releasing lock after reloading registry module (~p)", + [self()]), global:del_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), case Ret of {module, _} -> - rabbit_log:debug("Feature flags: registry module loaded"), + rabbit_log_feature_flags:debug( + "Feature flags: registry module loaded (vsn: ~p -> ~p)", + [RegistryVsn, registry_vsn()]), ok; + {error, {restart, Expected, Current}} -> + rabbit_log_feature_flags:error( + "Feature flags: another registry module was loaded in the " + "meantime (expected old vsn: ~p, current vsn: ~p); " + "restarting the regen", + [Expected, Current]), + restart; {error, Reason} -> - rabbit_log:error("Feature flags: failed to load registry " - "module: ~p", [Reason]), + rabbit_log_feature_flags:error( + "Feature flags: failed to load registry module: ~p", + [Reason]), throw({feature_flag_registry_reload_failure, Reason}) end. +-spec registry_vsn() -> registry_vsn(). +%% @private + +registry_vsn() -> + Attrs = rabbit_ff_registry:module_info(attributes), + proplists:get_value(vsn, Attrs, undefined). + +purge_old_registry(Mod) -> + case code:is_loaded(Mod) of + {file, _} -> do_purge_old_registry(Mod); + false -> ok + end. + +do_purge_old_registry(Mod) -> + case code:soft_purge(Mod) of + true -> ok; + false -> do_purge_old_registry(Mod) + end. + %% ------------------------------------------------------------------- %% Feature flags state storage. %% ------------------------------------------------------------------- @@ -1301,7 +1423,7 @@ try_to_read_enabled_feature_flags_list() -> %% feature flags to be empty. []; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to read the `feature_flags` " "file at `~s`: ~s", [File, file:format_error(Reason)]), @@ -1330,6 +1452,8 @@ try_to_write_enabled_feature_flags_list(FeatureNames) -> %% are unknown feature flags in that file, we want to keep their %% state, even though they are unsupported at this time. It could be %% that a plugin was disabled in the meantime. + %% + %% FIXME: Lock this code to fix concurrent read/modify/write. PreviouslyEnabled = case try_to_read_enabled_feature_flags_list() of {error, _} -> []; List -> List @@ -1351,7 +1475,7 @@ try_to_write_enabled_feature_flags_list(FeatureNames) -> ok -> ok; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to write the `feature_flags` " "file at `~s`: ~s", [File, file:format_error(Reason)]), @@ -1415,7 +1539,7 @@ enable_locally(FeatureName) when is_atom(FeatureName) -> true -> ok; false -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flag `~s`: enable locally (as part of feature " "flag states synchronization)", [FeatureName]), @@ -1447,8 +1571,9 @@ do_enable_locally(FeatureName) -> enable_dependencies(FeatureName, Everywhere) -> FeatureProps = rabbit_ff_registry:get(FeatureName), DependsOn = maps:get(depends_on, FeatureProps, []), - rabbit_log:debug("Feature flag `~s`: enable dependencies: ~p", - [FeatureName, DependsOn]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: enable dependencies: ~p", + [FeatureName, DependsOn]), enable_dependencies(FeatureName, DependsOn, Everywhere). -spec enable_dependencies(feature_name(), [feature_name()], boolean()) -> @@ -1479,26 +1604,26 @@ run_migration_fun(FeatureName, FeatureProps, Arg) -> case maps:get(migration_fun, FeatureProps, none) of {MigrationMod, MigrationFun} when is_atom(MigrationMod) andalso is_atom(MigrationFun) -> - rabbit_log:debug("Feature flag `~s`: run migration function ~p " - "with arg: ~p", - [FeatureName, MigrationFun, Arg]), + rabbit_log_feature_flags:debug( + "Feature flag `~s`: run migration function ~p with arg: ~p", + [FeatureName, MigrationFun, Arg]), try erlang:apply(MigrationMod, MigrationFun, [FeatureName, FeatureProps, Arg]) catch _:Reason:Stacktrace -> - rabbit_log:error("Feature flag `~s`: migration function " - "crashed: ~p~n~p", - [FeatureName, Reason, Stacktrace]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: migration function crashed: ~p~n~p", + [FeatureName, Reason, Stacktrace]), {error, {migration_fun_crash, Reason, Stacktrace}} end; none -> {error, no_migration_fun}; Invalid -> - rabbit_log:error("Feature flag `~s`: invalid migration " - "function: ~p", - [FeatureName, Invalid]), + rabbit_log_feature_flags:error( + "Feature flag `~s`: invalid migration function: ~p", + [FeatureName, Invalid]), {error, {invalid_migration_fun, Invalid}} end. @@ -1519,8 +1644,9 @@ mark_as_enabled(FeatureName, IsEnabled) -> %% @private mark_as_enabled_locally(FeatureName, IsEnabled) -> - rabbit_log:info("Feature flag `~s`: mark as enabled=~p", - [FeatureName, IsEnabled]), + rabbit_log_feature_flags:info( + "Feature flag `~s`: mark as enabled=~p", + [FeatureName, IsEnabled]), EnabledFeatureNames = maps:keys(list(enabled)), NewEnabledFeatureNames = case IsEnabled of true -> @@ -1569,32 +1695,36 @@ mark_as_enabled_remotely(Nodes, FeatureName, IsEnabled, Timeout) -> FailedNodes = [Node || {Node, Ret} <- Rets, Ret =/= ok], case FailedNodes of [] -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: `~s` successfully marked as enabled=~p on all " "nodes", [FeatureName, IsEnabled]), ok; _ -> - T1 = erlang:timestamp(), - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: failed to mark feature flag `~s` as enabled=~p " "on the following nodes:", [FeatureName, IsEnabled]), - [rabbit_log:error( + [rabbit_log_feature_flags:error( "Feature flags: - ~s: ~p", [Node, Ret]) || {Node, Ret} <- Rets, Ret =/= ok], - NewTimeout = Timeout - (timer:now_diff(T1, T0) div 1000), + Sleep = 1000, + T1 = erlang:timestamp(), + Duration = timer:now_diff(T1, T0), + NewTimeout = (Timeout * 1000 - Duration) div 1000 - Sleep, if NewTimeout > 0 -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: retrying with a timeout of ~b " - "milliseconds", [NewTimeout]), + "ms after sleeping for ~b ms", + [NewTimeout, Sleep]), + timer:sleep(Sleep), mark_as_enabled_remotely(FailedNodes, FeatureName, IsEnabled, NewTimeout); true -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: not retrying; RPC went over the " "~b milliseconds timeout", [Timeout]), %% FIXME: Is crashing the process the best solution here? @@ -1630,8 +1760,9 @@ query_running_remote_nodes(Node, Timeout) -> %% @private does_node_support(Node, FeatureNames, Timeout) -> - rabbit_log:debug("Feature flags: querying `~p` support on node ~s...", - [FeatureNames, Node]), + rabbit_log_feature_flags:debug( + "Feature flags: querying `~p` support on node ~s...", + [FeatureNames, Node]), Ret = case node() of Node -> is_supported_locally(FeatureNames); @@ -1644,24 +1775,27 @@ does_node_support(Node, FeatureNames, Timeout) -> %% See run_feature_flags_mod_on_remote_node/4 for %% an explanation why we consider this node a 3.7.x %% pre-feature-flags node. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: no feature flags support on node `~s`, " "consider the feature flags unsupported: ~p", [Node, FeatureNames]), false; {error, Reason} -> - rabbit_log:error("Feature flags: error while querying `~p` " - "support on node ~s: ~p", - [FeatureNames, Node, Reason]), + rabbit_log_feature_flags:error( + "Feature flags: error while querying `~p` support on " + "node ~s: ~p", + [FeatureNames, Node, Reason]), false; true -> - rabbit_log:debug("Feature flags: node `~s` supports `~p`", - [Node, FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` supports `~p`", + [Node, FeatureNames]), true; false -> - rabbit_log:debug("Feature flags: node `~s` does not support `~p`; " - "stopping query here", - [Node, FeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` does not support `~p`; " + "stopping query here", + [Node, FeatureNames]), false end. @@ -1704,37 +1838,41 @@ check_node_compatibility(Node, Timeout) -> %% The goal is that such feature flags are not blocking the %% communication between nodes because the code (which would %% break) is missing on those nodes. Therefore they should not be - %% considered when determinig compatibility. + %% considered when determining compatibility. exchange_feature_flags_from_unknown_apps(Node, Timeout), - %% FIXME FIXME FIXME - %% Quand on tente de mettre deux nœuds en cluster, on a : + %% FIXME: + %% When we try to cluster two nodes, we get: %% Feature flags: starting an unclustered node: all feature flags %% will be enabled by default - %% Ça ne devrait sans doute pas être le cas... + %% It should probably not be the case... %% We can now proceed with the actual compatibility check. - rabbit_log:debug("Feature flags: node `~s` compatibility check, part 1/2", - [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` compatibility check, part 1/2", + [Node]), Part1 = local_enabled_feature_flags_is_supported_remotely(Node, Timeout), - rabbit_log:debug("Feature flags: node `~s` compatibility check, part 2/2", - [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` compatibility check, part 2/2", + [Node]), Part2 = remote_enabled_feature_flags_is_supported_locally(Node, Timeout), case {Part1, Part2} of {true, true} -> - rabbit_log:debug("Feature flags: node `~s` is compatible", [Node]), + rabbit_log_feature_flags:debug( + "Feature flags: node `~s` is compatible", + [Node]), ok; {false, _} -> - rabbit_log:error("Feature flags: node `~s` is INCOMPATIBLE: " - "feature flags enabled locally are not " - "supported remotely", - [Node]), + rabbit_log_feature_flags:error( + "Feature flags: node `~s` is INCOMPATIBLE: " + "feature flags enabled locally are not supported remotely", + [Node]), {error, incompatible_feature_flags}; {_, false} -> - rabbit_log:error("Feature flags: node `~s` is INCOMPATIBLE: " - "feature flags enabled remotely are not " - "supported locally", - [Node]), + rabbit_log_feature_flags:error( + "Feature flags: node `~s` is INCOMPATIBLE: " + "feature flags enabled remotely are not supported locally", + [Node]), {error, incompatible_feature_flags} end. @@ -1815,13 +1953,13 @@ run_feature_flags_mod_on_remote_node(Node, Function, Args, Timeout) -> %% (rabbit_misc:version_minor_equivalent/2) called from %% rabbit_mnesia:check_rabbit_consistency/2 already blocked %% this situation from happening before we reach this point. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: ~s:~s~p unavailable on node `~s`: " "assuming it is a RabbitMQ 3.7.x pre-feature-flags node", [?MODULE, Function, Args, Node]), {error, pre_feature_flags_rabbitmq}; {badrpc, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: error while running ~s:~s~p " "on node `~s`: ~p", [?MODULE, Function, Args, Node, Reason]), @@ -1837,29 +1975,30 @@ run_feature_flags_mod_on_remote_node(Node, Function, Args, Timeout) -> %% @private query_remote_feature_flags(Node, Which, Timeout) -> - rabbit_log:debug("Feature flags: querying ~s feature flags " - "on node `~s`...", - [Which, Node]), + rabbit_log_feature_flags:debug( + "Feature flags: querying ~s feature flags on node `~s`...", + [Which, Node]), case run_feature_flags_mod_on_remote_node(Node, list, [Which], Timeout) of {error, pre_feature_flags_rabbitmq} -> %% See run_feature_flags_mod_on_remote_node/4 for %% an explanation why we consider this node a 3.7.x %% pre-feature-flags node. - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: no feature flags support on node `~s`, " "consider the list of feature flags empty", [Node]), #{}; {error, Reason} = Error -> - rabbit_log:error( + rabbit_log_feature_flags:error( "Feature flags: error while querying ~s feature flags " "on node `~s`: ~p", [Which, Node, Reason]), Error; RemoteFeatureFlags when is_map(RemoteFeatureFlags) -> RemoteFeatureNames = maps:keys(RemoteFeatureFlags), - rabbit_log:debug("Feature flags: querying ~s feature flags " - "on node `~s` done; ~s features: ~p", - [Which, Node, Which, RemoteFeatureNames]), + rabbit_log_feature_flags:debug( + "Feature flags: querying ~s feature flags on node `~s` " + "done; ~s features: ~p", + [Which, Node, Which, RemoteFeatureNames]), RemoteFeatureFlags end. @@ -1887,11 +2026,16 @@ merge_feature_flags_from_unknown_apps(FeatureFlags) end, #{}, FeatureFlags), - rabbit_log:debug( - "Feature flags: register feature flags provided by applications " - "unknown locally: ~p", - [maps:keys(FeatureFlagsFromUnknownApps)]), - initialize_registry(FeatureFlagsFromUnknownApps). + case maps:keys(FeatureFlagsFromUnknownApps) of + [] -> + ok; + _ -> + rabbit_log_feature_flags:debug( + "Feature flags: register feature flags provided by applications " + "unknown locally: ~p", + [maps:keys(FeatureFlagsFromUnknownApps)]), + initialize_registry(FeatureFlagsFromUnknownApps) + end. exchange_feature_flags_from_unknown_apps(Node, Timeout) -> %% The first step is to fetch feature flags from Erlang applications @@ -1950,7 +2094,7 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> FeatureNames = get_forced_feature_flag_names(), case remote_nodes() of [] when FeatureNames =:= undefined -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered node " "for the first time: all feature flags will be " "enabled by default"), @@ -1958,19 +2102,19 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> [] -> case FeatureNames of [] -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered " "node for the first time: all feature " "flags are forcibly left disabled from " - "the RABBITMQ_FEATURE_FLAGS environment " + "the $RABBITMQ_FEATURE_FLAGS environment " "variable"), ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered " "node for the first time: only the " "following feature flags specified in " - "the RABBITMQ_FEATURE_FLAGS environment " + "the $RABBITMQ_FEATURE_FLAGS environment " "variable will be enabled: ~p", [FeatureNames]), enable(FeatureNames) @@ -1979,7 +2123,7 @@ sync_feature_flags_with_cluster([], NodeIsVirgin, _) -> ok end; false -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: starting an unclustered node which is " "already initialized: all feature flags left in their " "current state"), @@ -1994,14 +2138,15 @@ sync_feature_flags_with_cluster1([], _) -> ok; sync_feature_flags_with_cluster1(RemoteNodes, Timeout) -> RandomRemoteNode = pick_one_node(RemoteNodes), - rabbit_log:debug("Feature flags: SYNCING FEATURE FLAGS with node `~s`...", - [RandomRemoteNode]), + rabbit_log_feature_flags:debug( + "Feature flags: SYNCING FEATURE FLAGS with node `~s`...", + [RandomRemoteNode]), case query_remote_feature_flags(RandomRemoteNode, enabled, Timeout) of {error, _} = Error -> Error; RemoteFeatureFlags -> RemoteFeatureNames = maps:keys(RemoteFeatureFlags), - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: enabling locally feature flags already " "enabled on node `~s`...", [RandomRemoteNode]), @@ -2016,7 +2161,7 @@ sync_feature_flags_with_cluster1(RemoteNodes, Timeout) -> sync_feature_flags_with_cluster2(RandomRemoteNode, Timeout) -> LocalFeatureNames = maps:keys(list(enabled)), - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: enabling on node `~s` feature flags already " "enabled locally...", [RandomRemoteNode]), @@ -2070,12 +2215,13 @@ get_forced_feature_flag_names() -> end, case Ret of undefined -> ok; - [] -> rabbit_log:info("Feature flags: automatic enablement " - "of feature flags disabled (i.e. none " - "will be enabled automatically)", []); - _ -> rabbit_log:info("Feature flags: automatic enablement " - "of feature flags limited to the " - "following list: ~p", [Ret]) + [] -> rabbit_log_feature_flags:info( + "Feature flags: automatic enablement of feature " + "flags disabled (i.e. none will be enabled " + "automatically)"); + _ -> rabbit_log_feature_flags:info( + "Feature flags: automatic enablement of feature " + "flags limited to the following list: ~p", [Ret]) end, Ret. @@ -2083,9 +2229,12 @@ get_forced_feature_flag_names() -> %% @private get_forced_feature_flag_names_from_env() -> - case os:getenv("RABBITMQ_FEATURE_FLAGS") of - false -> undefined; - Value -> [list_to_atom(V) ||V <- string:lexemes(Value, ",")] + case rabbit_prelaunch:get_context() of + #{forced_feature_flags_on_init := ForcedFFs} + when is_list(ForcedFFs) -> + ForcedFFs; + _ -> + undefined end. -spec get_forced_feature_flag_names_from_config() -> [feature_name()] | undefined. @@ -2114,7 +2263,8 @@ get_forced_feature_flag_names_from_config() -> verify_which_feature_flags_are_actually_enabled() -> AllFeatureFlags = list(all), EnabledFeatureNames = read_enabled_feature_flags_list(), - rabbit_log:debug("Feature flags: double-checking feature flag states..."), + rabbit_log_feature_flags:debug( + "Feature flags: double-checking feature flag states..."), %% In case the previous instance of the node failed to write the %% feature flags list file, we want to double-check the list of %% enabled feature flags read from disk. For each feature flag, @@ -2147,7 +2297,7 @@ verify_which_feature_flags_are_actually_enabled() -> WereDisabled = EnabledFeatureNames -- RepairedEnabledFeatureNames, case {WereEnabled, WereDisabled} of {[], []} -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: the previous instance of this node " "must have failed to write the `feature_flags` " "file at `~s`:", @@ -2155,13 +2305,13 @@ verify_which_feature_flags_are_actually_enabled() -> end, case WereEnabled of [] -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: - list of previously enabled " "feature flags now marked as such: ~p", [WereEnabled]) end, case WereDisabled of [] -> ok; - _ -> rabbit_log:warning( + _ -> rabbit_log_feature_flags:warning( "Feature flags: - list of previously disabled " "feature flags now marked as such: ~p", [WereDisabled]) end, @@ -2172,7 +2322,7 @@ verify_which_feature_flags_are_actually_enabled() -> EnabledFeatureNames -> ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: write the repaired list of enabled feature " "flags"), WrittenToDisk = ok =:= try_to_write_enabled_feature_flags_list( @@ -2190,7 +2340,7 @@ verify_which_feature_flags_are_actually_enabled() -> refresh_feature_flags_after_app_load([]) -> ok; refresh_feature_flags_after_app_load(Apps) -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: ~p -> refreshing feature flags", [Apps]), @@ -2211,7 +2361,7 @@ refresh_feature_flags_after_app_load(Apps) -> [] -> ok; _ -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: feature flags already " "supported: ~p", [lists:sort(AlreadySupportedFeatureNames)]) @@ -2230,7 +2380,7 @@ refresh_feature_flags_after_app_load(Apps) -> [] -> ok; NewSupportedFeatureNames -> - rabbit_log:debug( + rabbit_log_feature_flags:debug( "Feature flags: new apps loaded: new feature flags (unseen so " "far): ~p ", [lists:sort(NewSupportedFeatureNames)]) diff --git a/deps/rabbit/src/rabbit_ff_registry.erl b/deps/rabbit/src/rabbit_ff_registry.erl index 1f0c9c0..2587f8e 100644 --- a/deps/rabbit/src/rabbit_ff_registry.erl +++ b/deps/rabbit/src/rabbit_ff_registry.erl @@ -37,6 +37,10 @@ is_registry_initialized/0, is_registry_written_to_disk/0]). +-ifdef(TEST). +-on_load(on_load/0). +-endif. + -spec get(rabbit_feature_flags:feature_name()) -> rabbit_feature_flags:feature_props() | undefined. %% @doc @@ -183,3 +187,12 @@ always_return_true() -> always_return_false() -> not always_return_true(). + +-ifdef(TEST). +on_load() -> + _ = (catch rabbit_log_feature_flags:debug( + "Feature flags: Loading initial (uninitialized) registry " + "module (~p)", + [self()])), + ok. +-endif. diff --git a/deps/rabbit/src/rabbit_fifo.erl b/deps/rabbit/src/rabbit_fifo.erl index d0b5696..0c99c30 100644 --- a/deps/rabbit/src/rabbit_fifo.erl +++ b/deps/rabbit/src/rabbit_fifo.erl @@ -609,15 +609,28 @@ tick(_Ts, #?MODULE{cfg = #cfg{name = Name, overview(#?MODULE{consumers = Cons, enqueuers = Enqs, release_cursors = Cursors, + enqueue_count = EnqCount, msg_bytes_enqueue = EnqueueBytes, - msg_bytes_checkout = CheckoutBytes} = State) -> + msg_bytes_checkout = CheckoutBytes, + cfg = Cfg} = State) -> + Conf = #{name => Cfg#cfg.name, + resource => Cfg#cfg.resource, + release_cursor_interval => Cfg#cfg.release_cursor_interval, + dead_lettering_enabled => undefined =/= Cfg#cfg.dead_letter_handler, + max_length => Cfg#cfg.max_length, + max_bytes => Cfg#cfg.max_bytes, + consumer_strategy => Cfg#cfg.consumer_strategy, + max_in_memory_length => Cfg#cfg.max_in_memory_length, + max_in_memory_bytes => Cfg#cfg.max_in_memory_bytes}, #{type => ?MODULE, + config => Conf, num_consumers => maps:size(Cons), num_checked_out => num_checked_out(State), num_enqueuers => maps:size(Enqs), num_ready_messages => messages_ready(State), num_messages => messages_total(State), num_release_cursors => lqueue:len(Cursors), + release_crusor_enqueue_counter => EnqCount, enqueue_message_bytes => EnqueueBytes, checkout_message_bytes => CheckoutBytes}. @@ -633,26 +646,51 @@ get_checked_out(Cid, From, To, #?MODULE{consumers = Consumers}) -> [] end. +-record(aux_gc, {last_raft_idx = 0 :: ra:index()}). +-record(aux, {name :: atom(), + utilisation :: term(), + gc = #aux_gc{} :: #aux_gc{}}). + init_aux(Name) when is_atom(Name) -> %% TODO: catch specific exception throw if table already exists ok = ra_machine_ets:create_table(rabbit_fifo_usage, [named_table, set, public, {write_concurrency, true}]), Now = erlang:monotonic_time(micro_seconds), - {Name, {inactive, Now, 1, 1.0}}. + #aux{name = Name, + utilisation = {inactive, Now, 1, 1.0}}. -handle_aux(_, cast, Cmd, {Name, Use0}, Log, _) -> - Use = case Cmd of +handle_aux(_RaState, cast, Cmd, #aux{name = Name, + utilisation = Use0} = State0, + Log, MacState) -> + State = case Cmd of _ when Cmd == active orelse Cmd == inactive -> - update_use(Use0, Cmd); + State0#aux{utilisation = update_use(Use0, Cmd)}; tick -> true = ets:insert(rabbit_fifo_usage, {Name, utilisation(Use0)}), - Use0; + eval_gc(Log, MacState, State0); eval -> - Use0 + State0 end, - {no_reply, {Name, Use}, Log}. + {no_reply, State, Log}. + +eval_gc(Log, #?MODULE{cfg = #cfg{resource = QR}} = MacState, + #aux{gc = #aux_gc{last_raft_idx = LastGcIdx} = Gc} = AuxState) -> + {Idx, _} = ra_log:last_index_term(Log), + {memory, Mem} = erlang:process_info(self(), memory), + case messages_total(MacState) of + 0 when Idx > LastGcIdx andalso + Mem > ?GC_MEM_LIMIT_B -> + garbage_collect(), + {memory, MemAfter} = erlang:process_info(self(), memory), + rabbit_log:debug("~s: full GC sweep complete. " + "Process memory reduced from ~.2fMB to ~.2fMB.", + [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), + AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}}; + _ -> + AuxState + end. %%% Queries @@ -1022,15 +1060,20 @@ maybe_store_dehydrated_state(RaftIdx, %% the incoming enqueue must already have been dropped State0; true -> - State = convert_prefix_msgs(State0), - {Time, Dehydrated} = timer:tc(fun () -> dehydrate_state(State) end), - rabbit_log:info("dehydrating state took ~bms", [Time div 1000]), + Interval = case Base of + 0 -> 0; + _ -> + Total = messages_total(State0), + min(max(Total, Base), + ?RELEASE_CURSOR_EVERY_MAX) + end, + State = convert_prefix_msgs( + State0#?MODULE{cfg = Cfg#cfg{release_cursor_interval = + {Base, Interval}}}), + Dehydrated = dehydrate_state(State), Cursor = {release_cursor, RaftIdx, Dehydrated}, Cursors = lqueue:in(Cursor, Cursors0), - Interval = lqueue:len(Cursors) * Base, - State#?MODULE{release_cursors = Cursors, - cfg = Cfg#cfg{release_cursor_interval = - {Base, Interval}}} + State#?MODULE{release_cursors = Cursors} end; maybe_store_dehydrated_state(RaftIdx, #?MODULE{cfg = @@ -1098,13 +1141,19 @@ return(#{index := IncomingRaftIdx} = Meta, ConsumerId, Returned, return_one(MsgId, MsgNum, Msg, S0, E0, ConsumerId) end, {State0, Effects0}, Returned), - #{ConsumerId := Con0} = Cons0 = State1#?MODULE.consumers, - Con = Con0#consumer{credit = increase_credit(Con0, map_size(Returned))}, - {Cons, SQ, Effects2} = update_or_remove_sub(ConsumerId, Con, Cons0, - SQ0, Effects1), - State2 = State1#?MODULE{consumers = Cons, - service_queue = SQ}, - {State, ok, Effects} = checkout(Meta, State2, Effects2), + {State2, Effects3} = + case State1#?MODULE.consumers of + #{ConsumerId := Con0} = Cons0 -> + Con = Con0#consumer{credit = increase_credit(Con0, + map_size(Returned))}, + {Cons, SQ, Effects2} = update_or_remove_sub(ConsumerId, Con, + Cons0, SQ0, Effects1), + {State1#?MODULE{consumers = Cons, + service_queue = SQ}, Effects2}; + _ -> + {State1, Effects1} + end, + {State, ok, Effects} = checkout(Meta, State2, Effects3), update_smallest_raft_index(IncomingRaftIdx, State, Effects). % used to processes messages that are finished diff --git a/deps/rabbit/src/rabbit_fifo.hrl b/deps/rabbit/src/rabbit_fifo.hrl index b9e967c..ebbaa9e 100644 --- a/deps/rabbit/src/rabbit_fifo.hrl +++ b/deps/rabbit/src/rabbit_fifo.hrl @@ -68,7 +68,13 @@ % represents a partially applied module call -define(RELEASE_CURSOR_EVERY, 64000). +-define(RELEASE_CURSOR_EVERY_MAX, 3200000). -define(USE_AVG_HALF_LIFE, 10000.0). +%% an average QQ without any message uses about 100KB so setting this limit +%% to ~10 times that should be relatively safe. +-define(GC_MEM_LIMIT_B, 2000000). + +-define(MB, 1048576). -record(consumer, {meta = #{} :: consumer_meta(), diff --git a/deps/rabbit/src/rabbit_fifo_client.erl b/deps/rabbit/src/rabbit_fifo_client.erl index d9807e3..2779096 100644 --- a/deps/rabbit/src/rabbit_fifo_client.erl +++ b/deps/rabbit/src/rabbit_fifo_client.erl @@ -46,7 +46,7 @@ -include_lib("rabbit_common/include/rabbit.hrl"). --define(SOFT_LIMIT, 256). +-define(SOFT_LIMIT, 32). -define(TIMER_TIME, 10000). -type seq() :: non_neg_integer(). @@ -534,8 +534,8 @@ handle_ra_event(From, {applied, Seqs}, _ -> {internal, lists:reverse(Corrs), lists:reverse(Actions), State1} end; -handle_ra_event(Leader, {machine, {delivery, _ConsumerTag, _} = Del}, State0) -> - handle_delivery(Leader, Del, State0); +handle_ra_event(From, {machine, {delivery, _ConsumerTag, _} = Del}, State0) -> + handle_delivery(From, Del, State0); handle_ra_event(Leader, {machine, leader_change}, #state{leader = Leader} = State) -> %% leader already known @@ -546,11 +546,9 @@ handle_ra_event(Leader, {machine, leader_change}, State0) -> State = resend_all_pending(State0#state{leader = Leader}), {internal, [], [], State}; handle_ra_event(_From, {rejected, {not_leader, undefined, _Seq}}, State0) -> - % TODO: how should these be handled? re-sent on timer or try random - {internal, [], [], State0}; + % set timer to try find leder and resend + {internal, [], [], set_timer(State0)}; handle_ra_event(_From, {rejected, {not_leader, Leader, Seq}}, State0) -> - % ?INFO("rabbit_fifo_client: rejected ~b not leader ~w leader: ~w~n", - % [Seq, From, Leader]), State1 = State0#state{leader = Leader}, State = resend(Seq, State1), {internal, [], [], State}; @@ -658,9 +656,11 @@ resend_all_pending(#state{pending = Pend} = State) -> Seqs = lists:sort(maps:keys(Pend)), lists:foldl(fun resend/2, State, Seqs). -handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, +handle_delivery(From, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, #state{consumer_deliveries = CDels0} = State0) -> {LastId, _} = lists:last(IdMsgs), + %% NB: deliveries may not be from the leader so we will not update the + %% tracked leader id here %% TODO: remove potential default allocation case maps:get(Tag, CDels0, #consumer{last_msg_id = -1}) of #consumer{last_msg_id = Prev} = C @@ -677,7 +677,7 @@ handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, %% When the node is disconnected the leader will return all checked %% out messages to the main queue to ensure they don't get stuck in %% case the node never comes back. - Missing = get_missing_deliveries(Leader, Prev+1, FstId-1, Tag), + Missing = get_missing_deliveries(From, Prev+1, FstId-1, Tag), Del = {delivery, Tag, Missing ++ IdMsgs}, {Del, State0#state{consumer_deliveries = update_consumer(Tag, LastId, @@ -689,7 +689,7 @@ handle_delivery(Leader, {delivery, Tag, [{FstId, _} | _] = IdMsgs} = Del0, [] -> {internal, [], [], State0}; IdMsgs2 -> - handle_delivery(Leader, {delivery, Tag, IdMsgs2}, State0) + handle_delivery(From, {delivery, Tag, IdMsgs2}, State0) end; _ when FstId =:= 0 -> % the very first delivery diff --git a/deps/rabbit/src/rabbit_hipe.erl b/deps/rabbit/src/rabbit_hipe.erl index bb13a3b..eb167fc 100644 --- a/deps/rabbit/src/rabbit_hipe.erl +++ b/deps/rabbit/src/rabbit_hipe.erl @@ -1,3 +1,19 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + -module(rabbit_hipe). %% HiPE compilation uses multiple cores anyway, but some bits are @@ -20,17 +36,18 @@ maybe_hipe_compile() -> end. log_hipe_result({ok, disabled}) -> - ok; + rabbit_log_prelaunch:info( + "HiPE disabled: no modules were natively recompiled.~n", []); log_hipe_result({ok, already_compiled}) -> - rabbit_log:info( + rabbit_log_prelaunch:info( "HiPE in use: modules already natively compiled.~n", []); log_hipe_result({ok, Count, Duration}) -> - rabbit_log:info( + rabbit_log_prelaunch:info( "HiPE in use: compiled ~B modules in ~Bs.~n", [Count, Duration]); log_hipe_result(false) -> io:format( "~nNot HiPE compiling: HiPE not found in this Erlang installation.~n"), - rabbit_log:warning( + rabbit_log_prelaunch:warning( "Not HiPE compiling: HiPE not found in this Erlang installation.~n"). hipe_compile() -> diff --git a/deps/rabbit/src/rabbit_lager.erl b/deps/rabbit/src/rabbit_lager.erl index e0318cd..aa226bc 100644 --- a/deps/rabbit/src/rabbit_lager.erl +++ b/deps/rabbit/src/rabbit_lager.erl @@ -243,6 +243,13 @@ configure_lager() -> end; _ -> ok end, + case application:get_env(lager, colored) of + undefined -> + UseColor = rabbit_prelaunch_early_logging:use_colored_logging(), + application:set_env(lager, colored, UseColor); + _ -> + ok + end, %% Set rabbit.log config variable based on environment. prepare_rabbit_log_config(), %% Configure syslog library. @@ -273,7 +280,7 @@ configure_lager() -> LogConfig = application:get_env(rabbit, log, []), LogLevels = application:get_env(rabbit, log_levels, []), Categories = proplists:get_value(categories, LogConfig, []), - CategoriesConfig = case {Categories, LogLevels} of + CategoriesConfig0 = case {Categories, LogLevels} of {[], []} -> []; {[], LogLevels} -> io:format("Using deprecated config parameter 'log_levels'. " @@ -283,13 +290,41 @@ configure_lager() -> LogLevels); {Categories, []} -> Categories; - {Categories, LogLevels} -> + {Categories, _} -> io:format("Using the deprecated config parameter 'rabbit.log_levels' together " "with a new parameter for log categories." " 'rabbit.log_levels' will be ignored. Please remove it from the config. More at " "https://rabbitmq.com/logging.html"), Categories end, + LogLevelsFromContext = case rabbit_prelaunch:get_context() of + #{log_levels := LL} -> LL; + _ -> undefined + end, + Fun = fun + (global, _, CC) -> + CC; + (color, _, CC) -> + CC; + (CategoryS, LogLevel, CC) -> + Category = list_to_atom(CategoryS), + CCEntry = proplists:get_value( + Category, CC, []), + CCEntry1 = lists:ukeymerge( + 1, + [{level, LogLevel}], + lists:ukeysort(1, CCEntry)), + lists:keystore( + Category, 1, CC, {Category, CCEntry1}) + end, + CategoriesConfig = case LogLevelsFromContext of + undefined -> + CategoriesConfig0; + _ -> + maps:fold(Fun, + CategoriesConfig0, + LogLevelsFromContext) + end, SinkConfigs = lists:map( fun({Name, Config}) -> {rabbit_log:make_internal_sink_name(Name), Config} @@ -365,7 +400,10 @@ lager_backend(exchange) -> lager_exchange_backend. %% Syslog backend is using an old API for configuration and %% does not support proplists. generate_handler(syslog_lager_backend=Backend, HandlerConfig) -> - DefaultConfigVal = default_config_value(level), + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, Level = proplists:get_value(level, HandlerConfig, DefaultConfigVal), ok = configure_handler_backend(Backend), [{Backend, @@ -383,19 +421,61 @@ configure_handler_backend(_Backend) -> ok. default_handler_config(lager_console_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}]; + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, console})}]; default_handler_config(lager_exchange_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}]; + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, exchange})}]; default_handler_config(lager_file_backend) -> - [{level, default_config_value(level)}, - {formatter_config, default_config_value(formatter_config)}, + %% The default log level is set to `debug` because the actual + %% filtering is made at the sink level. We want to accept all + %% messages here. + DefaultConfigVal = debug, + [{level, DefaultConfigVal}, + {formatter_config, default_config_value({formatter_config, file})}, {date, ""}, {size, 0}]. -default_config_value(level) -> info; -default_config_value(formatter_config) -> +default_config_value(level) -> + LogConfig = application:get_env(rabbit, log, []), + FoldFun = fun + ({_, Cfg}, LL) when is_list(Cfg) -> + NewLL = proplists:get_value(level, Cfg, LL), + case LL of + undefined -> + NewLL; + _ -> + MoreVerbose = lager_util:level_to_num(NewLL) > lager_util:level_to_num(LL), + case MoreVerbose of + true -> NewLL; + false -> LL + end + end; + (_, LL) -> + LL + end, + FoundLL = lists:foldl(FoldFun, undefined, LogConfig), + case FoundLL of + undefined -> info; + _ -> FoundLL + end; +default_config_value({formatter_config, console}) -> + EOL = case application:get_env(lager, colored) of + {ok, true} -> "\e[0m\r\n"; + _ -> "\r\n" + end, + [date, " ", time, " ", color, "[", severity, "] ", + {pid, ""}, + " ", message, EOL]; +default_config_value({formatter_config, _}) -> [date, " ", time, " ", color, "[", severity, "] ", {pid, ""}, " ", message, "\n"]. @@ -417,12 +497,14 @@ prepare_rabbit_log_config() -> tty -> set_env_default_log_console(); FileName when is_list(FileName) -> - case os:getenv("RABBITMQ_LOGS_source") of + case rabbit_prelaunch:get_context() of %% The user explicitly sets $RABBITMQ_LOGS; %% we should override a file location even %% if it's set in rabbitmq.config - "environment" -> set_env_default_log_file(FileName, override); - _ -> set_env_default_log_file(FileName, keep) + #{var_origins := #{main_log_file := environment}} -> + set_env_default_log_file(FileName, override); + _ -> + set_env_default_log_file(FileName, keep) end end, @@ -493,24 +575,36 @@ set_env_upgrade_log_file(FileName) -> ok = application:set_env(rabbit, log, NewLogConfig). generate_lager_sinks(SinkNames, SinkConfigs) -> + LogLevels = case rabbit_prelaunch:get_context() of + #{log_levels := LL} -> LL; + _ -> undefined + end, + DefaultLogLevel = case LogLevels of + #{global := LogLevel} -> + LogLevel; + _ -> + default_config_value(level) + end, lists:map(fun(SinkName) -> SinkConfig = proplists:get_value(SinkName, SinkConfigs, []), SinkHandlers = case proplists:get_value(file, SinkConfig, false) of %% If no file defined - forward everything to the default backend false -> - ForwarderLevel = proplists:get_value(level, SinkConfig, inherit), + ForwarderLevel = proplists:get_value(level, + SinkConfig, + DefaultLogLevel), [{lager_forwarder_backend, [lager_util:make_internal_sink_name(lager), ForwarderLevel]}]; %% If a file defined - add a file backend to handlers and remove all default file backends. File -> %% Use `debug` as a default handler to not override a handler level - Level = proplists:get_value(level, SinkConfig, debug), + Level = proplists:get_value(level, SinkConfig, DefaultLogLevel), DefaultGeneratedHandlers = application:get_env(lager, rabbit_handlers, []), SinkFileHandlers = case proplists:get_value(lager_file_backend, DefaultGeneratedHandlers, undefined) of undefined -> %% Create a new file handler. %% `info` is a default level here. - FileLevel = proplists:get_value(level, SinkConfig, default_config_value(level)), + FileLevel = proplists:get_value(level, SinkConfig, DefaultLogLevel), generate_lager_handlers([{file, [{file, File}, {level, FileLevel}]}]); FileHandler -> %% Replace a filename in the handler @@ -596,27 +690,7 @@ maybe_configure_handler_backends([{Backend, _}|Backends]) -> maybe_configure_handler_backends(Backends). list_expected_sinks() -> - case application:get_env(rabbit, lager_extra_sinks) of - {ok, List} -> - List; - undefined -> - CompileOptions = proplists:get_value(options, - ?MODULE:module_info(compile), - []), - AutoList = [lager_util:make_internal_sink_name(M) - || M <- proplists:get_value(lager_extra_sinks, - CompileOptions, [])], - List = case lists:member(?LAGER_SINK, AutoList) of - true -> AutoList; - false -> [?LAGER_SINK | AutoList] - end, - %% Store the list in the application environment. If this - %% module is later cover-compiled, the compile option will - %% be lost, so we will be able to retrieve the list from the - %% application environment. - ok = application:set_env(rabbit, lager_extra_sinks, List), - List - end. + rabbit_prelaunch_early_logging:list_expected_sinks(). maybe_remove_logger_handler() -> M = logger, diff --git a/deps/rabbit/src/rabbit_log_tail.erl b/deps/rabbit/src/rabbit_log_tail.erl index 5551642..9fa6f7a 100644 --- a/deps/rabbit/src/rabbit_log_tail.erl +++ b/deps/rabbit/src/rabbit_log_tail.erl @@ -1,3 +1,19 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + -module(rabbit_log_tail). -export([tail_n_lines/2]). @@ -92,4 +108,4 @@ read_lines_from_position(File, GuessPosition, Eof) -> end. offset(Base, N) -> - max(0, Base - N * ?GUESS_OFFSET). \ No newline at end of file + max(0, Base - N * ?GUESS_OFFSET). diff --git a/deps/rabbit/src/rabbit_mirror_queue_misc.erl b/deps/rabbit/src/rabbit_mirror_queue_misc.erl index c1ae96b..503c0f4 100644 --- a/deps/rabbit/src/rabbit_mirror_queue_misc.erl +++ b/deps/rabbit/src/rabbit_mirror_queue_misc.erl @@ -243,11 +243,21 @@ add_mirror(QName, MirrorNode, SyncMode) -> #resource{virtual_host = VHost} = amqqueue:get_name(Q), case rabbit_vhost_sup_sup:get_vhost_sup(VHost, MirrorNode) of {ok, _} -> - SPid = rabbit_amqqueue_sup_sup:start_queue_process( + try + SPid = rabbit_amqqueue_sup_sup:start_queue_process( MirrorNode, Q, slave), - log_info(QName, "Adding mirror on node ~p: ~p~n", + log_info(QName, "Adding mirror on node ~p: ~p~n", [MirrorNode, SPid]), - rabbit_mirror_queue_slave:go(SPid, SyncMode); + rabbit_mirror_queue_slave:go(SPid, SyncMode) + of + _ -> ok + catch + error:QError -> + log_warning(QName, + "Unable to start queue mirror on node '~p'. " + "Target queue supervisor is not running: ~p~n", + [MirrorNode, QError]) + end; {error, Error} -> log_warning(QName, "Unable to start queue mirror on node '~p'. " diff --git a/deps/rabbit/src/rabbit_mnesia.erl b/deps/rabbit/src/rabbit_mnesia.erl index c1bf2f5..fdc5aac 100644 --- a/deps/rabbit/src/rabbit_mnesia.erl +++ b/deps/rabbit/src/rabbit_mnesia.erl @@ -59,8 +59,6 @@ -export([init_with_lock/3]). -endif. --include("rabbit.hrl"). - %%---------------------------------------------------------------------------- -export_type([node_type/0, cluster_status/0]). @@ -99,48 +97,63 @@ init() -> ok. init_with_lock() -> - {Retries, Timeout} = rabbit_peer_discovery:retry_timeout(), - init_with_lock(Retries, Timeout, fun init_from_config/0). + {Retries, Timeout} = rabbit_peer_discovery:locking_retry_timeout(), + init_with_lock(Retries, Timeout, fun run_peer_discovery/0). -init_with_lock(0, _, InitFromConfig) -> +init_with_lock(0, _, RunPeerDiscovery) -> case rabbit_peer_discovery:lock_acquisition_failure_mode() of ignore -> - rabbit_log:warning("Cannot acquire a lock during clustering", []), - InitFromConfig(), + rabbit_log:warning("Could not acquire a peer discovery lock, out of retries", []), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register(); fail -> exit(cannot_acquire_startup_lock) end; -init_with_lock(Retries, Timeout, InitFromConfig) -> - case rabbit_peer_discovery:lock() of +init_with_lock(Retries, Timeout, RunPeerDiscovery) -> + LockResult = rabbit_peer_discovery:lock(), + rabbit_log:debug("rabbit_peer_discovery:lock returned ~p", [LockResult]), + case LockResult of not_supported -> rabbit_log:info("Peer discovery backend does not support locking, falling back to randomized delay"), %% See rabbitmq/rabbitmq-server#1202 for details. rabbit_peer_discovery:maybe_inject_randomized_delay(), - InitFromConfig(), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register(); {error, _Reason} -> timer:sleep(Timeout), - init_with_lock(Retries - 1, Timeout, InitFromConfig); + init_with_lock(Retries - 1, Timeout, RunPeerDiscovery); {ok, Data} -> try - InitFromConfig(), + RunPeerDiscovery(), rabbit_peer_discovery:maybe_register() after rabbit_peer_discovery:unlock(Data) end end. -init_from_config() -> +-spec run_peer_discovery() -> ok | {[node()], node_type()}. +run_peer_discovery() -> + {RetriesLeft, DelayInterval} = rabbit_peer_discovery:discovery_retries(), + run_peer_discovery_with_retries(RetriesLeft, DelayInterval). + +-spec run_peer_discovery_with_retries(non_neg_integer(), non_neg_integer()) -> ok | {[node()], node_type()}. +run_peer_discovery_with_retries(0, _DelayInterval) -> + ok; +run_peer_discovery_with_retries(RetriesLeft, DelayInterval) -> FindBadNodeNames = fun (Name, BadNames) when is_atom(Name) -> BadNames; (Name, BadNames) -> [Name | BadNames] end, - {DiscoveredNodes, NodeType} = + {DiscoveredNodes0, NodeType} = case rabbit_peer_discovery:discover_cluster_nodes() of + {error, Reason} -> + RetriesLeft1 = RetriesLeft - 1, + rabbit_log:error("Peer discovery returned an error: ~p. Will retry after a delay of ~b, ~b retries left...", + [Reason, DelayInterval, RetriesLeft1]), + timer:sleep(DelayInterval), + run_peer_discovery_with_retries(RetriesLeft1, DelayInterval); {ok, {Nodes, Type} = Config} - when is_list(Nodes) andalso - (Type == disc orelse Type == disk orelse Type == ram) -> + when is_list(Nodes) andalso (Type == disc orelse Type == disk orelse Type == ram) -> case lists:foldr(FindBadNodeNames, [], Nodes) of [] -> Config; BadNames -> e({invalid_cluster_node_names, BadNames}) @@ -150,6 +163,7 @@ init_from_config() -> {ok, _} -> e(invalid_cluster_nodes_conf) end, + DiscoveredNodes = lists:usort(DiscoveredNodes0), rabbit_log:info("All discovered existing cluster peers: ~s~n", [rabbit_peer_discovery:format_discovered_nodes(DiscoveredNodes)]), Peers = nodes_excl_me(DiscoveredNodes), @@ -169,6 +183,16 @@ init_from_config() -> %% reachable and compatible (in terms of Mnesia internal protocol version and such) %% cluster peers in order. join_discovered_peers(TryNodes, NodeType) -> + {RetriesLeft, DelayInterval} = rabbit_peer_discovery:discovery_retries(), + join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft, DelayInterval). + +join_discovered_peers_with_retries(TryNodes, _NodeType, 0, _DelayInterval) -> + rabbit_log:warning( + "Could not successfully contact any node of: ~s (as in Erlang distribution). " + "Starting as a blank standalone node...~n", + [string:join(lists:map(fun atom_to_list/1, TryNodes), ",")]), + init_db_and_upgrade([node()], disc, false, _Retry = true); +join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft, DelayInterval) -> case find_reachable_peer_to_cluster_with(nodes_excl_me(TryNodes)) of {ok, Node} -> rabbit_log:info("Node '~s' selected for auto-clustering~n", [Node]), @@ -177,11 +201,11 @@ join_discovered_peers(TryNodes, NodeType) -> rabbit_connection_tracking:boot(), rabbit_node_monitor:notify_joined_cluster(); none -> - rabbit_log:warning( - "Could not successfully contact any node of: ~s (as in Erlang distribution). " - "Starting as a blank standalone node...~n", - [string:join(lists:map(fun atom_to_list/1, TryNodes), ",")]), - init_db_and_upgrade([node()], disc, false, _Retry = true) + RetriesLeft1 = RetriesLeft - 1, + rabbit_log:error("Trying to join discovered peers failed. Will retry after a delay of ~b, ~b retries left...", + [DelayInterval, RetriesLeft1]), + timer:sleep(DelayInterval), + join_discovered_peers_with_retries(TryNodes, NodeType, RetriesLeft1, DelayInterval) end. %% Make the node join a cluster. The node will be reset automatically @@ -992,15 +1016,15 @@ is_virgin_node() -> true; {ok, []} -> true; - {ok, [File1, File2, File3]} -> - lists:usort([filename:join(dir(), File1), - filename:join(dir(), File2), - filename:join(dir(), File3)]) =:= - lists:usort([rabbit_node_monitor:cluster_status_filename(), - rabbit_node_monitor:running_nodes_filename(), - rabbit_node_monitor:quorum_filename()]); - {ok, _} -> - false + {ok, List0} -> + IgnoredFiles0 = + [rabbit_node_monitor:cluster_status_filename(), + rabbit_node_monitor:running_nodes_filename(), + rabbit_node_monitor:quorum_filename(), + rabbit_feature_flags:enabled_feature_flags_list_file()], + IgnoredFiles = [filename:basename(File) || File <- IgnoredFiles0], + List = List0 -- IgnoredFiles, + List =:= [] end. find_reachable_peer_to_cluster_with([]) -> diff --git a/deps/rabbit/src/rabbit_mnesia_rename.erl b/deps/rabbit/src/rabbit_mnesia_rename.erl index c74a390..5715816 100644 --- a/deps/rabbit/src/rabbit_mnesia_rename.erl +++ b/deps/rabbit/src/rabbit_mnesia_rename.erl @@ -281,4 +281,5 @@ become(BecomeNode) -> start_distribution(Name) -> rabbit_nodes:ensure_epmd(), - net_kernel:start([Name, rabbit_nodes:name_type()]). + NameType = rabbit_nodes_common:name_type(Name), + net_kernel:start([Name, NameType]). diff --git a/deps/rabbit/src/rabbit_msg_store.erl b/deps/rabbit/src/rabbit_msg_store.erl index c845575..2fd418d 100644 --- a/deps/rabbit/src/rabbit_msg_store.erl +++ b/deps/rabbit/src/rabbit_msg_store.erl @@ -797,8 +797,15 @@ init([Type, BaseDir, ClientRefs, StartupFunState]) -> }, %% If we didn't recover the msg location index then we need to %% rebuild it now. + Cleanliness = case CleanShutdown of + true -> "clean"; + false -> "unclean" + end, + rabbit_log:debug("Rebuilding message location index after ~s shutdown...~n", + [Cleanliness]), {Offset, State1 = #msstate { current_file = CurFile }} = build_index(CleanShutdown, StartupFunState, State), + rabbit_log:debug("Finished rebuilding index~n", []), %% read is only needed so that we can seek {ok, CurHdl} = open_file(Dir, filenum_to_name(CurFile), [read | ?WRITE_MODE]), @@ -1734,55 +1741,26 @@ build_index(true, _StartupFunState, end, {0, State}, FileSummaryEts); build_index(false, {MsgRefDeltaGen, MsgRefDeltaGenInit}, State = #msstate { dir = Dir }) -> + rabbit_log:debug("Rebuilding message refcount...~n", []), ok = count_msg_refs(MsgRefDeltaGen, MsgRefDeltaGenInit, State), + rabbit_log:debug("Done rebuilding message refcount~n", []), {ok, Pid} = gatherer:start_link(), case [filename_to_num(FileName) || FileName <- list_sorted_filenames(Dir, ?FILE_EXTENSION)] of - [] -> build_index(Pid, undefined, [State #msstate.current_file], - State); - Files -> {Offset, State1} = build_index(Pid, undefined, Files, State), + [] -> rebuild_index(Pid, [State #msstate.current_file], + State); + Files -> {Offset, State1} = rebuild_index(Pid, Files, State), {Offset, lists:foldl(fun delete_file_if_empty/2, State1, Files)} end. -build_index(Gatherer, Left, [], - State = #msstate { file_summary_ets = FileSummaryEts, - sum_valid_data = SumValid, - sum_file_size = SumFileSize }) -> - case gatherer:out(Gatherer) of - empty -> - unlink(Gatherer), - ok = gatherer:stop(Gatherer), - ok = index_clean_up_temporary_reference_count_entries(State), - Offset = case ets:lookup(FileSummaryEts, Left) of - [] -> 0; - [#file_summary { file_size = FileSize }] -> FileSize - end, - {Offset, State #msstate { current_file = Left }}; - {value, #file_summary { valid_total_size = ValidTotalSize, - file_size = FileSize } = FileSummary} -> - true = ets:insert_new(FileSummaryEts, FileSummary), - build_index(Gatherer, Left, [], - State #msstate { - sum_valid_data = SumValid + ValidTotalSize, - sum_file_size = SumFileSize + FileSize }) - end; -build_index(Gatherer, Left, [File|Files], State) -> - ok = gatherer:fork(Gatherer), - ok = worker_pool:submit_async( - fun () -> - link(Gatherer), - ok = build_index_worker(Gatherer, State, - Left, File, Files), - unlink(Gatherer), - ok - end), - build_index(Gatherer, File, Files, State). - build_index_worker(Gatherer, State = #msstate { dir = Dir }, Left, File, Files) -> + FileName = filenum_to_name(File), + rabbit_log:debug("Rebuilding message location index from ~p (~B file(s) remaining)~n", + [form_filename(Dir, FileName), length(Files)]), {ok, Messages, FileSize} = - scan_file_for_valid_messages(Dir, filenum_to_name(File)), + scan_file_for_valid_messages(Dir, FileName), {ValidMessages, ValidTotalSize} = lists:foldl( fun (Obj = {MsgId, TotalSize, Offset}, {VMAcc, VTSAcc}) -> @@ -1811,15 +1789,62 @@ build_index_worker(Gatherer, State = #msstate { dir = Dir }, [F|_] -> {F, FileSize} end, ok = gatherer:in(Gatherer, #file_summary { - file = File, - valid_total_size = ValidTotalSize, - left = Left, - right = Right, - file_size = FileSize1, - locked = false, - readers = 0 }), + file = File, + valid_total_size = ValidTotalSize, + left = Left, + right = Right, + file_size = FileSize1, + locked = false, + readers = 0 }), ok = gatherer:finish(Gatherer). +enqueue_build_index_workers(_Gatherer, _Left, [], _State) -> + exit(normal); +enqueue_build_index_workers(Gatherer, Left, [File|Files], State) -> + ok = worker_pool:dispatch_sync( + fun () -> + link(Gatherer), + ok = build_index_worker(Gatherer, State, + Left, File, Files), + unlink(Gatherer), + ok + end), + enqueue_build_index_workers(Gatherer, File, Files, State). + +reduce_index(Gatherer, LastFile, + State = #msstate { file_summary_ets = FileSummaryEts, + sum_valid_data = SumValid, + sum_file_size = SumFileSize }) -> + case gatherer:out(Gatherer) of + empty -> + ok = gatherer:stop(Gatherer), + ok = index_clean_up_temporary_reference_count_entries(State), + Offset = case ets:lookup(FileSummaryEts, LastFile) of + [] -> 0; + [#file_summary { file_size = FileSize }] -> FileSize + end, + {Offset, State #msstate { current_file = LastFile }}; + {value, #file_summary { valid_total_size = ValidTotalSize, + file_size = FileSize } = FileSummary} -> + true = ets:insert_new(FileSummaryEts, FileSummary), + reduce_index(Gatherer, LastFile, + State #msstate { + sum_valid_data = SumValid + ValidTotalSize, + sum_file_size = SumFileSize + FileSize }) + end. + +rebuild_index(Gatherer, Files, State) -> + lists:foreach(fun (_File) -> + ok = gatherer:fork(Gatherer) + end, Files), + Pid = spawn( + fun () -> + enqueue_build_index_workers(Gatherer, undefined, + Files, State) + end), + erlang:monitor(process, Pid), + reduce_index(Gatherer, lists:last(Files), State). + %%---------------------------------------------------------------------------- %% garbage collection / compaction / aggregation -- internal %%---------------------------------------------------------------------------- diff --git a/deps/rabbit/src/rabbit_nodes.erl b/deps/rabbit/src/rabbit_nodes.erl index eb582c6..787d84c 100644 --- a/deps/rabbit/src/rabbit_nodes.erl +++ b/deps/rabbit/src/rabbit_nodes.erl @@ -17,7 +17,7 @@ -module(rabbit_nodes). --export([names/1, diagnostics/1, make/1, parts/1, cookie_hash/0, +-export([names/1, diagnostics/1, make/1, make/2, parts/1, cookie_hash/0, is_running/2, is_process_running/2, cluster_name/0, set_cluster_name/1, set_cluster_name/2, ensure_epmd/0, all_running/0, name_type/0, running_count/0, @@ -41,10 +41,8 @@ boot() -> seed_user_provided_cluster_name(). name_type() -> - case os:getenv("RABBITMQ_USE_LONGNAME") of - "true" -> longnames; - _ -> shortnames - end. + #{nodename_type := NodeType} = rabbit_prelaunch:get_context(), + NodeType. -spec names(string()) -> rabbit_types:ok_or_error2([{string(), integer()}], term()). @@ -57,8 +55,11 @@ names(Hostname) -> diagnostics(Nodes) -> rabbit_nodes_common:diagnostics(Nodes). -make(NodeStr) -> - rabbit_nodes_common:make(NodeStr). +make(NameOrParts) -> + rabbit_nodes_common:make(NameOrParts). + +make(ShortName, Hostname) -> + make({ShortName, Hostname}). parts(NodeStr) -> rabbit_nodes_common:parts(NodeStr). diff --git a/deps/rabbit/src/rabbit_os_signal_handler.erl b/deps/rabbit/src/rabbit_os_signal_handler.erl deleted file mode 100644 index 8e4a80f..0000000 --- a/deps/rabbit/src/rabbit_os_signal_handler.erl +++ /dev/null @@ -1,60 +0,0 @@ --module(rabbit_os_signal_handler). - --behaviour(gen_event). - --export([start_link/0, boot/0, init/1, - handle_event/2, handle_call/2, handle_info/2, - terminate/2]). - -boot() -> - case os:type() of - {unix, _} -> - rabbit_sup:start_restartable_child(rabbit_os_signal_handler); - _ -> - rabbit_log:info("Will not override OS signal event handler (erl_signal_server) on this OS"), - ok - end. - -%% CAUTION: Signal handling in this module must be kept consistent -%% with the same handling in rabbitmq-server(8). - -start_link() -> - rabbit_log:info("Swapping OS signal event handler (erl_signal_server) for our own"), - %% delete any previous incarnations, otherwise we would be accumulating - %% handlers - _ = gen_event:delete_handler(erl_signal_server, ?MODULE, []), - %% swap the standard OTP signal handler if there is one - ok = gen_event:swap_sup_handler( - erl_signal_server, - %% what to swap - {erl_signal_handler, []}, - %% new event handler - {?MODULE, []}), - gen_event:start_link({local, ?MODULE}). - -init(_) -> - ok = os:set_signal(sigterm, handle), - ok = os:set_signal(sighup, ignore), - ok = os:set_signal(sigtstp, ignore), - {ok, #{}}. - -handle_event(sigterm, State) -> - error_logger:info_msg("Received a SIGTERM, will shut down gracefully"), - rabbit:stop_and_halt(), - {ok, State}; -handle_event(Msg, S) -> - %% Delegate all unknown events to the default OTP signal handler. - %% FIXME: We call erl_signal_handler's internal functions, this is - %% fragile. - {ok, ESHState} = erl_signal_handler:init(undefined), - _ = erl_signal_handler:handle_event(Msg, ESHState), - {ok, S}. - -handle_info(_, State) -> - {ok, State}. - -handle_call(_Request, State) -> - {ok, ok, State}. - -terminate(_Args, _State) -> - ok. diff --git a/deps/rabbit/src/rabbit_peer_discovery.erl b/deps/rabbit/src/rabbit_peer_discovery.erl index 077a299..ef62e02 100644 --- a/deps/rabbit/src/rabbit_peer_discovery.erl +++ b/deps/rabbit/src/rabbit_peer_discovery.erl @@ -23,21 +23,28 @@ -export([maybe_init/0, discover_cluster_nodes/0, backend/0, node_type/0, normalize/1, format_discovered_nodes/1, log_configured_backend/0, register/0, unregister/0, maybe_register/0, maybe_unregister/0, - maybe_inject_randomized_delay/0, lock/0, unlock/1]). --export([append_node_prefix/1, node_prefix/0, retry_timeout/0, + maybe_inject_randomized_delay/0, lock/0, unlock/1, + discovery_retries/0]). +-export([append_node_prefix/1, node_prefix/0, locking_retry_timeout/0, lock_acquisition_failure_mode/0]). -define(DEFAULT_BACKEND, rabbit_peer_discovery_classic_config). + %% what node type is used by default for this node when joining %% a new cluster as a virgin node -define(DEFAULT_NODE_TYPE, disc). + %% default node prefix to attach to discovered hostnames -define(DEFAULT_PREFIX, "rabbit"). + %% default randomized delay range, in seconds -define(DEFAULT_STARTUP_RANDOMIZED_DELAY, {5, 60}). --define(NODENAME_PART_SEPARATOR, "@"). +%% default discovery retries and interval. +-define(DEFAULT_DISCOVERY_RETRY_COUNT, 10). +-define(DEFAULT_DISCOVERY_RETRY_INTERVAL_MS, 500). +-define(NODENAME_PART_SEPARATOR, "@"). -spec backend() -> atom(). @@ -61,9 +68,9 @@ node_type() -> ?DEFAULT_NODE_TYPE end. --spec retry_timeout() -> {Retries :: integer(), Timeout :: integer()}. +-spec locking_retry_timeout() -> {Retries :: integer(), Timeout :: integer()}. -retry_timeout() -> +locking_retry_timeout() -> case application:get_env(rabbit, cluster_formation) of {ok, Proplist} -> Retries = proplists:get_value(lock_retry_limit, Proplist, 10), @@ -90,18 +97,21 @@ log_configured_backend() -> maybe_init() -> Backend = backend(), + code:ensure_loaded(Backend), case erlang:function_exported(Backend, init, 0) of true -> - rabbit_log:debug("Peer discovery backend supports initialisation."), + rabbit_log:debug("Peer discovery backend supports initialisation"), case Backend:init() of ok -> - rabbit_log:debug("Peer discovery backend initialisation succeeded."), + rabbit_log:debug("Peer discovery backend initialisation succeeded"), ok; {error, Error} -> rabbit_log:warning("Peer discovery backend initialisation failed: ~p.", [Error]), ok end; - false -> ok + false -> + rabbit_log:debug("Peer discovery backend does not support initialisation"), + ok end. @@ -146,6 +156,18 @@ maybe_unregister() -> ok end. +-spec discovery_retries() -> {Retries :: integer(), Interval :: integer()}. + +discovery_retries() -> + case application:get_env(rabbit, cluster_formation) of + {ok, Proplist} -> + Retries = proplists:get_value(discovery_retry_limit, Proplist, ?DEFAULT_DISCOVERY_RETRY_COUNT), + Interval = proplists:get_value(discovery_retry_interval, Proplist, ?DEFAULT_DISCOVERY_RETRY_INTERVAL_MS), + {Retries, Interval}; + undefined -> + {?DEFAULT_DISCOVERY_RETRY_COUNT, ?DEFAULT_DISCOVERY_RETRY_INTERVAL_MS} + end. + -spec maybe_inject_randomized_delay() -> ok. maybe_inject_randomized_delay() -> @@ -228,7 +250,7 @@ unregister() -> ok end. --spec lock() -> ok | {ok, Data :: term()} | not_supported | {error, Reason :: string()}. +-spec lock() -> {ok, Data :: term()} | not_supported | {error, Reason :: string()}. lock() -> Backend = backend(), diff --git a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl index 6f65653..360dcf6 100644 --- a/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl +++ b/deps/rabbit/src/rabbit_peer_discovery_classic_config.erl @@ -26,7 +26,8 @@ %% API %% --spec list_nodes() -> {ok, {Nodes :: [node()], rabbit_types:node_type()}}. +-spec list_nodes() -> {ok, {Nodes :: [node()], rabbit_types:node_type()}} | + {error, Reason :: string()}. list_nodes() -> case application:get_env(rabbit, cluster_nodes, {[], disc}) of @@ -37,7 +38,9 @@ list_nodes() -> -spec supports_registration() -> boolean(). supports_registration() -> - false. + %% If we don't have any nodes configured, skip randomized delay and similar operations + %% as we don't want to delay startup for no reason. MK. + has_any_peer_nodes_configured(). -spec register() -> ok. @@ -63,3 +66,19 @@ lock(_Node) -> unlock(_Data) -> ok. + +%% +%% Helpers +%% + +has_any_peer_nodes_configured() -> + case application:get_env(rabbit, cluster_nodes, []) of + {[], _NodeType} -> + false; + {Nodes, _NodeType} when is_list(Nodes) -> + true; + [] -> + false; + Nodes when is_list(Nodes) -> + true + end. diff --git a/deps/rabbit/src/rabbit_plugins.erl b/deps/rabbit/src/rabbit_plugins.erl index f4e3f66..bacb5e8 100644 --- a/deps/rabbit/src/rabbit_plugins.erl +++ b/deps/rabbit/src/rabbit_plugins.erl @@ -20,10 +20,9 @@ -export([setup/0, active/0, read_enabled/1, list/1, list/2, dependencies/3, running_plugins/0]). -export([ensure/1]). --export([extract_schemas/1]). -export([validate_plugins/1, format_invalid_plugins/1]). -export([is_strictly_plugin/1, strictly_plugins/2, strictly_plugins/1]). --export([plugins_dir/0, plugins_expand_dir/0, enabled_plugins_file/0]). +-export([plugins_dir/0, plugin_names/1, plugins_expand_dir/0, enabled_plugins_file/0]). % Export for testing purpose. -export([is_version_supported/2, validate_plugins/2]). @@ -49,7 +48,6 @@ ensure1(FileJustChanged0) -> FileJustChanged -> Enabled = read_enabled(OurFile), Wanted = prepare_plugins(Enabled), - rabbit_config:prepare_and_use_config(), Current = active(), Start = Wanted -- Current, Stop = Current -- Wanted, @@ -132,50 +130,6 @@ setup() -> Enabled = enabled_plugins(), prepare_plugins(Enabled). -extract_schemas(SchemaDir) -> - application:load(rabbit), - {ok, EnabledFile} = application:get_env(rabbit, enabled_plugins_file), - Enabled = read_enabled(EnabledFile), - - {ok, PluginsDistDir} = application:get_env(rabbit, plugins_dir), - - AllPlugins = list(PluginsDistDir), - Wanted = dependencies(false, Enabled, AllPlugins), - WantedPlugins = lookup_plugins(Wanted, AllPlugins), - [ extract_schema(Plugin, SchemaDir) || Plugin <- WantedPlugins ], - application:unload(rabbit), - ok. - -extract_schema(#plugin{type = ez, location = Location}, SchemaDir) -> - {ok, Files} = zip:extract(Location, - [memory, {file_filter, - fun(#zip_file{name = Name}) -> - string:str(Name, "priv/schema") > 0 - end}]), - lists:foreach( - fun({FileName, Content}) -> - ok = file:write_file(filename:join([SchemaDir, - filename:basename(FileName)]), - Content) - end, - Files), - ok; -extract_schema(#plugin{type = dir, location = Location}, SchemaDir) -> - PluginSchema = filename:join([Location, - "priv", - "schema"]), - case rabbit_file:is_dir(PluginSchema) of - false -> ok; - true -> - PluginSchemaFiles = - [ filename:join(PluginSchema, FileName) - || FileName <- rabbit_file:wildcard(".*\\.schema", - PluginSchema) ], - [ file:copy(SchemaFile, SchemaDir) - || SchemaFile <- PluginSchemaFiles ] - end. - - %% @doc Lists the plugins which are currently running. -spec active() -> [plugin_name()]. diff --git a/deps/rabbit/src/rabbit_prelaunch.erl b/deps/rabbit/src/rabbit_prelaunch.erl deleted file mode 100644 index 51deb0f..0000000 --- a/deps/rabbit/src/rabbit_prelaunch.erl +++ /dev/null @@ -1,161 +0,0 @@ -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License -%% at https://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and -%% limitations under the License. -%% -%% The Original Code is RabbitMQ. -%% -%% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2019 Pivotal Software, Inc. All rights reserved. -%% - --module(rabbit_prelaunch). - --export([start/0, stop/0]). --export([config_file_check/0]). - --import(rabbit_misc, [pget/2, pget/3]). - --include("rabbit.hrl"). - --define(SET_DIST_PORT, 0). --define(ERROR_CODE, 1). --define(DO_NOT_SET_DIST_PORT, 2). --define(EX_USAGE, 64). - -%%---------------------------------------------------------------------------- - --spec start() -> no_return(). - -start() -> - case init:get_plain_arguments() of - [NodeStr] -> - Node = rabbit_nodes:make(NodeStr), - {NodeName, NodeHost} = rabbit_nodes:parts(Node), - ok = duplicate_node_check(NodeName, NodeHost), - ok = dist_port_set_check(), - ok = dist_port_range_check(), - ok = dist_port_use_check(NodeHost), - ok = config_file_check(); - [] -> - %% Ignore running node while installing windows service - ok = dist_port_set_check(), - ok - end, - rabbit_misc:quit(?SET_DIST_PORT), - ok. - --spec stop() -> 'ok'. - -stop() -> - ok. - -%%---------------------------------------------------------------------------- - -config_file_check() -> - case rabbit_config:validate_config_files() of - ok -> ok; - {error, {ErrFmt, ErrArgs}} -> - ErrMsg = io_lib:format(ErrFmt, ErrArgs), - {{Year, Month, Day}, {Hour, Minute, Second, Milli}} = lager_util:localtime_ms(), - io:format(standard_error, "~b-~2..0b-~2..0b ~2..0b:~2..0b:~2..0b.~b [error] ~s", - [Year, Month, Day, Hour, Minute, Second, Milli, ErrMsg]), - rabbit_misc:quit(?EX_USAGE) - end. - -%% Check whether a node with the same name is already running -duplicate_node_check(NodeName, NodeHost) -> - case rabbit_nodes:names(NodeHost) of - {ok, NamePorts} -> - case proplists:is_defined(NodeName, NamePorts) of - true -> io:format( - "ERROR: node with name ~p already running on ~p~n", - [NodeName, NodeHost]), - rabbit_misc:quit(?ERROR_CODE); - false -> ok - end; - {error, EpmdReason} -> - io:format("ERROR: epmd error for host ~s: ~s~n", - [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]), - rabbit_misc:quit(?ERROR_CODE) - end. - -dist_port_set_check() -> - case get_config(os:getenv("RABBITMQ_CONFIG_ARG_FILE")) of - {ok, [Config]} -> - Kernel = pget(kernel, Config, []), - case {pget(inet_dist_listen_min, Kernel, none), - pget(inet_dist_listen_max, Kernel, none)} of - {none, none} -> ok; - _ -> rabbit_misc:quit(?DO_NOT_SET_DIST_PORT) - end; - {ok, _} -> - ok; - {error, _} -> - ok - end. - -get_config("") -> {error, nofile}; -get_config(File) -> - case consult_file(File) of - {ok, Contents} -> {ok, Contents}; - {error, _} = E -> E - end. - -consult_file(false) -> {error, nofile}; -consult_file(File) -> - FileName = case filename:extension(File) of - "" -> File ++ ".config"; - ".config" -> File; - _ -> "" - end, - file:consult(FileName). - -dist_port_range_check() -> - case os:getenv("RABBITMQ_DIST_PORT") of - false -> ok; - PortStr -> case catch list_to_integer(PortStr) of - Port when is_integer(Port) andalso Port > 65535 -> - rabbit_misc:quit(?DO_NOT_SET_DIST_PORT); - _ -> - ok - end - end. - -dist_port_use_check(NodeHost) -> - case os:getenv("RABBITMQ_DIST_PORT") of - false -> ok; - PortStr -> Port = list_to_integer(PortStr), - dist_port_use_check_ipv4(NodeHost, Port) - end. - -dist_port_use_check_ipv4(NodeHost, Port) -> - case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of - {ok, Sock} -> gen_tcp:close(Sock); - {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); - {error, _} -> dist_port_use_check_fail(Port, NodeHost) - end. - -dist_port_use_check_ipv6(NodeHost, Port) -> - case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of - {ok, Sock} -> gen_tcp:close(Sock); - {error, _} -> dist_port_use_check_fail(Port, NodeHost) - end. - --spec dist_port_use_check_fail(non_neg_integer(), string()) -> - no_return(). - -dist_port_use_check_fail(Port, Host) -> - {ok, Names} = rabbit_nodes:names(Host), - case [N || {N, P} <- Names, P =:= Port] of - [] -> io:format("ERROR: distribution port ~b in use on ~s " - "(by non-Erlang process?)~n", [Port, Host]); - [Name] -> io:format("ERROR: distribution port ~b in use by ~s@~s~n", - [Port, Name, Host]) - end, - rabbit_misc:quit(?ERROR_CODE). diff --git a/deps/rabbit/src/rabbit_prelaunch_cluster.erl b/deps/rabbit/src/rabbit_prelaunch_cluster.erl new file mode 100644 index 0000000..9d3cda9 --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_cluster.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_cluster). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Clustering =="), + rabbit_log_prelaunch:debug("Preparing cluster status files"), + rabbit_node_monitor:prepare_cluster_status_files(), + case Context of + #{initial_pass := true} -> + rabbit_log_prelaunch:debug("Upgrading Mnesia schema"), + ok = rabbit_upgrade:maybe_upgrade_mnesia(); + _ -> + ok + end, + %% It's important that the consistency check happens after + %% the upgrade, since if we are a secondary node the + %% primary node will have forgotten us + rabbit_log_prelaunch:debug("Checking cluster consistency"), + rabbit_mnesia:check_cluster_consistency(), + ok. diff --git a/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl new file mode 100644 index 0000000..c9c133f --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_enabled_plugins_file.erl @@ -0,0 +1,62 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_enabled_plugins_file). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Enabled plugins file =="), + update_enabled_plugins_file(Context). + +%% ------------------------------------------------------------------- +%% `enabled_plugins` file content initialization. +%% ------------------------------------------------------------------- + +update_enabled_plugins_file(#{enabled_plugins := undefined}) -> + ok; +update_enabled_plugins_file(#{enabled_plugins := all, + plugins_path := Path} = Context) -> + List = [P#plugin.name || P <- rabbit_plugins:list(Path)], + do_update_enabled_plugins_file(Context, List); +update_enabled_plugins_file(#{enabled_plugins := List} = Context) -> + do_update_enabled_plugins_file(Context, List). + +do_update_enabled_plugins_file(#{enabled_plugins_file := File}, List) -> + SortedList = lists:usort(List), + case SortedList of + [] -> + rabbit_log_prelaunch:debug("Marking all plugins as disabled"); + _ -> + rabbit_log_prelaunch:debug( + "Marking the following plugins as enabled:"), + [rabbit_log_prelaunch:debug(" - ~s", [P]) || P <- SortedList] + end, + Content = io_lib:format("~p.~n", [SortedList]), + case file:write_file(File, Content) of + ok -> + rabbit_log_prelaunch:debug("Wrote plugins file: ~ts", [File]), + ok; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to update enabled plugins file \"~ts\" " + "from $RABBITMQ_ENABLED_PLUGINS: ~ts", + [File, file:format_error(Reason)]), + throw({error, failed_to_update_enabled_plugins_file}) + end. diff --git a/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl new file mode 100644 index 0000000..5123d0b --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_feature_flags.erl @@ -0,0 +1,41 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_feature_flags). + +-export([setup/1]). + +setup(#{feature_flags_file := FFFile}) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Feature flags =="), + case filelib:ensure_dir(FFFile) of + ok -> + rabbit_log_prelaunch:debug("Initializing feature flags registry"), + case rabbit_feature_flags:initialize_registry() of + ok -> + ok; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to initialize feature flags registry: ~p", + [Reason]), + throw({error, failed_to_initialize_feature_flags_registry}) + end; + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to create feature flags file \"~ts\" directory: ~ts", + [FFFile, file:format_error(Reason)]), + throw({error, failed_to_create_feature_flags_file_directory}) + end. diff --git a/deps/rabbit/src/rabbit_prelaunch_hipe.erl b/deps/rabbit/src/rabbit_prelaunch_hipe.erl new file mode 100644 index 0000000..9357368 --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_hipe.erl @@ -0,0 +1,26 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_hipe). + +-export([setup/1]). + +setup(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== HiPE compitation =="), + HipeResult = rabbit_hipe:maybe_hipe_compile(), + rabbit_hipe:log_hipe_result(HipeResult), + ok. diff --git a/deps/rabbit/src/rabbit_prelaunch_logging.erl b/deps/rabbit/src/rabbit_prelaunch_logging.erl new file mode 100644 index 0000000..02903bf --- /dev/null +++ b/deps/rabbit/src/rabbit_prelaunch_logging.erl @@ -0,0 +1,84 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_prelaunch_logging). + +-export([setup/1]). + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Logging =="), + ok = set_ERL_CRASH_DUMP_envvar(Context), + ok = configure_lager(Context). + +set_ERL_CRASH_DUMP_envvar(#{log_base_dir := LogBaseDir}) -> + case os:getenv("ERL_CRASH_DUMP") of + false -> + ErlCrashDump = filename:join(LogBaseDir, "erl_crash.dump"), + rabbit_log_prelaunch:debug( + "Setting $ERL_CRASH_DUMP environment variable to \"~ts\"", + [ErlCrashDump]), + os:putenv("ERL_CRASH_DUMP", ErlCrashDump), + ok; + ErlCrashDump -> + rabbit_log_prelaunch:debug( + "$ERL_CRASH_DUMP environment variable already set to \"~ts\"", + [ErlCrashDump]), + ok + end. + +configure_lager(#{log_base_dir := LogBaseDir, + main_log_file := MainLog, + upgrade_log_file := UpgradeLog} = Context) -> + {SaslErrorLogger, + MainLagerHandler, + UpgradeLagerHandler} = case MainLog of + "-" -> + %% Log to STDOUT. + rabbit_log_prelaunch:debug( + "Logging to stdout"), + {tty, + tty, + tty}; + _ -> + rabbit_log_prelaunch:debug( + "Logging to:"), + [rabbit_log_prelaunch:debug( + " - ~ts", [Log]) + || Log <- [MainLog, UpgradeLog]], + %% Log to file. + {false, + MainLog, + UpgradeLog} + end, + + ok = application:set_env(lager, crash_log, "log/crash.log"), + + Fun = fun({App, Var, Value}) -> + case application:get_env(App, Var) of + undefined -> ok = application:set_env(App, Var, Value); + _ -> ok + end + end, + Vars = [{sasl, sasl_error_logger, SaslErrorLogger}, + {rabbit, lager_log_root, LogBaseDir}, + {rabbit, lager_default_file, MainLagerHandler}, + {rabbit, lager_upgrade_file, UpgradeLagerHandler}], + lists:foreach(Fun, Vars), + + ok = rabbit_lager:start_logger(), + + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context, false). diff --git a/deps/rabbit/src/rabbit_queue_index.erl b/deps/rabbit/src/rabbit_queue_index.erl index 4299568..dd7e973 100644 --- a/deps/rabbit/src/rabbit_queue_index.erl +++ b/deps/rabbit/src/rabbit_queue_index.erl @@ -717,7 +717,6 @@ queue_index_walker({start, DurableQueues}) when is_list(DurableQueues) -> queue_index_walker({next, Gatherer}) when is_pid(Gatherer) -> case gatherer:out(Gatherer) of empty -> - unlink(Gatherer), ok = gatherer:stop(Gatherer), finished; {value, {MsgId, Count}} -> @@ -1432,7 +1431,6 @@ foreach_queue_index(Funs) -> end) end || QueueDirName <- QueueDirNames], empty = gatherer:out(Gatherer), - unlink(Gatherer), ok = gatherer:stop(Gatherer). transform_queue(Dir, Gatherer, {JournalFun, SegmentFun}) -> diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl index ca7a2ea..0841821 100644 --- a/deps/rabbit/src/rabbit_quorum_queue.erl +++ b/deps/rabbit/src/rabbit_quorum_queue.erl @@ -198,11 +198,7 @@ cancel_consumer_handler(QName, {ConsumerTag, ChPid}) -> cancel_consumer(QName, ChPid, ConsumerTag) -> catch rabbit_core_metrics:consumer_deleted(ChPid, ConsumerTag, QName), - rabbit_event:notify(consumer_deleted, - [{consumer_tag, ConsumerTag}, - {channel, ChPid}, - {queue, QName}, - {user_who_performed_action, ?INTERNAL_USER}]). + emit_consumer_deleted(ChPid, ConsumerTag, QName, ?INTERNAL_USER). local_or_remote_handler(ChPid, Module, Function, Args) -> Node = node(ChPid), @@ -618,7 +614,8 @@ basic_get(Q, NoAck, CTag0, QState0) when ?amqqueue_is_quorum(Q) -> rabbit_types:ctag(), ExclusiveConsume :: boolean(), Args :: rabbit_framing:amqp_table(), ActingUser :: binary(), any(), rabbit_fifo_client:state()) -> - {'ok', rabbit_fifo_client:state()}. + {'ok', rabbit_fifo_client:state()} | + {error, timeout | term()}. basic_consume(Q, NoAck, ChPid, ConsumerPrefetchCount, ConsumerTag0, ExclusiveConsume, Args, @@ -636,7 +633,8 @@ basic_consume(Q, NoAck, ChPid, Other -> Other end, %% consumer info is used to describe the consumer properties - ConsumerMeta = #{ack => not NoAck, + AckRequired = not NoAck, + ConsumerMeta = #{ack => AckRequired, prefetch => ConsumerPrefetchCount, args => Args, username => ActingUser}, @@ -647,7 +645,6 @@ basic_consume(Q, NoAck, ChPid, case ra:local_query(QPid, fun rabbit_fifo:query_single_active_consumer/1) of {ok, {_, SacResult}, _} -> - SingleActiveConsumerOn = single_active_consumer_on(Q), {IsSingleActiveConsumer, ActivityStatus} = case {SingleActiveConsumerOn, SacResult} of {false, _} -> @@ -657,12 +654,14 @@ basic_consume(Q, NoAck, ChPid, _ -> {false, waiting} end, - - %% TODO: emit as rabbit_fifo effect - rabbit_core_metrics:consumer_created(ChPid, ConsumerTag, ExclusiveConsume, - not NoAck, QName, - ConsumerPrefetchCount, IsSingleActiveConsumer, - ActivityStatus, Args), + rabbit_core_metrics:consumer_created( + ChPid, ConsumerTag, ExclusiveConsume, + AckRequired, QName, + ConsumerPrefetchCount, IsSingleActiveConsumer, + ActivityStatus, Args), + emit_consumer_created(ChPid, ConsumerTag, ExclusiveConsume, + AckRequired, QName, Prefetch, + Args, none, ActingUser), {ok, QState}; {error, Error} -> Error; @@ -677,6 +676,25 @@ basic_cancel(ConsumerTag, ChPid, OkMsg, QState0) -> maybe_send_reply(ChPid, OkMsg), rabbit_fifo_client:cancel_checkout(quorum_ctag(ConsumerTag), QState0). +emit_consumer_created(ChPid, CTag, Exclusive, AckRequired, QName, PrefetchCount, Args, Ref, ActingUser) -> + rabbit_event:notify(consumer_created, + [{consumer_tag, CTag}, + {exclusive, Exclusive}, + {ack_required, AckRequired}, + {channel, ChPid}, + {queue, QName}, + {prefetch_count, PrefetchCount}, + {arguments, Args}, + {user_who_performed_action, ActingUser}], + Ref). + +emit_consumer_deleted(ChPid, ConsumerTag, QName, ActingUser) -> + rabbit_event:notify(consumer_deleted, + [{consumer_tag, ConsumerTag}, + {channel, ChPid}, + {queue, QName}, + {user_who_performed_action, ActingUser}]). + -spec stateless_deliver(amqqueue:ra_server_id(), rabbit_types:delivery()) -> 'ok'. stateless_deliver(ServerId, Delivery) -> diff --git a/deps/rabbit/src/rabbit_reader.erl b/deps/rabbit/src/rabbit_reader.erl index 39977dc..f2114b6 100644 --- a/deps/rabbit/src/rabbit_reader.erl +++ b/deps/rabbit/src/rabbit_reader.erl @@ -1560,14 +1560,10 @@ ssl_info(F, #v1{sock = Sock}) -> {error, _} -> ''; {ok, Items} -> P = proplists:get_value(protocol, Items), - CS = proplists:get_value(cipher_suite, Items), - %% The first form is R14. - %% The second is R13 - the extra term is exportability (by - %% inspection, the docs are wrong). - case CS of - {K, C, H} -> F({P, {K, C, H}}); - {K, C, H, _} -> F({P, {K, C, H}}) - end + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value(selected_cipher_suite, Items), + F({P, {K, C, H}}) end. cert_info(F, #v1{sock = Sock}) -> @@ -1583,7 +1579,7 @@ maybe_emit_stats(State) -> emit_stats(State) -> [{_, Pid}, {_, Recv_oct}, {_, Send_oct}, {_, Reductions}] = I - = infos(?SIMPLE_METRICS, State), + = infos(?SIMPLE_METRICS, State), Infos = infos(?OTHER_METRICS, State), rabbit_core_metrics:connection_stats(Pid, Infos), rabbit_core_metrics:connection_stats(Pid, Recv_oct, Send_oct, Reductions), diff --git a/deps/rabbit/src/rabbit_runtime_parameters.erl b/deps/rabbit/src/rabbit_runtime_parameters.erl index 17f9949..1a3981c 100644 --- a/deps/rabbit/src/rabbit_runtime_parameters.erl +++ b/deps/rabbit/src/rabbit_runtime_parameters.erl @@ -130,6 +130,7 @@ parse_set_global(Name, String, ActingUser) -> set_global(Name, Term, ActingUser) -> NameAsAtom = rabbit_data_coercion:to_atom(Name), + rabbit_log:debug("Setting global parameter '~s' to ~p", [NameAsAtom, Term]), mnesia_update(NameAsAtom, Term), event_notify(parameter_set, none, global, [{name, NameAsAtom}, {value, Term}, diff --git a/deps/rabbit/src/rabbit_ssl.erl b/deps/rabbit/src/rabbit_ssl.erl index 36e7b04..9038fdb 100644 --- a/deps/rabbit/src/rabbit_ssl.erl +++ b/deps/rabbit/src/rabbit_ssl.erl @@ -108,9 +108,10 @@ format_cipher_openssl22(Cipher) -> format_cipher_openssl21(Cipher) -> ssl_cipher_format:suite_to_str(Cipher). --spec get_highest_protocol_version() -> tls_record:tls_version(). +-spec get_highest_protocol_version() -> tls_record:tls_atom_version(). get_highest_protocol_version() -> - tls_record:highest_protocol_version([]). + tls_record:protocol_version( + tls_record:highest_protocol_version([])). %%-------------------------------------------------------------------------- %% High-level functions used by reader diff --git a/deps/rabbit/src/rabbit_table.erl b/deps/rabbit/src/rabbit_table.erl index e4eba16..b7bd413 100644 --- a/deps/rabbit/src/rabbit_table.erl +++ b/deps/rabbit/src/rabbit_table.erl @@ -106,12 +106,15 @@ wait(TableNames, Timeout, Retries) -> ok -> ok; {timeout, BadTabs} -> - {error, {timeout_waiting_for_tables, BadTabs}}; + AllNodes = rabbit_mnesia:cluster_nodes(all), + {error, {timeout_waiting_for_tables, AllNodes, BadTabs}}; {error, Reason} -> - {error, {failed_waiting_for_tables, Reason}} + AllNodes = rabbit_mnesia:cluster_nodes(all), + {error, {failed_waiting_for_tables, AllNodes, Reason}} end, case {Retries, Result} of {_, ok} -> + rabbit_log:info("Successfully synced tables from a peer"), ok; {1, {error, _} = Error} -> throw(Error); diff --git a/deps/rabbit/src/rabbit_upgrade_preparation.erl b/deps/rabbit/src/rabbit_upgrade_preparation.erl new file mode 100644 index 0000000..2ff4221 --- /dev/null +++ b/deps/rabbit/src/rabbit_upgrade_preparation.erl @@ -0,0 +1,60 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_upgrade_preparation). + +-export([await_online_quorum_plus_one/1, await_online_synchronised_mirrors/1]). + +%% +%% API +%% + +-define(SAMPLING_INTERVAL, 200). + +await_online_quorum_plus_one(Timeout) -> + Iterations = ceil(Timeout / ?SAMPLING_INTERVAL), + do_await_safe_online_quorum(Iterations). + + +await_online_synchronised_mirrors(Timeout) -> + Iterations = ceil(Timeout / ?SAMPLING_INTERVAL), + do_await_online_synchronised_mirrors(Iterations). + + +%% +%% Implementation +%% + +do_await_safe_online_quorum(0) -> + false; +do_await_safe_online_quorum(IterationsLeft) -> + case rabbit_quorum_queue:list_with_minimum_quorum() of + [] -> true; + List when is_list(List) -> + timer:sleep(?SAMPLING_INTERVAL), + do_await_safe_online_quorum(IterationsLeft - 1) + end. + + +do_await_online_synchronised_mirrors(0) -> + false; +do_await_online_synchronised_mirrors(IterationsLeft) -> + case rabbit_amqqueue:list_local_mirrored_classic_without_synchronised_mirrors() of + [] -> true; + List when is_list(List) -> + timer:sleep(?SAMPLING_INTERVAL), + do_await_online_synchronised_mirrors(IterationsLeft - 1) + end. diff --git a/deps/rabbit/src/rabbit_vhost.erl b/deps/rabbit/src/rabbit_vhost.erl index 8914197..22267b0 100644 --- a/deps/rabbit/src/rabbit_vhost.erl +++ b/deps/rabbit/src/rabbit_vhost.erl @@ -366,7 +366,7 @@ update(VHost, Fun) -> end. set_limits(VHost, undefined) -> - vhost:set_limits(VHost, undefined); + vhost:set_limits(VHost, []); set_limits(VHost, Limits) -> vhost:set_limits(VHost, Limits). diff --git a/deps/rabbit_common/LICENSE-MPL-RabbitMQ b/deps/rabbit_common/LICENSE-MPL-RabbitMQ index c992fc1..ff8e874 100644 --- a/deps/rabbit_common/LICENSE-MPL-RabbitMQ +++ b/deps/rabbit_common/LICENSE-MPL-RabbitMQ @@ -447,7 +447,7 @@ EXHIBIT A -Mozilla Public License. The Original Code is RabbitMQ Management Plugin. The Initial Developer of the Original Code is GoPivotal, Inc. - Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved.'' + Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved.'' [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should diff --git a/deps/rabbit_common/Makefile b/deps/rabbit_common/Makefile index ab17912..56f8104 100644 --- a/deps/rabbit_common/Makefile +++ b/deps/rabbit_common/Makefile @@ -18,7 +18,7 @@ endef LOCAL_DEPS = compiler crypto public_key sasl ssl syntax_tools tools xmerl DEPS = lager jsx ranch recon credentials_obfuscation -dep_credentials_obfuscation = hex 1.1.0 +dep_credentials_obfuscation = hex 2.0.0 # FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be # reviewed and merged. diff --git a/deps/rabbit_common/codegen.py b/deps/rabbit_common/codegen.py index e8ac6f8..ac12b88 100755 --- a/deps/rabbit_common/codegen.py +++ b/deps/rabbit_common/codegen.py @@ -13,7 +13,7 @@ ## The Original Code is RabbitMQ. ## ## The Initial Developer of the Original Code is Pivotal Software, Inc. -## Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. ## from __future__ import nested_scopes @@ -113,7 +113,7 @@ def printFileHeader(): %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %%""") def genErl(spec): diff --git a/deps/rabbit_common/erlang.mk b/deps/rabbit_common/erlang.mk index 349a5fe..54eb8f1 100644 --- a/deps/rabbit_common/erlang.mk +++ b/deps/rabbit_common/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/proper # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6832,6 +6903,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6878,6 +6950,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7535,3 +7608,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbit_common/include/rabbit.hrl b/deps/rabbit_common/include/rabbit.hrl index 20d11f4..a221d49 100644 --- a/deps/rabbit_common/include/rabbit.hrl +++ b/deps/rabbit_common/include/rabbit.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -include("resource.hrl"). @@ -152,7 +152,7 @@ version, %% string() description, %% string() type, %% 'ez' or 'dir' - dependencies, %% [{atom(), string()}] + dependencies, %% [atom()] location, %% string() %% List of supported broker version ranges, %% e.g. ["3.5.7", "3.6.1"] @@ -193,10 +193,8 @@ %%---------------------------------------------------------------------------- --define(COPYRIGHT_MESSAGE, "Copyright (c) 2007-2020 Pivotal Software, Inc."). +-define(COPYRIGHT_MESSAGE, "Copyright (c) 2007-2020 VMware, Inc. or its affiliates."). -define(INFORMATION_MESSAGE, "Licensed under the MPL 1.1. Website: https://rabbitmq.com"). --define(OTP_MINIMUM, "21.3"). --define(ERTS_MINIMUM, "10.3"). %% EMPTY_FRAME_SIZE, 8 = 1 + 2 + 4 + 1 %% - 1 byte of frame type diff --git a/deps/rabbit_common/include/rabbit_core_metrics.hrl b/deps/rabbit_common/include/rabbit_core_metrics.hrl index 977d64e..4201acc 100644 --- a/deps/rabbit_common/include/rabbit_core_metrics.hrl +++ b/deps/rabbit_common/include/rabbit_core_metrics.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% These tables contain the raw metrics as stored by RabbitMQ core diff --git a/deps/rabbit_common/include/rabbit_memory.hrl b/deps/rabbit_common/include/rabbit_memory.hrl index f16295d..5a75ca0 100644 --- a/deps/rabbit_common/include/rabbit_memory.hrl +++ b/deps/rabbit_common/include/rabbit_memory.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -define(DEFAULT_MEMORY_CHECK_INTERVAL, 1000). diff --git a/deps/rabbit_common/include/rabbit_misc.hrl b/deps/rabbit_common/include/rabbit_misc.hrl index 1a462c6..f929167 100644 --- a/deps/rabbit_common/include/rabbit_misc.hrl +++ b/deps/rabbit_common/include/rabbit_misc.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -define(RPC_TIMEOUT, infinity). diff --git a/deps/rabbit_common/include/rabbit_msg_store.hrl b/deps/rabbit_common/include/rabbit_msg_store.hrl index 2dc4157..56c8086 100644 --- a/deps/rabbit_common/include/rabbit_msg_store.hrl +++ b/deps/rabbit_common/include/rabbit_msg_store.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -include("rabbit.hrl"). diff --git a/deps/rabbit_common/include/resource.hrl b/deps/rabbit_common/include/resource.hrl index 0870c6c..8a20f41 100644 --- a/deps/rabbit_common/include/resource.hrl +++ b/deps/rabbit_common/include/resource.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is Pivotal Software, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -record(resource, { diff --git a/deps/rabbit_common/mk/rabbitmq-build.mk b/deps/rabbit_common/mk/rabbitmq-build.mk index fc6e835..eac99cc 100644 --- a/deps/rabbit_common/mk/rabbitmq-build.mk +++ b/deps/rabbit_common/mk/rabbitmq-build.mk @@ -10,27 +10,6 @@ endif # why ERL_LIBS may contain twice the path to Elixir libraries or # ERLC_OPTS may contain duplicated flags. -# Add Elixir libraries to ERL_LIBS for testsuites. -# -# We replace the leading drive letter ("C:/") with an MSYS2-like path -# ("/C/") for Windows. Otherwise, ERL_LIBS mixes `:` as a PATH separator -# and a drive letter marker. This causes the Erlang VM to crash with -# "Bad address". -# -# The space before `~r//` is apparently required. Otherwise, Elixir -# complains with "unexpected token "~"". - -ifeq ($(origin ELIXIR_LIB_DIR),undefined) -ELIXIR_LIB_DIR := $(shell elixir -e 'IO.puts(Regex.replace( ~r/^([a-zA-Z]):/, to_string(:code.lib_dir(:elixir)), "/\\1"))') -export ELIXIR_LIB_DIR -endif - -ifeq ($(ERL_LIBS),) -ERL_LIBS := $(ELIXIR_LIB_DIR) -else -ERL_LIBS := $(ERL_LIBS):$(ELIXIR_LIB_DIR) -endif - TEST_ERLC_OPTS += +nowarn_export_all ifneq ($(PROJECT),rabbit_common) @@ -43,11 +22,13 @@ endif LAGER_EXTRA_SINKS += rabbit_log \ rabbit_log_channel \ rabbit_log_connection \ + rabbit_log_feature_flags \ + rabbit_log_federation \ rabbit_log_ldap \ rabbit_log_mirroring \ + rabbit_log_prelaunch \ rabbit_log_queue \ rabbit_log_ra \ - rabbit_log_federation \ rabbit_log_shovel \ rabbit_log_upgrade lager_extra_sinks = $(subst $(space),$(comma),$(LAGER_EXTRA_SINKS)) diff --git a/deps/rabbit_common/mk/rabbitmq-components.mk b/deps/rabbit_common/mk/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbit_common/mk/rabbitmq-components.mk +++ b/deps/rabbit_common/mk/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbit_common/mk/rabbitmq-dist.mk b/deps/rabbit_common/mk/rabbitmq-dist.mk index af1e05a..172baab 100644 --- a/deps/rabbit_common/mk/rabbitmq-dist.mk +++ b/deps/rabbit_common/mk/rabbitmq-dist.mk @@ -1,8 +1,16 @@ -.PHONY: dist test-dist do-dist clean-dist +.PHONY: dist test-dist do-dist cli-scripts cli-escripts clean-dist DIST_DIR = plugins +CLI_SCRIPTS_DIR = sbin +CLI_ESCRIPTS_DIR = escript MIX = echo y | mix +ifeq ($(USE_RABBIT_BOOT_SCRIPT),) +DIST_AS_EZS ?= true +else +DIST_AS_EZS ?= +endif + dist_verbose_0 = @echo " DIST " $@; dist_verbose_2 = set -x; dist_verbose = $(dist_verbose_$(V)) @@ -48,7 +56,11 @@ endef define do_ez_target_erlangmk dist_$(1)_ez_dir = $$(if $(2),$(DIST_DIR)/$(1)-$(2), \ $$(if $$(VERSION),$(DIST_DIR)/$(1)-$$(VERSION),$(DIST_DIR)/$(1))) +ifeq ($(DIST_AS_EZS),) +dist_$(1)_ez = $$(dist_$(1)_ez_dir) +else dist_$(1)_ez = $$(dist_$(1)_ez_dir).ez +endif $$(dist_$(1)_ez): APP = $(1) $$(dist_$(1)_ez): VSN = $(2) @@ -56,7 +68,7 @@ $$(dist_$(1)_ez): SRC_DIR = $(3) $$(dist_$(1)_ez): EZ_DIR = $$(abspath $$(dist_$(1)_ez_dir)) $$(dist_$(1)_ez): EZ = $$(dist_$(1)_ez) $$(dist_$(1)_ez): $$(if $$(wildcard $(3)/ebin $(3)/include $(3)/priv),\ - $$(filter-out %/dep_built,$$(call core_find,$$(wildcard $(3)/ebin $(3)/include $(3)/priv),*)),) + $$(filter-out %/dep_built %/ebin/test,$$(call core_find,$$(wildcard $(3)/ebin $(3)/include $(3)/priv),*)),) # If the application's Makefile defines a `list-dist-deps` target, we # use it to populate the dependencies list. This is useful when the @@ -138,7 +150,7 @@ $(error DIST_PLUGINS_LIST ($(DIST_PLUGINS_LIST)) is missing) endif $(eval $(foreach path, \ - $(filter-out %/rabbit %/looking_glass %/lz4, \ + $(filter-out %/looking_glass %/lz4, \ $(sort $(shell cat $(DIST_PLUGINS_LIST))) $(CURDIR)), \ $(call ez_target,$(if $(filter $(path),$(CURDIR)),$(PROJECT),$(notdir $(path))),$(path)))) endif @@ -163,6 +175,7 @@ $(ERLANGMK_DIST_EZS): $(verbose) rm -rf $(EZ_DIR) $(EZ) $(verbose) mkdir -p $(EZ_DIR) $(dist_verbose) $(RSYNC) -a $(RSYNC_V) \ + --exclude '/ebin/test' \ --include '/ebin/***' \ --include '/include/***' \ --include '/priv/***' \ @@ -174,12 +187,14 @@ $(ERLANGMK_DIST_EZS): && grep -q '^prepare-dist::' $(SRC_DIR)/Makefile) || \ $(MAKE) --no-print-directory -C $(SRC_DIR) prepare-dist \ APP=$(APP) VSN=$(VSN) EZ_DIR=$(EZ_DIR) +ifneq ($(DIST_AS_EZS),) $(verbose) (cd $(DIST_DIR) && \ find "$(basename $(notdir $@))" | LC_COLLATE=C sort \ > "$(basename $(notdir $@)).manifest" && \ $(ZIP) $(ZIP_V) --names-stdin "$(notdir $@)" \ < "$(basename $(notdir $@)).manifest") $(verbose) rm -rf $(EZ_DIR) $(EZ_DIR).manifest +endif $(MIX_DIST_EZS): $(mix_task_archive_deps) $(verbose) cd $(SRC_DIR) && \ @@ -196,23 +211,152 @@ $(mix_task_archive_deps): MAYBE_APPS_LIST = $(if $(shell test -f $(ERLANG_MK_TMP)/apps.log && echo OK), \ $(ERLANG_MK_TMP)/apps.log) +DIST_LOCK = $(DIST_DIR).lock dist:: $(ERLANG_MK_RECURSIVE_DEPS_LIST) all - $(gen_verbose) $(MAKE) do-dist \ - DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) $(MAYBE_APPS_LIST)" - + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + elif command -v lockf >/dev/null; then \ + lockf $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + else \ + $(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"; \ + fi + +test-dist:: export TEST_DIR=NON-EXISTENT test-dist:: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) test-build - $(gen_verbose) $(MAKE) do-dist \ - DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) $(MAYBE_APPS_LIST)" + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + elif command -v lockf >/dev/null; then \ + lockf $(DIST_LOCK) \ + sh -c '$(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"'; \ + else \ + $(MAKE) do-dist \ + DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \ + $(MAYBE_APPS_LIST)"; \ + fi DIST_EZS = $(ERLANGMK_DIST_EZS) $(MIX_DIST_EZS) do-dist:: $(DIST_EZS) $(verbose) unwanted='$(filter-out $(DIST_EZS) $(EXTRA_DIST_EZS), \ - $(wildcard $(DIST_DIR)/*.ez))'; \ - test -z "$$unwanted" || (echo " RM $$unwanted" && rm -f $$unwanted) + $(wildcard $(DIST_DIR)/*))'; \ + test -z "$$unwanted" || (echo " RM $$unwanted" && rm -rf $$unwanted) + +CLI_SCRIPTS_LOCK = $(CLI_SCRIPTS_DIR).lock +CLI_ESCRIPTS_LOCK = $(CLI_ESCRIPTS_DIR).lock + +ifneq ($(filter-out rabbit_common amqp10_common,$(PROJECT)),) +dist:: install-cli +test-build:: install-cli +endif + +install-cli: install-cli-scripts install-cli-escripts + @: + +ifeq ($(PROJECT),rabbit) +install-cli-scripts: + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(CLI_SCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_SCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + else \ + mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in scripts/*; do \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done; \ + fi +else + +install-cli-scripts: + $(gen_verbose) \ + set -e; \ + if test -d "$(DEPS_DIR)/rabbit/scripts"; then \ + rabbit_scripts_dir='$(DEPS_DIR)/rabbit/scripts'; \ + elif test -d "$(DEPS_DIR)/../scripts"; then \ + rabbit_scripts_dir='$(DEPS_DIR)/../scripts'; \ + else \ + echo 'rabbit/scripts directory not found' 1>&2; \ + exit 1; \ + fi; \ + test -d "$$rabbit_scripts_dir"; \ + if command -v flock >/dev/null; then \ + flock $(CLI_SCRIPTS_LOCK) \ + sh -e -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "'$$rabbit_scripts_dir'"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_SCRIPTS_LOCK) \ + sh -e -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "'$$rabbit_scripts_dir'"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done'; \ + else \ + mkdir -p "$(CLI_SCRIPTS_DIR)" && \ + for file in "$$rabbit_scripts_dir"/*; do \ + test -f "$$file"; \ + cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \ + cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \ + done; \ + fi +endif + +install-cli-escripts: + $(gen_verbose) \ + if command -v flock >/dev/null; then \ + flock $(CLI_ESCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR='; \ + elif command -v lockf >/dev/null; then \ + lockf $(CLI_ESCRIPTS_LOCK) \ + sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR='; \ + else \ + mkdir -p "$(CLI_ESCRIPTS_DIR)" && \ + $(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \ + PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ + DESTDIR= ; \ + fi clean-dist:: - $(gen_verbose) rm -rf $(DIST_DIR) + $(gen_verbose) rm -rf \ + "$(DIST_DIR)" \ + "$(CLI_SCRIPTS_DIR)" \ + "$(CLI_ESCRIPTS_DIR)" clean:: clean-dist diff --git a/deps/rabbit_common/mk/rabbitmq-run.mk b/deps/rabbit_common/mk/rabbitmq-run.mk index 216e73b..b2b9bd6 100644 --- a/deps/rabbit_common/mk/rabbitmq-run.mk +++ b/deps/rabbit_common/mk/rabbitmq-run.mk @@ -19,12 +19,7 @@ TEST_TMPDIR ?= $(TMPDIR)/rabbitmq-test-instances endif # Location of the scripts controlling the broker. -ifeq ($(PROJECT),rabbit) -RABBITMQ_BROKER_DIR ?= $(CURDIR) -else -RABBITMQ_BROKER_DIR ?= $(DEPS_DIR)/rabbit -endif -RABBITMQ_SCRIPTS_DIR ?= $(RABBITMQ_BROKER_DIR)/scripts +RABBITMQ_SCRIPTS_DIR ?= $(CURDIR)/sbin ifeq ($(PLATFORM),msys2) RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins.bat @@ -65,14 +60,18 @@ node_log_base = $(call node_tmpdir,$(1))/log node_mnesia_base = $(call node_tmpdir,$(1))/mnesia node_mnesia_dir = $(call node_mnesia_base,$(1))/$(1) node_quorum_dir = $(call node_mnesia_dir,$(1))/quorum -node_schema_dir = $(call node_tmpdir,$(1))/schema node_plugins_expand_dir = $(call node_tmpdir,$(1))/plugins -node_generated_config_dir = $(call node_tmpdir,$(1))/config node_feature_flags_file = $(call node_tmpdir,$(1))/feature_flags node_enabled_plugins_file = $(call node_tmpdir,$(1))/enabled_plugins # Broker startup variables for the test environment. -RABBITMQ_NODENAME ?= rabbit +ifeq ($(PLATFORM),msys2) +HOSTNAME := $(COMPUTERNAME) +else +HOSTNAME := $(shell hostname -s) +endif + +RABBITMQ_NODENAME ?= rabbit@$(HOSTNAME) RABBITMQ_NODENAME_FOR_PATHS ?= $(RABBITMQ_NODENAME) NODE_TMPDIR ?= $(call node_tmpdir,$(RABBITMQ_NODENAME_FOR_PATHS)) @@ -82,12 +81,15 @@ RABBITMQ_LOG_BASE ?= $(call node_log_base,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_MNESIA_BASE ?= $(call node_mnesia_base,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_MNESIA_DIR ?= $(call node_mnesia_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_QUORUM_DIR ?= $(call node_quorum_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) -RABBITMQ_SCHEMA_DIR ?= $(call node_schema_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_PLUGINS_EXPAND_DIR ?= $(call node_plugins_expand_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) -RABBITMQ_GENERATED_CONFIG_DIR ?= $(call node_generated_config_dir,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_FEATURE_FLAGS_FILE ?= $(call node_feature_flags_file,$(RABBITMQ_NODENAME_FOR_PATHS)) RABBITMQ_ENABLED_PLUGINS_FILE ?= $(call node_enabled_plugins_file,$(RABBITMQ_NODENAME_FOR_PATHS)) +# Enable colourful debug logging by default +# To change this, set RABBITMQ_LOG to info, notice, warning etc. +RABBITMQ_LOG ?= debug,+color +export RABBITMQ_LOG + # erlang.mk adds dependencies' ebin directory to ERL_LIBS. This is # a sane default, but we prefer to rely on the .ez archives in the # `plugins` directory so the plugin code is executed. The `plugins` @@ -112,12 +114,11 @@ RABBITMQ_LOG_BASE="$(call node_log_base,$(2))" \ RABBITMQ_MNESIA_BASE="$(call node_mnesia_base,$(2))" \ RABBITMQ_MNESIA_DIR="$(call node_mnesia_dir,$(2))" \ RABBITMQ_QUORUM_DIR="$(call node_quorum_dir,$(2))" \ -RABBITMQ_SCHEMA_DIR="$(call node_schema_dir,$(2))" \ -RABBITMQ_GENERATED_CONFIG_DIR="$(call node_generated_config_dir,$(2))" \ RABBITMQ_FEATURE_FLAGS_FILE="$(call node_feature_flags_file,$(2))" \ RABBITMQ_PLUGINS_DIR="$(if $(RABBITMQ_PLUGINS_DIR),$(RABBITMQ_PLUGINS_DIR),$(RMQ_PLUGINS_DIR))" \ RABBITMQ_PLUGINS_EXPAND_DIR="$(call node_plugins_expand_dir,$(2))" \ -RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" +RABBITMQ_SERVER_START_ARGS="-ra wal_sync_method sync $(RABBITMQ_SERVER_START_ARGS)" \ +RABBITMQ_ENABLED_PLUGINS="$(RABBITMQ_ENABLED_PLUGINS)" endef BASIC_SCRIPT_ENV_SETTINGS = \ @@ -134,60 +135,61 @@ virgin-test-tmpdir: node-tmpdir: $(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \ $(RABBITMQ_MNESIA_BASE) \ - $(RABBITMQ_SCHEMA_DIR) \ - $(RABBITMQ_PLUGINS_EXPAND_DIR) \ - $(RABBITMQ_GENERATED_CONFIG_DIR) + $(RABBITMQ_PLUGINS_EXPAND_DIR) virgin-node-tmpdir: $(gen_verbose) rm -rf $(NODE_TMPDIR) $(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \ $(RABBITMQ_MNESIA_BASE) \ - $(RABBITMQ_SCHEMA_DIR) \ - $(RABBITMQ_PLUGINS_EXPAND_DIR) \ - $(RABBITMQ_GENERATED_CONFIG_DIR) + $(RABBITMQ_PLUGINS_EXPAND_DIR) .PHONY: test-tmpdir virgin-test-tmpdir node-tmpdir virgin-node-tmpdir -ifeq ($(wildcard ebin/test),) -$(RABBITMQ_ENABLED_PLUGINS_FILE): dist -endif - ifdef LEAVE_PLUGINS_DISABLED -$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir - $(gen_verbose) : >$@ +RABBITMQ_ENABLED_PLUGINS ?= else -$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir - $(verbose) rm -f $@ - $(gen_verbose) $(BASIC_SCRIPT_ENV_SETTINGS) \ - $(RABBITMQ_PLUGINS) enable --all --offline +RABBITMQ_ENABLED_PLUGINS ?= ALL endif # -------------------------------------------------------------------- # Run a full RabbitMQ. # -------------------------------------------------------------------- -COMMA = , - define test_rabbitmq_config %% vim:ft=erlang: [ {rabbit, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(RABBITMQ_NODE_PORT)]}$(COMMA),) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(RABBITMQ_NODE_PORT)]}$(comma),) {loopback_users, []}, - {log, [{file, [{level, debug}]}]} + {log, [{file, [{level, debug}]}, + {console, [{level, debug}]}]} ]}, {rabbitmq_management, [ -$(if $(RABBITMQ_NODE_PORT), {listener$(COMMA) [{port$(COMMA) $(shell echo "$$(($(RABBITMQ_NODE_PORT) + 10000))")}]},) +$(if $(RABBITMQ_NODE_PORT), {listener$(comma) [{port$(comma) $(shell echo "$$(($(RABBITMQ_NODE_PORT) + 10000))")}]},) ]}, {rabbitmq_mqtt, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(shell echo "$$((1883 + $(RABBITMQ_NODE_PORT) - 5672))")]},) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(shell echo "$$((1883 + $(RABBITMQ_NODE_PORT) - 5672))")]},) ]}, {rabbitmq_stomp, [ -$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(COMMA) [$(shell echo "$$((61613 + $(RABBITMQ_NODE_PORT) - 5672))")]},) +$(if $(RABBITMQ_NODE_PORT), {tcp_listeners$(comma) [$(shell echo "$$((61613 + $(RABBITMQ_NODE_PORT) - 5672))")]},) ]}, {ra, [ - {data_dir, "$(RABBITMQ_QUORUM_DIR)"} + {data_dir, "$(RABBITMQ_QUORUM_DIR)"}, + {wal_sync_method, sync} + ]}, + {lager, [ + {colors, [ + %% https://misc.flogisoft.com/bash/tip_colors_and_formatting + {debug, "\\\e[0;34m" }, + {info, "\\\e[1;37m" }, + {notice, "\\\e[1;36m" }, + {warning, "\\\e[1;33m" }, + {error, "\\\e[1;31m" }, + {critical, "\\\e[1;35m" }, + {alert, "\\\e[1;44m" }, + {emergency, "\\\e[1;41m" } + ]} ]} ]. endef @@ -198,7 +200,8 @@ define test_rabbitmq_config_with_tls [ {rabbit, [ {loopback_users, []}, - {log, [{file, [{level, debug}]}]}, + {log, [{file, [{level, debug}]}, + {console, [{level, debug}]}]}, {ssl_listeners, [5671]}, {ssl_options, [ {cacertfile, "$(TEST_TLS_CERTS_DIR_in_config)/testca/cacert.pem"}, @@ -222,7 +225,21 @@ define test_rabbitmq_config_with_tls ]} ]}, {ra, [ - {data_dir, "$(RABBITMQ_QUORUM_DIR)"} + {data_dir, "$(RABBITMQ_QUORUM_DIR)"}, + {wal_sync_method, sync} + ]}, + {lager, [ + {colors, [ + %% https://misc.flogisoft.com/bash/tip_colors_and_formatting + {debug, "\\\e[0;34m" }, + {info, "\\\e[1;37m" }, + {notice, "\\\e[1;36m" }, + {warning, "\\\e[1;33m" }, + {error, "\\\e[1;31m" }, + {critical, "\\\e[1;35m" }, + {alert, "\\\e[1;44m" }, + {emergency, "\\\e[1;41m" } + ]} ]} ]. endef @@ -249,19 +266,28 @@ $(TEST_TLS_CERTS_DIR): node-tmpdir show-test-tls-certs-dir: $(TEST_TLS_CERTS_DIR) @echo $(TEST_TLS_CERTS_DIR) -run-broker run-tls-broker: RABBITMQ_CONFIG_FILE ?= $(basename $(TEST_CONFIG_FILE)) +ifdef NOBUILD +DIST_TARGET ?= +else +ifeq ($(wildcard ebin/test),) +DIST_TARGET ?= dist +else +DIST_TARGET ?= test-dist +endif +endif + +run-broker run-tls-broker: RABBITMQ_CONFIG_FILE := $(basename $(TEST_CONFIG_FILE)) run-broker: config := $(test_rabbitmq_config) run-tls-broker: config := $(test_rabbitmq_config_with_tls) run-tls-broker: $(TEST_TLS_CERTS_DIR) -run-broker run-tls-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) \ - $(TEST_CONFIG_FILE) +run-broker run-tls-broker: node-tmpdir $(DIST_TARGET) $(TEST_CONFIG_FILE) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_ALLOW_INPUT=true \ RABBITMQ_CONFIG_FILE=$(RABBITMQ_CONFIG_FILE) \ $(RABBITMQ_SERVER) -run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-background-broker: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ $(RABBITMQ_SERVER) -detached @@ -269,13 +295,13 @@ run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) # Run a bare Erlang node. # -------------------------------------------------------------------- -run-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-node: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ RABBITMQ_ALLOW_INPUT=true \ $(RABBITMQ_SERVER) -run-background-node: virgin-node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +run-background-node: virgin-node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ $(RABBITMQ_SERVER) -detached @@ -291,7 +317,12 @@ endif RMQCTL_WAIT_TIMEOUT ?= 60 -start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +define rmq_started +true = rpc:call('$(1)', rabbit, is_running, []), +halt(). +endef + +start-background-node: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ RABBITMQ_NODE_ONLY=true \ $(RABBITMQ_SERVER) \ @@ -299,14 +330,14 @@ start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) ERL_LIBS="$(DIST_ERL_LIBS)" \ $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait --timeout $(RMQCTL_WAIT_TIMEOUT) $(RABBITMQ_PID_FILE) kernel -start-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE) +start-background-broker: node-tmpdir $(DIST_TARGET) $(BASIC_SCRIPT_ENV_SETTINGS) \ $(RABBITMQ_SERVER) \ $(REDIRECT_STDIO) & ERL_LIBS="$(DIST_ERL_LIBS)" \ $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait --timeout $(RMQCTL_WAIT_TIMEOUT) $(RABBITMQ_PID_FILE) && \ ERL_LIBS="$(DIST_ERL_LIBS)" \ - $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) status >/dev/null + $(call erlang,$(call rmq_started,$(RABBITMQ_NODENAME)),-sname sbb-$$$$ -hidden) start-rabbit-on-node: $(exec_verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \ @@ -324,9 +355,10 @@ stop-rabbit-on-node: stop-node: $(exec_verbose) ( \ - pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)) && \ - ERL_LIBS="$(DIST_ERL_LIBS)" \ - $(RABBITMQCTL) -n $(RABBITMQ_NODENAME) stop && \ + pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)); \ + test "$$pid" && \ + kill -TERM "$$pid" && \ + echo waiting for process to exit && \ while ps -p "$$pid" >/dev/null 2>&1; do sleep 1; done \ ) || : @@ -338,15 +370,18 @@ stop-node: NODES ?= 2 -start-brokers start-cluster: +start-brokers start-cluster: $(DIST_TARGET) @for n in $$(seq $(NODES)); do \ - nodename="rabbit-$$n@$$(hostname -s)"; \ + nodename="rabbit-$$n@$(HOSTNAME)"; \ $(MAKE) start-background-broker \ + NOBUILD=1 \ RABBITMQ_NODENAME="$$nodename" \ RABBITMQ_NODE_PORT="$$((5672 + $$n - 1))" \ RABBITMQ_SERVER_START_ARGS=" \ -rabbit loopback_users [] \ -rabbitmq_management listener [{port,$$((15672 + $$n - 1))}] \ + -rabbitmq_mqtt tcp_listeners [$$((1883 + $$n - 1))] \ + -rabbitmq_stomp tcp_listeners [$$((61613 + $$n - 1))] \ -rabbitmq_prometheus tcp_config [{port,$$((15692 + $$n - 1))}] \ "; \ if test '$@' = 'start-cluster' && test "$$nodename1"; then \ @@ -363,7 +398,7 @@ start-brokers start-cluster: stop-brokers stop-cluster: @for n in $$(seq $(NODES) -1 1); do \ - nodename="rabbit-$$n@$$(hostname -s)"; \ + nodename="rabbit-$$n@$(HOSTNAME)"; \ $(MAKE) stop-node \ RABBITMQ_NODENAME="$$nodename"; \ done diff --git a/deps/rabbit_common/mk/rabbitmq-tools.mk b/deps/rabbit_common/mk/rabbitmq-tools.mk index cde93c5..6672153 100644 --- a/deps/rabbit_common/mk/rabbitmq-tools.mk +++ b/deps/rabbit_common/mk/rabbitmq-tools.mk @@ -1,3 +1,9 @@ +ifeq ($(PLATFORM),msys2) +HOSTNAME := $(COMPUTERNAME) +else +HOSTNAME := $(shell hostname -s) +endif + READY_DEPS = $(foreach DEP,\ $(filter $(RABBITMQ_COMPONENTS),$(DEPS) $(BUILD_DEPS) $(TEST_DEPS)), \ $(if $(wildcard $(DEPS_DIR)/$(DEP)),$(DEP),)) @@ -338,3 +344,86 @@ commits-since-release-title: $(verbose) $(call show_commits_since_tag,$*) endif # ($(wildcard .git),) + +# -------------------------------------------------------------------- +# erlang.mk query-deps* formatting. +# -------------------------------------------------------------------- + +# We need to provide a repo mapping for deps resolved via git_rmq fetch method +query_repo_git_rmq = https://github.com/rabbitmq/$(call rmq_cmp_repo_name,$(1)) + +# -------------------------------------------------------------------- +# Common test logs compression. +# -------------------------------------------------------------------- + +.PHONY: ct-logs-archive clean-ct-logs-archive + +ifneq ($(wildcard logs/*),) +TAR := tar +ifeq ($(PLATFORM),freebsd) +TAR := gtar +endif +ifeq ($(PLATFORM),darwin) +TAR := gtar +endif + +CT_LOGS_ARCHIVE ?= $(PROJECT)-ct-logs-$(subst _,-,$(subst -,,$(subst .,,$(patsubst ct_run.ct_$(PROJECT)@$(HOSTNAME).%,%,$(notdir $(lastword $(wildcard logs/ct_run.*))))))).tar.xz + +ifeq ($(patsubst %.tar.xz,%,$(CT_LOGS_ARCHIVE)),$(CT_LOGS_ARCHIVE)) +$(error CT_LOGS_ARCHIVE file must use '.tar.xz' as its filename extension) +endif + +ct-logs-archive: $(CT_LOGS_ARCHIVE) + @: + +$(CT_LOGS_ARCHIVE): + $(gen_verbose) \ + for file in logs/*; do \ + ! test -L "$$file" || rm "$$file"; \ + done + $(verbose) \ + $(TAR) -c \ + --exclude "*/mnesia" \ + --transform "s/^logs/$(patsubst %.tar.xz,%,$(notdir $(CT_LOGS_ARCHIVE)))/" \ + -f - logs | \ + xz > "$@" +else +ct-logs-archive: + @: +endif + +clean-ct-logs-archive:: + $(gen_verbose) rm -f $(PROJECT)-ct-logs-*.tar.xz + +clean:: clean-ct-logs-archive + +# -------------------------------------------------------------------- +# Generate a file listing RabbitMQ component dependencies and their +# Git commit hash. +# -------------------------------------------------------------------- + +.PHONY: rabbitmq-deps.mk clean-rabbitmq-deps.mk + +rabbitmq-deps.mk: $(PROJECT)-rabbitmq-deps.mk + @: + +closing_paren := ) + +define rmq_deps_mk_line +dep_$(1) := git $(dir $(RABBITMQ_UPSTREAM_FETCH_URL))$(call rmq_cmp_repo_name,$(1)).git $$(git -C "$(2)" rev-parse HEAD) +endef + +$(PROJECT)-rabbitmq-deps.mk: $(ERLANG_MK_RECURSIVE_DEPS_LIST) + $(gen_verbose) echo "# In $(PROJECT) - commit $$(git rev-parse HEAD)" > $@ + $(verbose) cat $(ERLANG_MK_RECURSIVE_DEPS_LIST) | \ + while read -r dir; do \ + component=$$(basename "$$dir"); \ + case "$$component" in \ + $(foreach component,$(RABBITMQ_COMPONENTS),$(component)$(closing_paren) echo "$(call rmq_deps_mk_line,$(component),$$dir)" ;;) \ + esac; \ + done >> $@ + +clean:: clean-rabbitmq-deps.mk + +clean-rabbitmq-deps.mk: + $(gen_verbose) rm -f $(PROJECT)-rabbitmq-deps.mk diff --git a/deps/rabbit_common/src/app_utils.erl b/deps/rabbit_common/src/app_utils.erl index d290614..90617d9 100644 --- a/deps/rabbit_common/src/app_utils.erl +++ b/deps/rabbit_common/src/app_utils.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(app_utils). diff --git a/deps/rabbit_common/src/code_version.erl b/deps/rabbit_common/src/code_version.erl index 3881271..bdab790 100644 --- a/deps/rabbit_common/src/code_version.erl +++ b/deps/rabbit_common/src/code_version.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(code_version). diff --git a/deps/rabbit_common/src/credit_flow.erl b/deps/rabbit_common/src/credit_flow.erl index 977144e..7d08d9a 100644 --- a/deps/rabbit_common/src/credit_flow.erl +++ b/deps/rabbit_common/src/credit_flow.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(credit_flow). diff --git a/deps/rabbit_common/src/delegate.erl b/deps/rabbit_common/src/delegate.erl index 0e67ba5..baa5a43 100644 --- a/deps/rabbit_common/src/delegate.erl +++ b/deps/rabbit_common/src/delegate.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(delegate). diff --git a/deps/rabbit_common/src/delegate_sup.erl b/deps/rabbit_common/src/delegate_sup.erl index fbe2499..1b8296c 100644 --- a/deps/rabbit_common/src/delegate_sup.erl +++ b/deps/rabbit_common/src/delegate_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(delegate_sup). diff --git a/deps/rabbit_common/src/file_handle_cache.erl b/deps/rabbit_common/src/file_handle_cache.erl index 2f5e601..d99ffae 100644 --- a/deps/rabbit_common/src/file_handle_cache.erl +++ b/deps/rabbit_common/src/file_handle_cache.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(file_handle_cache). diff --git a/deps/rabbit_common/src/file_handle_cache_stats.erl b/deps/rabbit_common/src/file_handle_cache_stats.erl index 68c3d82..2b49a8f 100644 --- a/deps/rabbit_common/src/file_handle_cache_stats.erl +++ b/deps/rabbit_common/src/file_handle_cache_stats.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(file_handle_cache_stats). diff --git a/deps/rabbit_common/src/gen_server2.erl b/deps/rabbit_common/src/gen_server2.erl index 71cba54..b80e921 100644 --- a/deps/rabbit_common/src/gen_server2.erl +++ b/deps/rabbit_common/src/gen_server2.erl @@ -93,7 +93,7 @@ %% %% 11) Internal buffer length is emitted as a core [RabbitMQ] metric. -%% All modifications are (C) 2009-2017 Pivotal Software, Inc. +%% All modifications are (C) 2009-2020 VMware, Inc. or its affiliates. %% ``The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in diff --git a/deps/rabbit_common/src/lager_forwarder_backend.erl b/deps/rabbit_common/src/lager_forwarder_backend.erl index 04393e3..1463960 100644 --- a/deps/rabbit_common/src/lager_forwarder_backend.erl +++ b/deps/rabbit_common/src/lager_forwarder_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(lager_forwarder_backend). diff --git a/deps/rabbit_common/src/mirrored_supervisor.erl b/deps/rabbit_common/src/mirrored_supervisor.erl index 7418cd9..ea25d7b 100644 --- a/deps/rabbit_common/src/mirrored_supervisor.erl +++ b/deps/rabbit_common/src/mirrored_supervisor.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2011-2015 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2011-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(mirrored_supervisor). diff --git a/deps/rabbit_common/src/mnesia_sync.erl b/deps/rabbit_common/src/mnesia_sync.erl index 779a60b..5b1f6e4 100644 --- a/deps/rabbit_common/src/mnesia_sync.erl +++ b/deps/rabbit_common/src/mnesia_sync.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(mnesia_sync). diff --git a/deps/rabbit_common/src/pmon.erl b/deps/rabbit_common/src/pmon.erl index d96a836..7cd5cbc 100644 --- a/deps/rabbit_common/src/pmon.erl +++ b/deps/rabbit_common/src/pmon.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2011-2015 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2011-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(pmon). diff --git a/deps/rabbit_common/src/priority_queue.erl b/deps/rabbit_common/src/priority_queue.erl index c46a849..9f4a458 100644 --- a/deps/rabbit_common/src/priority_queue.erl +++ b/deps/rabbit_common/src/priority_queue.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% Priority queues have essentially the same interface as ordinary diff --git a/deps/rabbit_common/src/rabbit_amqp_connection.erl b/deps/rabbit_common/src/rabbit_amqp_connection.erl index 53b1a19..09ec872 100644 --- a/deps/rabbit_common/src/rabbit_amqp_connection.erl +++ b/deps/rabbit_common/src/rabbit_amqp_connection.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_amqp_connection). diff --git a/deps/rabbit_common/src/rabbit_amqqueue_common.erl b/deps/rabbit_common/src/rabbit_amqqueue_common.erl index 87acea4..7095c3c 100644 --- a/deps/rabbit_common/src/rabbit_amqqueue_common.erl +++ b/deps/rabbit_common/src/rabbit_amqqueue_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_amqqueue_common). diff --git a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl index 11d80e4..32c413f 100644 --- a/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl +++ b/deps/rabbit_common/src/rabbit_auth_backend_dummy.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_auth_backend_dummy). diff --git a/deps/rabbit_common/src/rabbit_auth_mechanism.erl b/deps/rabbit_common/src/rabbit_auth_mechanism.erl index 53569be..47ce94e 100644 --- a/deps/rabbit_common/src/rabbit_auth_mechanism.erl +++ b/deps/rabbit_common/src/rabbit_auth_mechanism.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_auth_mechanism). diff --git a/deps/rabbit_common/src/rabbit_authn_backend.erl b/deps/rabbit_common/src/rabbit_authn_backend.erl index 5fa8b8b..409303c 100644 --- a/deps/rabbit_common/src/rabbit_authn_backend.erl +++ b/deps/rabbit_common/src/rabbit_authn_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_authn_backend). diff --git a/deps/rabbit_common/src/rabbit_authz_backend.erl b/deps/rabbit_common/src/rabbit_authz_backend.erl index a6c7e9d..7a20fd8 100644 --- a/deps/rabbit_common/src/rabbit_authz_backend.erl +++ b/deps/rabbit_common/src/rabbit_authz_backend.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_authz_backend). diff --git a/deps/rabbit_common/src/rabbit_basic_common.erl b/deps/rabbit_common/src/rabbit_basic_common.erl index 98391ba..725ee0a 100644 --- a/deps/rabbit_common/src/rabbit_basic_common.erl +++ b/deps/rabbit_common/src/rabbit_basic_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_basic_common). diff --git a/deps/rabbit_common/src/rabbit_binary_generator.erl b/deps/rabbit_common/src/rabbit_binary_generator.erl index 4ab235b..b1ad3cf 100644 --- a/deps/rabbit_common/src/rabbit_binary_generator.erl +++ b/deps/rabbit_common/src/rabbit_binary_generator.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_binary_generator). diff --git a/deps/rabbit_common/src/rabbit_binary_parser.erl b/deps/rabbit_common/src/rabbit_binary_parser.erl index 4914a84..d57eafe 100644 --- a/deps/rabbit_common/src/rabbit_binary_parser.erl +++ b/deps/rabbit_common/src/rabbit_binary_parser.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_binary_parser). diff --git a/deps/rabbit_common/src/rabbit_cert_info.erl b/deps/rabbit_common/src/rabbit_cert_info.erl index 0d5c1f6..af0c99d 100644 --- a/deps/rabbit_common/src/rabbit_cert_info.erl +++ b/deps/rabbit_common/src/rabbit_cert_info.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_cert_info). diff --git a/deps/rabbit_common/src/rabbit_channel_common.erl b/deps/rabbit_common/src/rabbit_channel_common.erl index d285502..7f7f6e7 100644 --- a/deps/rabbit_common/src/rabbit_channel_common.erl +++ b/deps/rabbit_common/src/rabbit_channel_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_channel_common). diff --git a/deps/rabbit_common/src/rabbit_command_assembler.erl b/deps/rabbit_common/src/rabbit_command_assembler.erl index 55486bc..e809363 100644 --- a/deps/rabbit_common/src/rabbit_command_assembler.erl +++ b/deps/rabbit_common/src/rabbit_command_assembler.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_command_assembler). diff --git a/deps/rabbit_common/src/rabbit_control_misc.erl b/deps/rabbit_common/src/rabbit_control_misc.erl index 7e071a4..087b730 100644 --- a/deps/rabbit_common/src/rabbit_control_misc.erl +++ b/deps/rabbit_common/src/rabbit_control_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_control_misc). diff --git a/deps/rabbit_common/src/rabbit_core_metrics.erl b/deps/rabbit_common/src/rabbit_core_metrics.erl index 1cec9ff..0ede8e1 100644 --- a/deps/rabbit_common/src/rabbit_core_metrics.erl +++ b/deps/rabbit_common/src/rabbit_core_metrics.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_core_metrics). diff --git a/deps/rabbit_common/src/rabbit_data_coercion.erl b/deps/rabbit_common/src/rabbit_data_coercion.erl index f8bbec4..1473dad 100644 --- a/deps/rabbit_common/src/rabbit_data_coercion.erl +++ b/deps/rabbit_common/src/rabbit_data_coercion.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_data_coercion). diff --git a/deps/rabbit_common/src/rabbit_env.erl b/deps/rabbit_common/src/rabbit_env.erl new file mode 100644 index 0000000..07873f6 --- /dev/null +++ b/deps/rabbit_common/src/rabbit_env.erl @@ -0,0 +1,1735 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License at +%% https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% The Initial Developer of the Original Code is GoPivotal, Inc. +%% Copyright (c) 2019-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_env). + +-include_lib("kernel/include/file.hrl"). + +-export([get_context/0, + get_context/1, + get_context_before_logging_init/0, + get_context_before_logging_init/1, + get_context_after_logging_init/1, + get_context_after_reloading_env/1, + dbg_config/0, + get_used_env_vars/0, + log_process_env/0, + log_context/1, + context_to_app_env_vars/1, + context_to_app_env_vars_no_logging/1, + context_to_code_path/1]). + +-ifdef(TEST). +-export([value_is_yes/1]). +-endif. + +-define(USED_ENV_VARS, + [ + "RABBITMQ_ALLOW_INPUT", + "RABBITMQ_ADVANCED_CONFIG_FILE", + "RABBITMQ_BASE", + "RABBITMQ_CONF_ENV_FILE", + "RABBITMQ_CONFIG_FILE", + "RABBITMQ_CONFIG_FILES", + "RABBITMQ_DBG", + "RABBITMQ_DIST_PORT", + "RABBITMQ_ENABLED_PLUGINS", + "RABBITMQ_ENABLED_PLUGINS_FILE", + "RABBITMQ_FEATURE_FLAGS", + "RABBITMQ_FEATURE_FLAGS_FILE", + "RABBITMQ_HOME", + "RABBITMQ_KEEP_PID_FILE_ON_EXIT", + "RABBITMQ_LOG", + "RABBITMQ_LOG_BASE", + "RABBITMQ_LOG_FF_REGISTRY", + "RABBITMQ_LOGS", + "RABBITMQ_MNESIA_BASE", + "RABBITMQ_MNESIA_DIR", + "RABBITMQ_MOTD_FILE", + "RABBITMQ_NODE_IP_ADDRESS", + "RABBITMQ_NODE_PORT", + "RABBITMQ_NODENAME", + "RABBITMQ_PID_FILE", + "RABBITMQ_PLUGINS_DIR", + "RABBITMQ_PLUGINS_EXPAND_DIR", + "RABBITMQ_PRODUCT_NAME", + "RABBITMQ_PRODUCT_VERSION", + "RABBITMQ_QUORUM_DIR", + "RABBITMQ_UPGRADE_LOG", + "RABBITMQ_USE_LONGNAME", + "SYS_PREFIX" + ]). + +get_context() -> + Context0 = get_context_before_logging_init(), + Context1 = get_context_after_logging_init(Context0), + get_context_after_reloading_env(Context1). + +get_context(TakeFromRemoteNode) -> + Context0 = get_context_before_logging_init(TakeFromRemoteNode), + Context1 = get_context_after_logging_init(Context0), + get_context_after_reloading_env(Context1). + +get_context_before_logging_init() -> + get_context_before_logging_init(false). + +get_context_before_logging_init(TakeFromRemoteNode) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun os_type/1, + fun log_levels/1, + fun interactive_shell/1, + fun output_supports_colors/1 + ], + + run_context_steps(context_base(TakeFromRemoteNode), Steps). + +get_context_after_logging_init(Context) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun sys_prefix/1, + fun rabbitmq_base/1, + fun data_dir/1, + fun rabbitmq_home/1, + fun config_base_dir/1, + fun load_conf_env_file/1, + fun log_levels/1 + ], + + run_context_steps(Context, Steps). + +get_context_after_reloading_env(Context) -> + %% The order of steps below is important because some of them + %% depends on previous steps. + Steps = [ + fun nodename_type/1, + fun nodename/1, + fun split_nodename/1, + fun maybe_setup_dist_for_remote_query/1, + fun dbg_config/1, + fun main_config_file/1, + fun additional_config_files/1, + fun advanced_config_file/1, + fun log_base_dir/1, + fun main_log_file/1, + fun upgrade_log_file/1, + fun mnesia_base_dir/1, + fun mnesia_dir/1, + fun quorum_queue_dir/1, + fun pid_file/1, + fun keep_pid_file_on_exit/1, + fun feature_flags_file/1, + fun forced_feature_flags_on_init/1, + fun log_feature_flags_registry/1, + fun plugins_path/1, + fun plugins_expand_dir/1, + fun enabled_plugins_file/1, + fun enabled_plugins/1, + fun maybe_stop_dist_for_remote_query/1, + fun amqp_ipaddr/1, + fun amqp_tcp_port/1, + fun erlang_dist_tcp_port/1, + fun product_name/1, + fun product_version/1, + fun motd_file/1 + ], + + run_context_steps(Context, Steps). + +context_base(TakeFromRemoteNode) -> + Context = #{}, + case TakeFromRemoteNode of + false -> + Context; + offline -> + update_context(Context, + from_remote_node, + offline); + _ when is_atom(TakeFromRemoteNode) -> + update_context(Context, + from_remote_node, + {TakeFromRemoteNode, 10000}); + {RemoteNode, infinity} + when is_atom(RemoteNode) -> + update_context(Context, + from_remote_node, + TakeFromRemoteNode); + {RemoteNode, Timeout} + when is_atom(RemoteNode) andalso + is_integer(Timeout) andalso + Timeout >= 0 -> + update_context(Context, + from_remote_node, + {TakeFromRemoteNode, Timeout}) + end. + +-ifdef(TEST). +os_type(Context) -> + {OSType, Origin} = + try + {persistent_term:get({?MODULE, os_type}), environment} + catch + _:badarg -> + {os:type(), default} + end, + update_context(Context, os_type, OSType, Origin). +-else. +os_type(Context) -> + update_context(Context, os_type, os:type(), default). +-endif. + +run_context_steps(Context, Steps) -> + lists:foldl( + fun(Step, Context1) -> Step(Context1) end, + Context, + Steps). + +update_context(Context, Key, Value) -> + Context#{Key => Value}. + +-define(origin_is_valid(O), + O =:= default orelse + O =:= environment orelse + O =:= remote_node). + +update_context(#{var_origins := Origins} = Context, Key, Value, Origin) + when ?origin_is_valid(Origin) -> + Context#{Key => Value, + var_origins => Origins#{Key => Origin}}; +update_context(Context, Key, Value, Origin) + when ?origin_is_valid(Origin) -> + Context#{Key => Value, + var_origins => #{Key => Origin}}. + +get_used_env_vars() -> + lists:filter( + fun({Var, _}) -> var_is_used(Var) end, + lists:sort(os:list_env_vars())). + +log_process_env() -> + rabbit_log_prelaunch:debug("Process environment:"), + lists:foreach( + fun({Var, Value}) -> + rabbit_log_prelaunch:debug(" - ~s = ~ts", [Var, Value]) + end, lists:sort(os:list_env_vars())). + +log_context(Context) -> + rabbit_log_prelaunch:debug("Context (based on environment variables):"), + lists:foreach( + fun(Key) -> + Value = maps:get(Key, Context), + rabbit_log_prelaunch:debug(" - ~s: ~p", [Key, Value]) + end, + lists:sort(maps:keys(Context))). + +context_to_app_env_vars(Context) -> + rabbit_log_prelaunch:debug( + "Setting default application environment variables:"), + Fun = fun({App, Param, Value}) -> + rabbit_log_prelaunch:debug( + " - ~s:~s = ~p", [App, Param, Value]), + ok = application:set_env( + App, Param, Value, [{persistent, true}]) + end, + context_to_app_env_vars1(Context, Fun). + +context_to_app_env_vars_no_logging(Context) -> + Fun = fun({App, Param, Value}) -> + ok = application:set_env( + App, Param, Value, [{persistent, true}]) + end, + context_to_app_env_vars1(Context, Fun). + +context_to_app_env_vars1( + #{mnesia_dir := MnesiaDir, + feature_flags_file := FFFile, + quorum_queue_dir := QuorumQueueDir, + plugins_path := PluginsPath, + plugins_expand_dir := PluginsExpandDir, + enabled_plugins_file := EnabledPluginsFile} = Context, + Fun) -> + lists:foreach( + Fun, + %% Those are all the application environment variables which + %% were historically set on the erl(1) command line in + %% rabbitmq-server(8). + [{kernel, inet_default_connect_options, [{nodelay, true}]}, + {sasl, errlog_type, error}, + {os_mon, start_cpu_sup, false}, + {os_mon, start_disksup, false}, + {os_mon, start_memsup, false}, + {mnesia, dir, MnesiaDir}, + {ra, data_dir, QuorumQueueDir}, + {rabbit, feature_flags_file, FFFile}, + {rabbit, plugins_dir, PluginsPath}, + {rabbit, plugins_expand_dir, PluginsExpandDir}, + {rabbit, enabled_plugins_file, EnabledPluginsFile}]), + + case Context of + #{erlang_dist_tcp_port := DistTcpPort} -> + lists:foreach( + Fun, + [{kernel, inet_dist_listen_min, DistTcpPort}, + {kernel, inet_dist_listen_max, DistTcpPort}]); + _ -> + ok + end, + case Context of + #{amqp_ipaddr := IpAddr, + amqp_tcp_port := TcpPort} + when IpAddr /= undefined andalso TcpPort /= undefined -> + Fun({rabbit, tcp_listeners, [{IpAddr, TcpPort}]}); + _ -> + ok + end, + ok. + +context_to_code_path(#{plugins_path := PluginsPath}) -> + Dirs = get_user_lib_dirs(PluginsPath), + code:add_pathsa(lists:reverse(Dirs)). + +%% ------------------------------------------------------------------- +%% Code copied from `kernel/src/code_server.erl`. +%% +%% The goal is to mimic the behavior of the `$ERL_LIBS` environment +%% variable. + +get_user_lib_dirs(Path) -> + Sep = case os:type() of + {win32, _} -> ";"; + _ -> ":" + end, + SplitPath = string:lexemes(Path, Sep), + get_user_lib_dirs_1(SplitPath). + +get_user_lib_dirs_1([Dir|DirList]) -> + case erl_prim_loader:list_dir(Dir) of + {ok, Dirs} -> + Paths = make_path(Dir, Dirs), + %% Only add paths trailing with ./ebin. + [P || P <- Paths, filename:basename(P) =:= "ebin"] ++ + get_user_lib_dirs_1(DirList); + error -> + get_user_lib_dirs_1(DirList) + end; +get_user_lib_dirs_1([]) -> []. + +%% +%% Create the initial path. +%% +make_path(BundleDir, Bundles0) -> + Bundles = choose_bundles(Bundles0), + make_path(BundleDir, Bundles, []). + +choose_bundles(Bundles) -> + ArchiveExt = archive_extension(), + Bs = lists:sort([create_bundle(B, ArchiveExt) || B <- Bundles]), + [FullName || {_Name,_NumVsn,FullName} <- + choose(lists:reverse(Bs), [], ArchiveExt)]. + +create_bundle(FullName, ArchiveExt) -> + BaseName = filename:basename(FullName, ArchiveExt), + case split_base(BaseName) of + {Name, VsnStr} -> + case vsn_to_num(VsnStr) of + {ok, VsnNum} -> + {Name,VsnNum,FullName}; + false -> + {FullName,[0],FullName} + end; + _ -> + {FullName,[0],FullName} + end. + +%% Convert "X.Y.Z. ..." to [K, L, M| ...] +vsn_to_num(Vsn) -> + case is_vsn(Vsn) of + true -> + {ok, [list_to_integer(S) || S <- string:lexemes(Vsn, ".")]}; + _ -> + false + end. + +is_vsn(Str) when is_list(Str) -> + Vsns = string:lexemes(Str, "."), + lists:all(fun is_numstr/1, Vsns). + +is_numstr(Cs) -> + lists:all(fun (C) when $0 =< C, C =< $9 -> true; + (_) -> false + end, Cs). + +choose([{Name,NumVsn,NewFullName}=New|Bs], Acc, ArchiveExt) -> + case lists:keyfind(Name, 1, Acc) of + {_, NV, OldFullName} when NV =:= NumVsn -> + case filename:extension(OldFullName) =:= ArchiveExt of + false -> + choose(Bs,Acc, ArchiveExt); + true -> + Acc2 = lists:keystore(Name, 1, Acc, New), + choose(Bs,Acc2, ArchiveExt) + end; + {_, _, _} -> + choose(Bs,Acc, ArchiveExt); + false -> + choose(Bs,[{Name,NumVsn,NewFullName}|Acc], ArchiveExt) + end; +choose([],Acc, _ArchiveExt) -> + Acc. + +make_path(_, [], Res) -> + Res; +make_path(BundleDir, [Bundle|Tail], Res) -> + Dir = filename:append(BundleDir, Bundle), + Ebin = filename:append(Dir, "ebin"), + %% First try with /ebin + case is_dir(Ebin) of + true -> + make_path(BundleDir, Tail, [Ebin|Res]); + false -> + %% Second try with archive + Ext = archive_extension(), + Base = filename:basename(Bundle, Ext), + Ebin2 = filename:join([BundleDir, Base ++ Ext, Base, "ebin"]), + Ebins = + case split_base(Base) of + {AppName,_} -> + Ebin3 = filename:join([BundleDir, Base ++ Ext, + AppName, "ebin"]), + [Ebin3, Ebin2, Dir]; + _ -> + [Ebin2, Dir] + end, + case try_ebin_dirs(Ebins) of + {ok,FoundEbin} -> + make_path(BundleDir, Tail, [FoundEbin|Res]); + error -> + make_path(BundleDir, Tail, Res) + end + end. + +try_ebin_dirs([Ebin|Ebins]) -> + case is_dir(Ebin) of + true -> {ok,Ebin}; + false -> try_ebin_dirs(Ebins) + end; +try_ebin_dirs([]) -> + error. + +split_base(BaseName) -> + case string:lexemes(BaseName, "-") of + [_, _|_] = Toks -> + Vsn = lists:last(Toks), + AllButLast = lists:droplast(Toks), + {string:join(AllButLast, "-"),Vsn}; + [_|_] -> + BaseName + end. + +is_dir(Path) -> + case erl_prim_loader:read_file_info(Path) of + {ok,#file_info{type=directory}} -> true; + _ -> false + end. + +archive_extension() -> + init:archive_extension(). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_NODENAME +%% Erlang node name. +%% Default: rabbit@ +%% +%% RABBITMQ_USE_LONGNAME +%% Flag indicating if long Erlang node names should be used instead +%% of short ones. +%% Default: unset (use short names) + +nodename_type(Context) -> + case get_prefixed_env_var("RABBITMQ_USE_LONGNAME") of + false -> + update_context(Context, nodename_type, shortnames, default); + Value -> + NameType = case value_is_yes(Value) of + true -> longnames; + false -> shortnames + end, + update_context(Context, nodename_type, NameType, environment) + end. + +nodename(#{nodename_type := NameType} = Context) -> + LongHostname = net_adm:localhost(), + ShortHostname = re:replace(LongHostname, "\\..*$", "", [{return, list}]), + case get_prefixed_env_var("RABBITMQ_NODENAME") of + false when NameType =:= shortnames -> + Nodename = rabbit_nodes_common:make({"rabbit", ShortHostname}), + update_context(Context, nodename, Nodename, default); + false when NameType =:= longnames -> + Nodename = rabbit_nodes_common:make({"rabbit", LongHostname}), + update_context(Context, nodename, Nodename, default); + Value -> + Nodename = case string:find(Value, "@") of + nomatch when NameType =:= shortnames -> + rabbit_nodes_common:make({Value, ShortHostname}); + nomatch when NameType =:= longnames -> + rabbit_nodes_common:make({Value, LongHostname}); + _ -> + rabbit_nodes_common:make(Value) + end, + update_context(Context, nodename, Nodename, environment) + end. + +split_nodename(#{nodename := Nodename} = Context) -> + update_context(Context, + split_nodename, rabbit_nodes_common:parts(Nodename)). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_CONFIG_FILE +%% Main configuration file. +%% Extension is optional. `.config` for the old erlang-term-based +%% format, `.conf` for the new Cuttlefish-based format. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/rabbitmq +%% (Windows) ${RABBITMQ_BASE}\rabbitmq +%% +%% RABBITMQ_CONFIG_FILES +%% Additional configuration files. +%% If a directory, all files directly inside it are loaded. +%% If a glob pattern, all matching file are loaded. +%% Only considered if the main configuration file is Cuttlefish-based. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/conf.d/*.conf +%% (Windows) ${RABBITMQ_BASE}\conf.d\*.conf +%% +%% RABBITMQ_ADVANCED_CONFIG_FILE +%% Advanced configuration file. +%% Erlang-term-based format with a `.config` extension. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/advanced.config +%% (Windows) ${RABBITMQ_BASE}\advanced.config + +config_base_dir(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + Dir = filename:join([SysPrefix, "etc", "rabbitmq"]), + update_context(Context, config_base_dir, Dir); +config_base_dir(#{os_type := {win32, _}, + rabbitmq_base := Dir} = Context) -> + update_context(Context, config_base_dir, Dir). + +main_config_file(Context) -> + case get_prefixed_env_var("RABBITMQ_CONFIG_FILE") of + false -> + File = get_default_main_config_file(Context), + update_context(Context, main_config_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, main_config_file, File, environment) + end. + +get_default_main_config_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "rabbitmq"). + +additional_config_files(Context) -> + case get_prefixed_env_var("RABBITMQ_CONFIG_FILES") of + false -> + Pattern = get_default_additional_config_files(Context), + update_context( + Context, additional_config_files, Pattern, default); + Value -> + Pattern = normalize_path(Value), + update_context( + Context, additional_config_files, Pattern, environment) + end. + +get_default_additional_config_files(#{config_base_dir := ConfigBaseDir}) -> + filename:join([ConfigBaseDir, "conf.d", "*.conf"]). + +advanced_config_file(Context) -> + case get_prefixed_env_var("RABBITMQ_ADVANCED_CONFIG_FILE") of + false -> + File = get_default_advanced_config_file(Context), + update_context(Context, advanced_config_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, advanced_config_file, File, environment) + end. + +get_default_advanced_config_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "advanced.config"). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_LOG_BASE +%% Directory to write log files +%% Default: (Unix) ${SYS_PREFIX}/var/log/rabbitmq +%% (Windows) ${RABBITMQ_BASE}\log +%% +%% RABBITMQ_LOGS +%% Main log file +%% Default: ${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}.log +%% +%% RABBITMQ_UPDATE_LOG +%% Upgrade-procesure-specific log file +%% Default: ${RABBITMQ_LOG_BASE}/${RABBITMQ_NODENAME}_upgrade.log +%% +%% RABBITMQ_LOG +%% Log level; overrides the configuration file value +%% Default: (undefined) +%% +%% RABBITMQ_DBG +%% List of `module`, `module:function` or `module:function/arity` +%% to watch with dbg. +%% Default: (undefined) + +log_levels(Context) -> + case get_prefixed_env_var("RABBITMQ_LOG") of + false -> + update_context(Context, log_levels, undefined, default); + Value -> + LogLevels = parse_log_levels(string:lexemes(Value, ","), #{}), + update_context(Context, log_levels, LogLevels, environment) + end. + +parse_log_levels([CategoryValue | Rest], Result) -> + case string:lexemes(CategoryValue, "=") of + ["+color"] -> + Result1 = Result#{color => true}, + parse_log_levels(Rest, Result1); + ["-color"] -> + Result1 = Result#{color => false}, + parse_log_levels(Rest, Result1); + [CategoryOrLevel] -> + case parse_level(CategoryOrLevel) of + undefined -> + Result1 = Result#{CategoryOrLevel => info}, + parse_log_levels(Rest, Result1); + Level -> + Result1 = Result#{global => Level}, + parse_log_levels(Rest, Result1) + end; + [Category, Level0] -> + case parse_level(Level0) of + undefined -> + parse_log_levels(Rest, Result); + Level -> + Result1 = Result#{Category => Level}, + parse_log_levels(Rest, Result1) + end + end; +parse_log_levels([], Result) -> + Result. + +parse_level("debug") -> debug; +parse_level("info") -> info; +parse_level("notice") -> notice; +parse_level("warning") -> warning; +parse_level("error") -> error; +parse_level("critical") -> critical; +parse_level("alert") -> alert; +parse_level("emergency") -> emergency; +parse_level("none") -> none; +parse_level(_) -> undefined. + +log_base_dir(#{os_type := OSType} = Context) -> + case {get_prefixed_env_var("RABBITMQ_LOG_BASE"), OSType} of + {false, {unix, _}} -> + #{sys_prefix := SysPrefix} = Context, + Dir = filename:join([SysPrefix, "var", "log", "rabbitmq"]), + update_context(Context, log_base_dir, Dir, default); + {false, {win32, _}} -> + #{rabbitmq_base := RabbitmqBase} = Context, + Dir = filename:join([RabbitmqBase, "log"]), + update_context(Context, log_base_dir, Dir, default); + {Value, _} -> + Dir = normalize_path(Value), + update_context(Context, log_base_dir, Dir, environment) + end. + +main_log_file(#{nodename := Nodename, + log_base_dir := LogBaseDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_LOGS") of + false -> + File= filename:join(LogBaseDir, + atom_to_list(Nodename) ++ ".log"), + update_context(Context, main_log_file, File, default); + "-" -> + update_context(Context, main_log_file, "-", environment); + Value -> + File = normalize_path(Value), + update_context(Context, main_log_file, File, environment) + end. + +upgrade_log_file(#{nodename := Nodename, + log_base_dir := LogBaseDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_UPGRADE_LOG") of + false -> + File = filename:join(LogBaseDir, + atom_to_list(Nodename) ++ "_upgrade.log"), + update_context(Context, upgrade_log_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, upgrade_log_file, File, environment) + end. + +dbg_config() -> + {Mods, Output} = get_dbg_config(), + #{dbg_output => Output, + dbg_mods => Mods}. + +dbg_config(Context) -> + DbgContext = dbg_config(), + maps:merge(Context, DbgContext). + +get_dbg_config() -> + Output = stdout, + DbgValue = get_prefixed_env_var("RABBITMQ_DBG"), + case DbgValue of + false -> {[], Output}; + _ -> get_dbg_config1(string:lexemes(DbgValue, ","), [], Output) + end. + +get_dbg_config1(["=" ++ Filename | Rest], Mods, _) -> + get_dbg_config1(Rest, Mods, Filename); +get_dbg_config1([SpecValue | Rest], Mods, Output) -> + Pattern = "([^:]+)(?::([^/]+)(?:/([0-9]+))?)?", + Options = [{capture, all_but_first, list}], + Mods1 = case re:run(SpecValue, Pattern, Options) of + {match, [M, F, A]} -> + Entry = {list_to_atom(M), + list_to_atom(F), + list_to_integer(A)}, + [Entry | Mods]; + {match, [M, F]} -> + Entry = {list_to_atom(M), + list_to_atom(F), + '_'}, + [Entry | Mods]; + {match, [M]} -> + Entry = {list_to_atom(M), + '_', + '_'}, + [Entry | Mods]; + nomatch -> + Mods + end, + get_dbg_config1(Rest, Mods1, Output); +get_dbg_config1([], Mods, Output) -> + {lists:reverse(Mods), Output}. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_MNESIA_BASE +%% Directory where to create Mnesia directory. +%% Default: (Unix) ${SYS_PREFIX}/var/lib/rabbitmq/mnesia +%% (Windows) ${RABBITMQ_BASE}/db +%% +%% RABBITMQ_MNESIA_DIR +%% Directory where to put Mnesia data. +%% Default: (Unix) ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME} +%% (Windows) ${RABBITMQ_MNESIA_BASE}\${RABBITMQ_NODENAME}-mnesia + +mnesia_base_dir(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_BASE") of + false when Remote =:= offline -> + update_context(Context, mnesia_base_dir, undefined, default); + false -> + mnesia_base_dir_from_node(Context); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_base_dir, Dir, environment) + end; +mnesia_base_dir(Context) -> + mnesia_base_dir_from_env(Context). + +mnesia_base_dir_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_BASE") of + false -> + Dir = get_default_mnesia_base_dir(Context), + update_context(Context, mnesia_base_dir, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_base_dir, Dir, environment) + end. + +mnesia_base_dir_from_node(Context) -> + %% This variable is used to compute other variables only, we + %% don't need to know what a remote node used initially. Only the + %% variables based on it are relevant. + update_context(Context, mnesia_base_dir, undefined, default). + +get_default_mnesia_base_dir(#{data_dir := DataDir} = Context) -> + Basename = case Context of + #{os_type := {unix, _}} -> "mnesia"; + #{os_type := {win32, _}} -> "db" + end, + filename:join(DataDir, Basename). + +mnesia_dir(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_DIR") of + false when Remote =:= offline -> + update_context(Context, mnesia_dir, undefined, default); + false -> + mnesia_dir_from_node(Context); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, environment) + end; +mnesia_dir(Context) -> + mnesia_dir_from_env(Context). + +mnesia_dir_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MNESIA_DIR") of + false -> + Dir = get_default_mnesia_dir(Context), + update_context(Context, mnesia_dir, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, environment) + end. + +mnesia_dir_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, application, get_env, [mnesia, dir]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {mnesia, dir, undefined}}); + {ok, {ok, Value}} -> + Dir = normalize_path(Value), + update_context(Context, mnesia_dir, Dir, remote_node); + {badrpc, nodedown} -> + update_context(Context, mnesia_dir, undefined, default) + end. + +get_default_mnesia_dir(#{os_type := {unix, _}, + nodename := Nodename, + mnesia_base_dir := MnesiaBaseDir}) + when MnesiaBaseDir =/= undefined -> + filename:join(MnesiaBaseDir, atom_to_list(Nodename)); +get_default_mnesia_dir(#{os_type := {win32, _}, + nodename := Nodename, + mnesia_base_dir := MnesiaBaseDir}) + when MnesiaBaseDir =/= undefined -> + filename:join(MnesiaBaseDir, atom_to_list(Nodename) ++ "-mnesia"). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_QUORUM_DIR +%% Directory where to store Ra state for quorum queues. +%% Default: ${RABBITMQ_MNESIA_DIR}/quorum + +quorum_queue_dir(#{mnesia_dir := MnesiaDir} = Context) -> + case get_prefixed_env_var("RABBITMQ_QUORUM_DIR") of + false when MnesiaDir =/= undefined -> + Dir = filename:join(MnesiaDir, "quorum"), + update_context(Context, quorum_queue_dir, Dir, default); + false when MnesiaDir =:= undefined -> + update_context(Context, quorum_queue_dir, undefined, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, quorum_queue_dir, Dir, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PID_FILE +%% File used to write the Erlang VM OS PID. +%% Default: ${RABBITMQ_MNESIA_DIR}.pid +%% +%% RABBITMQ_KEEP_PID_FILE_ON_EXIT +%% Whether to keep or remove the PID file on Erlang VM exit. +%% Default: true + +pid_file(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_prefixed_env_var("RABBITMQ_PID_FILE") of + false when MnesiaBaseDir =/= undefined -> + File = filename:join(MnesiaBaseDir, + atom_to_list(Nodename) ++ ".pid"), + update_context(Context, pid_file, File, default); + false when MnesiaBaseDir =:= undefined -> + update_context(Context, pid_file, undefined, default); + Value -> + File = normalize_path(Value), + update_context(Context, pid_file, File, environment) + end. + +keep_pid_file_on_exit(Context) -> + case get_prefixed_env_var("RABBITMQ_KEEP_PID_FILE_ON_EXIT") of + false -> + update_context(Context, keep_pid_file_on_exit, false, default); + Value -> + Keep = value_is_yes(Value), + update_context(Context, keep_pid_file_on_exit, Keep, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_FEATURE_FLAGS_FILE +%% File used to store enabled feature flags. +%% Default: ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-feature_flags + +feature_flags_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_FEATURE_FLAGS_FILE") of + false when Remote =:= offline -> + update_context(Context, feature_flags_file, undefined, default); + false -> + feature_flags_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, environment) + end; +feature_flags_file(Context) -> + feature_flags_file_from_env(Context). + +feature_flags_file_from_env(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_env_var("RABBITMQ_FEATURE_FLAGS_FILE") of + false -> + File = filename:join(MnesiaBaseDir, + atom_to_list(Nodename) ++ "-feature_flags"), + update_context(Context, feature_flags_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, environment) + end. + +feature_flags_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, + application, get_env, [rabbit, feature_flags_file]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, feature_flags_file, undefined}}); + {ok, {ok, Value}} -> + File = normalize_path(Value), + update_context(Context, feature_flags_file, File, remote_node); + {badrpc, nodedown} -> + update_context(Context, feature_flags_file, undefined, default) + end. + +forced_feature_flags_on_init(Context) -> + Value = get_prefixed_env_var("RABBITMQ_FEATURE_FLAGS", + [keep_empty_string_as_is]), + case Value of + false -> + %% get_prefixed_env_var() considers an empty string + %% is the same as an undefined environment variable. + update_context(Context, + forced_feature_flags_on_init, undefined, default); + _ -> + Flags = [list_to_atom(V) || V <- string:lexemes(Value, ",")], + update_context(Context, + forced_feature_flags_on_init, Flags, environment) + end. + +log_feature_flags_registry(Context) -> + case get_prefixed_env_var("RABBITMQ_LOG_FF_REGISTRY") of + false -> + update_context(Context, + log_feature_flags_registry, false, default); + Value -> + Log = value_is_yes(Value), + update_context(Context, + log_feature_flags_registry, Log, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PLUGINS_DIR +%% List of directories where to look for plugins. +%% Directories are separated by: +%% ':' on Unix +%% ';' on Windows +%% Default: ${RABBITMQ_HOME}/plugins +%% +%% RABBITMQ_PLUGINS_EXPAND_DIR +%% Directory where to expand plugin archives. +%% Default: ${RABBITMQ_MNESIA_BASE}/${RABBITMQ_NODENAME}-plugins-expand +%% +%% RABBITMQ_ENABLED_PLUGINS_FILE +%% File where the list of enabled plugins is stored. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/enabled_plugins +%% (Windows) ${RABBITMQ_BASE}\enabled_plugins +%% +%% RABBITMQ_ENABLED_PLUGINS +%% List of plugins to enable on startup. +%% Values are: +%% "ALL" to enable all plugins +%% "" to enable no plugin +%% a list of plugin names, separated by a coma (',') +%% Default: Empty (i.e. use ${RABBITMQ_ENABLED_PLUGINS_FILE}) + +plugins_path(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_DIR") of + false when Remote =:= offline -> + update_context(Context, plugins_path, undefined, default); + false -> + plugins_path_from_node(Context); + Path -> + update_context(Context, plugins_path, Path, environment) + end; +plugins_path(Context) -> + plugins_path_from_env(Context). + +plugins_path_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_DIR") of + false -> + Path = get_default_plugins_path_from_env(Context), + update_context(Context, plugins_path, Path, default); + Path -> + update_context(Context, plugins_path, Path, environment) + end. + +plugins_path_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, application, get_env, [rabbit, plugins_dir]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, plugins_dir, undefined}}); + {ok, {ok, Path}} -> + update_context(Context, plugins_path, Path, remote_node); + {badrpc, nodedown} -> + update_context(Context, plugins_path, undefined, default) + end. + +get_default_plugins_path(#{from_remote_node := offline}) -> + undefined; +get_default_plugins_path(#{from_remote_node := Remote}) -> + get_default_plugins_path_from_node(Remote); +get_default_plugins_path(Context) -> + get_default_plugins_path_from_env(Context). + +get_default_plugins_path_from_env(#{os_type := OSType}) -> + ThisModDir = this_module_dir(), + PluginsDir = rabbit_common_mod_location_to_plugins_dir(ThisModDir), + case {OSType, PluginsDir} of + {{unix, _}, "/usr/lib/rabbitmq/" ++ _} -> + UserPluginsDir = filename:join( + ["/", "usr", "lib", "rabbitmq", "plugins"]), + UserPluginsDir ++ ":" ++ PluginsDir; + _ -> + PluginsDir + end. + +get_default_plugins_path_from_node(Remote) -> + Ret = query_remote(Remote, code, where_is_file, ["rabbit_common.app"]), + case Ret of + {ok, non_existing = Error} -> + throw({query, Remote, {code, where_is_file, Error}}); + {ok, Path} -> + rabbit_common_mod_location_to_plugins_dir(filename:dirname(Path)); + {badrpc, nodedown} -> + undefined + end. + +rabbit_common_mod_location_to_plugins_dir(ModDir) -> + case filename:basename(ModDir) of + "ebin" -> + case filelib:is_dir(ModDir) of + false -> + %% rabbit_common in the plugin's .ez archive. + filename:dirname( + filename:dirname( + filename:dirname(ModDir))); + true -> + %% rabbit_common in the plugin's directory. + filename:dirname( + filename:dirname(ModDir)) + end; + _ -> + %% rabbit_common in the CLI escript. + filename:join( + filename:dirname( + filename:dirname(ModDir)), + "plugins") + end. + +plugins_expand_dir(#{mnesia_base_dir := MnesiaBaseDir, + nodename := Nodename} = Context) -> + case get_prefixed_env_var("RABBITMQ_PLUGINS_EXPAND_DIR") of + false when MnesiaBaseDir =/= undefined -> + Dir = filename:join( + MnesiaBaseDir, + atom_to_list(Nodename) ++ "-plugins-expand"), + update_context(Context, plugins_expand_dir, Dir, default); + false when MnesiaBaseDir =:= undefined -> + update_context(Context, plugins_expand_dir, undefined, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, plugins_expand_dir, Dir, environment) + end. + +enabled_plugins_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_ENABLED_PLUGINS_FILE") of + false when Remote =:= offline -> + update_context(Context, enabled_plugins_file, undefined, default); + false -> + enabled_plugins_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, environment) + end; +enabled_plugins_file(Context) -> + enabled_plugins_file_from_env(Context). + +enabled_plugins_file_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_ENABLED_PLUGINS_FILE") of + false -> + File = get_default_enabled_plugins_file(Context), + update_context(Context, enabled_plugins_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, environment) + end. + +get_default_enabled_plugins_file(#{config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "enabled_plugins"). + +enabled_plugins_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = query_remote(Remote, + application, get_env, [rabbit, enabled_plugins_file]), + case Ret of + {ok, undefined} -> + throw({query, Remote, {rabbit, enabled_plugins_file, undefined}}); + {ok, {ok, Value}} -> + File = normalize_path(Value), + update_context(Context, enabled_plugins_file, File, remote_node); + {badrpc, nodedown} -> + update_context(Context, enabled_plugins_file, undefined, default) + end. + +enabled_plugins(Context) -> + Value = get_prefixed_env_var( + "RABBITMQ_ENABLED_PLUGINS", + [keep_empty_string_as_is]), + case Value of + false -> + update_context(Context, enabled_plugins, undefined, default); + "ALL" -> + update_context(Context, enabled_plugins, all, environment); + "" -> + update_context(Context, enabled_plugins, [], environment); + _ -> + Plugins = [list_to_atom(P) || P <- string:lexemes(Value, ",")], + update_context(Context, enabled_plugins, Plugins, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_NODE_IP_ADDRESS +%% AMQP TCP IP address to listen on +%% Default: unset (i.e. listen on all interfaces) +%% +%% RABBITMQ_NODE_PORT +%% AMQP TCP port. +%% Default: 5672 +%% +%% RABBITMQ_DIST_PORT +%% Erlang distribution TCP port. +%% Default: ${RABBITMQ_NODE_PORT} + 20000 + +amqp_ipaddr(Context) -> + case get_prefixed_env_var("RABBITMQ_NODE_IP_ADDRESS") of + false -> + update_context(Context, amqp_ipaddr, "auto", default); + Value -> + update_context(Context, amqp_ipaddr, Value, environment) + end. + +amqp_tcp_port(Context) -> + case get_prefixed_env_var("RABBITMQ_NODE_PORT") of + false -> + update_context(Context, amqp_tcp_port, 5672, default); + TcpPortStr -> + try + TcpPort = erlang:list_to_integer(TcpPortStr), + update_context(Context, amqp_tcp_port, TcpPort, environment) + catch + _:badarg -> + rabbit_log_prelaunch:error( + "Invalid value for $RABBITMQ_NODE_PORT: ~p", + [TcpPortStr]), + throw({exit, ex_config}) + end + end. + +erlang_dist_tcp_port(#{amqp_tcp_port := AmqpTcpPort} = Context) -> + case get_prefixed_env_var("RABBITMQ_DIST_PORT") of + false -> + TcpPort = AmqpTcpPort + 20000, + update_context(Context, erlang_dist_tcp_port, TcpPort, default); + TcpPortStr -> + try + TcpPort = erlang:list_to_integer(TcpPortStr), + update_context(Context, + erlang_dist_tcp_port, TcpPort, environment) + catch + _:badarg -> + rabbit_log_prelaunch:error( + "Invalid value for $RABBITMQ_DIST_PORT: ~p", + [TcpPortStr]), + throw({exit, ex_config}) + end + end. + +%% ------------------------------------------------------------------- +%% +%% SYS_PREFIX [Unix only] +%% Default: "" +%% +%% RABBITMQ_BASE [Windows only] +%% Directory where to put RabbitMQ data. +%% Default: !APPDATA!\RabbitMQ + +sys_prefix(#{os_type := {unix, _}} = Context) -> + case get_env_var("SYS_PREFIX") of + false -> + update_context(Context, sys_prefix, "", default); + Value -> + Dir = normalize_path(Value), + update_context(Context, sys_prefix, Dir, environment) + end; +sys_prefix(Context) -> + Context. + +rabbitmq_base(#{os_type := {win32, _}} = Context) -> + case get_env_var("RABBITMQ_BASE") of + false -> + AppData = normalize_path(get_env_var("APPDATA")), + Dir = filename:join(AppData, "RabbitMQ"), + update_context(Context, rabbitmq_base, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, rabbitmq_base, Dir, environment) + end; +rabbitmq_base(Context) -> + Context. + +data_dir(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + Dir = filename:join([SysPrefix, "var", "lib", "rabbitmq"]), + update_context(Context, data_dir, Dir); +data_dir(#{os_type := {win32, _}, + rabbitmq_base := RabbitmqBase} = Context) -> + update_context(Context, data_dir, RabbitmqBase). + +rabbitmq_home(Context) -> + case get_env_var("RABBITMQ_HOME") of + false -> + Dir = filename:dirname(get_default_plugins_path(Context)), + update_context(Context, rabbitmq_home, Dir, default); + Value -> + Dir = normalize_path(Value), + update_context(Context, rabbitmq_home, Dir, environment) + end. + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_ALLOW_INPUT +%% Indicate if an Erlang shell is started or not. +%% Default: false + +interactive_shell(Context) -> + case get_env_var("RABBITMQ_ALLOW_INPUT") of + false -> + update_context(Context, + interactive_shell, false, default); + Value -> + update_context(Context, + interactive_shell, value_is_yes(Value), environment) + end. + +%% FIXME: We would need a way to call isatty(3) to make sure the output +%% is a terminal. +output_supports_colors(#{os_type := {unix, _}} = Context) -> + update_context(Context, output_supports_colors, true, default); +output_supports_colors(#{os_type := {win32, _}} = Context) -> + update_context(Context, output_supports_colors, false, default). + +%% ------------------------------------------------------------------- +%% +%% RABBITMQ_PRODUCT_NAME +%% Override the product name +%% Default: unset (i.e. "RabbitMQ") +%% +%% RABBITMQ_PRODUCT_VERSION +%% Override the product version +%% Default: unset (i.e. `rabbit` application version). +%% +%% RABBITMQ_MOTD_FILE +%% Indicate a filename containing a "message of the day" to add to +%% the banners, both the logged and the printed ones. +%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/motd +%% (Windows) ${RABBITMQ_BASE}\motd.txt + +product_name(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_NAME") of + false when Remote =:= offline -> + update_context(Context, product_name, undefined, default); + false -> + product_name_from_node(Context); + Value -> + update_context(Context, product_name, Value, environment) + end; +product_name(Context) -> + product_name_from_env(Context). + +product_name_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_NAME") of + false -> + update_context(Context, product_name, undefined, default); + Value -> + update_context(Context, product_name, Value, environment) + end. + +product_name_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, product_name, [])), + case Ret of + {badrpc, nodedown} -> + update_context(Context, product_name, undefined, default); + {query, _, _} -> + update_context(Context, product_name, undefined, default); + Value -> + update_context(Context, product_name, Value, remote_node) + end. + +product_version(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_VERSION") of + false when Remote =:= offline -> + update_context(Context, product_version, undefined, default); + false -> + product_version_from_node(Context); + Value -> + update_context(Context, product_version, Value, environment) + end; +product_version(Context) -> + product_version_from_env(Context). + +product_version_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_PRODUCT_VERSION") of + false -> + update_context(Context, product_version, undefined, default); + Value -> + update_context(Context, product_version, Value, environment) + end. + +product_version_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, product_version, [])), + case Ret of + {badrpc, _} -> + update_context(Context, product_version, undefined, default); + {query, _, _} -> + update_context(Context, product_version, undefined, default); + Value -> + update_context(Context, product_version, Value, remote_node) + end. + +motd_file(#{from_remote_node := Remote} = Context) -> + case get_prefixed_env_var("RABBITMQ_MOTD_FILE") of + false when Remote =:= offline -> + update_context(Context, motd_file, undefined, default); + false -> + motd_file_from_node(Context); + Value -> + File = normalize_path(Value), + update_context(Context, motd_file, File, environment) + end; +motd_file(Context) -> + motd_file_from_env(Context). + +motd_file_from_env(Context) -> + case get_prefixed_env_var("RABBITMQ_MOTD_FILE") of + false -> + File = get_default_motd_file(Context), + update_context(Context, motd_file, File, default); + Value -> + File = normalize_path(Value), + update_context(Context, motd_file, File, environment) + end. + +get_default_motd_file(#{os_type := {unix, _}, + config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "motd"); +get_default_motd_file(#{os_type := {win32, _}, + config_base_dir := ConfigBaseDir}) -> + filename:join(ConfigBaseDir, "motd.txt"). + +motd_file_from_node(#{from_remote_node := Remote} = Context) -> + Ret = (catch query_remote(Remote, rabbit, motd_file, [])), + case Ret of + {badrpc, _} -> + update_context(Context, motd_file, undefined, default); + {query, _, _} -> + update_context(Context, motd_file, undefined, default); + File -> + update_context(Context, motd_file, File, remote_node) + end. + +%% ------------------------------------------------------------------- +%% Loading of rabbitmq-env.conf. +%% ------------------------------------------------------------------- + +load_conf_env_file(#{os_type := {unix, _}, + sys_prefix := SysPrefix} = Context) -> + {ConfEnvFile, Origin} = + case get_prefixed_env_var("RABBITMQ_CONF_ENV_FILE") of + false -> + File = filename:join( + [SysPrefix, "etc", "rabbitmq", "rabbitmq-env.conf"]), + {File, default}; + Value -> + {normalize_path(Value), environment} + end, + Context1 = update_context(Context, conf_env_file, ConfEnvFile, Origin), + case loading_conf_env_file_enabled(Context1) of + true -> + case filelib:is_regular(ConfEnvFile) of + false -> + rabbit_log_prelaunch:debug( + "No $RABBITMQ_CONF_ENV_FILE (~ts)", [ConfEnvFile]), + Context1; + true -> + case os:find_executable("sh") of + false -> Context1; + Sh -> do_load_conf_env_file(Context1, + Sh, + ConfEnvFile) + end + end; + false -> + rabbit_log_prelaunch:debug( + "Loading of $RABBITMQ_CONF_ENV_FILE (~ts) is disabled", + [ConfEnvFile]), + Context1 + end; +load_conf_env_file(#{os_type := {win32, _}, + rabbitmq_base := RabbitmqBase} = Context) -> + {ConfEnvFile, Origin} = + case get_prefixed_env_var("RABBITMQ_CONF_ENV_FILE") of + false -> + File = filename:join([RabbitmqBase, "rabbitmq-env-conf.bat"]), + {File, default}; + Value -> + {normalize_path(Value), environment} + end, + Context1 = update_context(Context, conf_env_file, ConfEnvFile, Origin), + case loading_conf_env_file_enabled(Context1) of + true -> + rabbit_log_prelaunch:notice( + "Loading of $RABBITMQ_CONF_ENV_FILE (~s) " + "is not implemented for Windows", + [ConfEnvFile]), + Context1; + false -> + rabbit_log_prelaunch:debug( + "Loading of $RABBITMQ_CONF_ENV_FILE (~ts) is disabled", + [ConfEnvFile]), + Context1 + end; +load_conf_env_file(Context) -> + Context. + +-spec loading_conf_env_file_enabled(map()) -> boolean(). + +-ifdef(TEST). +loading_conf_env_file_enabled(_) -> + persistent_term:get({?MODULE, load_conf_env_file}, true). +-else. +loading_conf_env_file_enabled(_) -> + %% When this module is built without `TEST` defined, we want this + %% function to always return true. However, this makes Dialyzer + %% think it can only return true: this is not the case when the + %% module is compiled with `TEST` defined. The following line is + %% here to trick Dialyzer. + erlang:get({?MODULE, always_undefined}) =:= undefined. +-endif. + +do_load_conf_env_file(Context, Sh, ConfEnvFile) -> + rabbit_log_prelaunch:debug( + "Sourcing $RABBITMQ_CONF_ENV_FILE: ~ts", [ConfEnvFile]), + Marker = rabbit_misc:format( + "-----BEGIN VARS LIST FOR PID ~s-----", [os:getpid()]), + Script = rabbit_misc:format( + ". \"~ts\" && " + "echo \"~s\" && " + "set", [ConfEnvFile, Marker]), + Args = ["-ex", "-c", Script], + + #{sys_prefix := SysPrefix, + rabbitmq_home := RabbitmqHome} = Context, + MainConfigFile = re:replace( + get_default_main_config_file(Context), + "\\.(conf|config)$", "", [{return, list}]), + Env = [ + {"SYS_PREFIX", SysPrefix}, + {"RABBITMQ_HOME", RabbitmqHome}, + {"CONFIG_FILE", MainConfigFile}, + {"ADVANCED_CONFIG_FILE", get_default_advanced_config_file(Context)}, + {"MNESIA_BASE", get_default_mnesia_base_dir(Context)}, + {"ENABLED_PLUGINS_FILE", get_default_enabled_plugins_file(Context)}, + {"PLUGINS_DIR", get_default_plugins_path_from_env(Context)}, + {"CONF_ENV_FILE_PHASE", "rabbtimq-prelaunch"} + ], + + Port = erlang:open_port( + {spawn_executable, Sh}, + [{args, Args}, + {env, Env}, + binary, + use_stdio, + stderr_to_stdout, + exit_status]), + collect_sh_output(Context, Port, Marker, <<>>). + +collect_sh_output(Context, Port, Marker, Output) -> + receive + {Port, {exit_status, ExitStatus}} -> + rabbit_log_prelaunch:debug( + "$RABBITMQ_CONF_ENV_FILE exit status: ~b", [ExitStatus]), + DecodedOutput = unicode:characters_to_list(Output), + Lines = string:split(string:trim(DecodedOutput), "\n", all), + rabbit_log_prelaunch:debug("$RABBITMQ_CONF_ENV_FILE output:"), + [rabbit_log_prelaunch:debug(" ~ts", [Line]) + || Line <- Lines], + case ExitStatus of + 0 -> parse_conf_env_file_output(Context, Marker, Lines); + _ -> Context + end; + {Port, {data, Chunk}} -> + collect_sh_output(Context, Port, Marker, [Output, Chunk]) + end. + +parse_conf_env_file_output(Context, _, []) -> + Context; +parse_conf_env_file_output(Context, Marker, [Marker | Lines]) -> + %% Found our marker, let's parse variables. + parse_conf_env_file_output1(Context, Lines, #{}); +parse_conf_env_file_output(Context, Marker, [_ | Lines]) -> + parse_conf_env_file_output(Context, Marker, Lines). + +parse_conf_env_file_output1(Context, [], Vars) -> + %% Re-export variables. + lists:foreach( + fun(Var) -> + IsUsed = var_is_used(Var), + IsSet = var_is_set(Var), + case IsUsed andalso not IsSet of + true -> + rabbit_log_prelaunch:debug( + "$RABBITMQ_CONF_ENV_FILE: re-exporting variable $~s", + [Var]), + os:putenv(Var, maps:get(Var, Vars)); + false -> + ok + end + end, lists:sort(maps:keys(Vars))), + Context; +parse_conf_env_file_output1(Context, [Line | Lines], Vars) -> + SetXOutput = is_sh_set_x_output(Line), + ShFunction = is_sh_function(Line, Lines), + if + SetXOutput -> + parse_conf_env_file_output1(Context, Lines, Vars); + ShFunction -> + skip_sh_function(Context, Lines, Vars); + true -> + case string:split(Line, "=") of + [Var, IncompleteValue] -> + {Value, Lines1} = parse_sh_literal(IncompleteValue, Lines), + Vars1 = Vars#{Var => Value}, + parse_conf_env_file_output1(Context, Lines1, Vars1); + _ -> + %% Parsing failed somehow. + rabbit_log_prelaunch:warning( + "Failed to parse $RABBITMQ_CONF_ENV_FILE output: ~p", + [Line]), + Context + end + end. + +is_sh_set_x_output(Line) -> + re:run(Line, "^\\++ ", [{capture, none}]) =:= match. + +is_sh_function(_, []) -> + false; +is_sh_function(Line, Lines) -> + re:run(Line, "\\s\\(\\)\\s*$", [{capture, none}]) =:= match + andalso + re:run(hd(Lines), "^\\s*\\{\\s*$", [{capture, none}]) =:= match. + +parse_sh_literal("'" ++ SingleQuoted, Lines) -> + parse_single_quoted_literal(SingleQuoted, Lines, ""); +parse_sh_literal("$'" ++ DollarSingleQuoted, Lines) -> + parse_dollar_single_quoted_literal(DollarSingleQuoted, Lines, ""); +parse_sh_literal(Unquoted, Lines) -> + {Unquoted, Lines}. + +parse_single_quoted_literal([$'], Lines, Literal) -> + %% We reached the closing single quote. + {lists:reverse(Literal), Lines}; +parse_single_quoted_literal([], [Line | Lines], Literal) -> + %% We reached the end of line before finding the closing single + %% quote. The literal continues on the next line and includes that + %% newline character. + parse_single_quoted_literal(Line, Lines, [$\n | Literal]); +parse_single_quoted_literal([C | Rest], Lines, Literal) -> + parse_single_quoted_literal(Rest, Lines, [C | Literal]). + +parse_dollar_single_quoted_literal([$'], Lines, Literal) -> + %% We reached the closing single quote. + {lists:reverse(Literal), Lines}; +parse_dollar_single_quoted_literal([], [Line | Lines], Literal) -> + %% We reached the end of line before finding the closing single + %% quote. The literal continues on the next line and includes that + %% newline character. + parse_dollar_single_quoted_literal(Line, Lines, [$\n | Literal]); +parse_dollar_single_quoted_literal([C | Rest], Lines, Literal) -> + parse_dollar_single_quoted_literal(Rest, Lines, [C | Literal]). + +skip_sh_function(Context, ["}" | Lines], Vars) -> + parse_conf_env_file_output1(Context, Lines, Vars); +skip_sh_function(Context, [_ | Lines], Vars) -> + skip_sh_function(Context, Lines, Vars). + +%% ------------------------------------------------------------------- +%% Helpers. +%% ------------------------------------------------------------------- + +get_env_var(VarName) -> + get_env_var(VarName, []). + +get_env_var(VarName, Options) -> + KeepEmptyString = lists:member(keep_empty_string_as_is, Options), + case os:getenv(VarName) of + false -> false; + "" when not KeepEmptyString -> false; + Value -> Value + end. + +get_prefixed_env_var(VarName) -> + get_prefixed_env_var(VarName, []). + +get_prefixed_env_var("RABBITMQ_" ++ Suffix = VarName, + Options) -> + case get_env_var(VarName, Options) of + false -> get_env_var(Suffix, Options); + Value -> Value + end. + +var_is_used("RABBITMQ_" ++ _ = PrefixedVar) -> + lists:member(PrefixedVar, ?USED_ENV_VARS); +var_is_used("HOME") -> + false; +var_is_used(Var) -> + lists:member("RABBITMQ_" ++ Var, ?USED_ENV_VARS). + +var_is_set("RABBITMQ_" ++ Var = PrefixedVar) -> + os:getenv(PrefixedVar) /= false orelse + os:getenv(Var) /= false; +var_is_set(Var) -> + os:getenv("RABBITMQ_" ++ Var) /= false orelse + os:getenv(Var) /= false. + +value_is_yes(Value) when is_list(Value) orelse is_binary(Value) -> + Options = [{capture, none}, caseless], + re:run(string:trim(Value), "^(1|yes|true)$", Options) =:= match; +value_is_yes(_) -> + false. + +normalize_path("" = Path) -> + Path; +normalize_path(Path) -> + filename:join(filename:split(Path)). + +this_module_dir() -> + File = code:which(?MODULE), + %% Possible locations: + %% - the rabbit_common plugin (as an .ez archive): + %% .../plugins/rabbit_common-$version.ez/rabbit_common-$version/ebin + %% - the rabbit_common plugin (as a directory): + %% .../plugins/rabbit_common-$version/ebin + %% - the CLI: + %% .../escript/$cli + filename:dirname(File). + +maybe_setup_dist_for_remote_query( + #{from_remote_node := offline} = Context) -> + Context; +maybe_setup_dist_for_remote_query( + #{from_remote_node := {RemoteNode, _}} = Context) -> + {NamePart, HostPart} = rabbit_nodes_common:parts(RemoteNode), + NameType = rabbit_nodes_common:name_type(RemoteNode), + ok = rabbit_nodes_common:ensure_epmd(), + Context1 = setup_dist_for_remote_query( + Context, NamePart, HostPart, NameType, 50), + case is_rabbitmq_loaded_on_remote_node(Context1) of + true -> Context1; + false -> maybe_stop_dist_for_remote_query( + update_context(Context, from_remote_node, offline)) + end; +maybe_setup_dist_for_remote_query(Context) -> + Context. + +setup_dist_for_remote_query( + #{dist_started_for_remote_query := true} = Context, + _, _, _, _) -> + Context; +setup_dist_for_remote_query(Context, _, _, _, 0) -> + Context; +setup_dist_for_remote_query(#{from_remote_node := {Remote, _}} = Context, + NamePart, HostPart, NameType, + Attempts) -> + RndNamePart = NamePart ++ "_ctl_" ++ integer_to_list(rand:uniform(100)), + Nodename = rabbit_nodes_common:make({RndNamePart, HostPart}), + case net_kernel:start([Nodename, NameType]) of + {ok, _} -> + update_context(Context, dist_started_for_remote_query, true); + {error, {already_started, _}} -> + Context; + {error, {{already_started, _}, _}} -> + Context; + Error -> + logger:error( + "rabbit_env: Failed to setup distribution (as ~s) to " + "query node ~s: ~p", + [Nodename, Remote, Error]), + setup_dist_for_remote_query(Context, + NamePart, HostPart, NameType, + Attempts - 1) + end. + +is_rabbitmq_loaded_on_remote_node( + #{from_remote_node := Remote}) -> + case query_remote(Remote, application, loaded_applications, []) of + {ok, Apps} -> + lists:keymember(mnesia, 1, Apps) andalso + lists:keymember(rabbit, 1, Apps); + _ -> + false + end. + +maybe_stop_dist_for_remote_query( + #{dist_started_for_remote_query := true} = Context) -> + net_kernel:stop(), + maps:remove(dist_started_for_remote_query, Context); +maybe_stop_dist_for_remote_query(Context) -> + Context. + +query_remote({RemoteNode, Timeout}, Mod, Func, Args) -> + Ret = rpc:call(RemoteNode, Mod, Func, Args, Timeout), + case Ret of + {badrpc, nodedown} = Error -> Error; + {badrpc, _} = Error -> throw({query, RemoteNode, Error}); + _ -> {ok, Ret} + end. diff --git a/deps/rabbit_common/src/rabbit_error_logger_handler.erl b/deps/rabbit_common/src/rabbit_error_logger_handler.erl index f42cbf4..de8d254 100644 --- a/deps/rabbit_common/src/rabbit_error_logger_handler.erl +++ b/deps/rabbit_common/src/rabbit_error_logger_handler.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_error_logger_handler). diff --git a/deps/rabbit_common/src/rabbit_event.erl b/deps/rabbit_common/src/rabbit_event.erl index 0fc6555..a320379 100644 --- a/deps/rabbit_common/src/rabbit_event.erl +++ b/deps/rabbit_common/src/rabbit_event.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_event). @@ -154,11 +154,11 @@ if_enabled(C, P, Fun) -> notify_if(true, Type, Props) -> notify(Type, Props); notify_if(false, _Type, _Props) -> ok. -notify(Type, Props) -> notify(Type, Props, none). +notify(Type, Props) -> notify(Type, rabbit_data_coercion:to_proplist(Props), none). notify(Type, Props, Ref) -> %% Using {Name, node()} here to not fail if the event handler is not started - gen_event:notify({?MODULE, node()}, event_cons(Type, Props, Ref)). + gen_event:notify({?MODULE, node()}, event_cons(Type, rabbit_data_coercion:to_proplist(Props), Ref)). sync_notify(Type, Props) -> sync_notify(Type, Props, none). diff --git a/deps/rabbit_common/src/rabbit_exchange_type.erl b/deps/rabbit_common/src/rabbit_exchange_type.erl index 4b921db..47ca15e 100644 --- a/deps/rabbit_common/src/rabbit_exchange_type.erl +++ b/deps/rabbit_common/src/rabbit_exchange_type.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_exchange_type). diff --git a/deps/rabbit_common/src/rabbit_heartbeat.erl b/deps/rabbit_common/src/rabbit_heartbeat.erl index ed40f74..9c8907c 100644 --- a/deps/rabbit_common/src/rabbit_heartbeat.erl +++ b/deps/rabbit_common/src/rabbit_heartbeat.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_heartbeat). diff --git a/deps/rabbit_common/src/rabbit_json.erl b/deps/rabbit_common/src/rabbit_json.erl index 1036242..887b6ce 100644 --- a/deps/rabbit_common/src/rabbit_json.erl +++ b/deps/rabbit_common/src/rabbit_json.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_json). diff --git a/deps/rabbit_common/src/rabbit_log.erl b/deps/rabbit_common/src/rabbit_log.erl index 63e1a7f..40cad93 100644 --- a/deps/rabbit_common/src/rabbit_log.erl +++ b/deps/rabbit_common/src/rabbit_log.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_log). @@ -31,7 +31,17 @@ -include("rabbit_log.hrl"). %%---------------------------------------------------------------------------- --type category() :: connection | channel | ldap | mirroring | queue | federation | upgrade | ra. +-type category() :: channel | + connection | + federation | + feature_flags | + ldap | + mirroring | + prelaunch | + queue | + ra | + shovel | + upgrade. -spec debug(string()) -> 'ok'. -spec debug(string(), [any()]) -> 'ok'. @@ -74,17 +84,20 @@ log(Category, Level, Fmt, Args) when is_list(Args) -> end, lager:log(Sink, Level, self(), Fmt, Args). -make_internal_sink_name(connection) -> rabbit_log_connection_lager_event; make_internal_sink_name(channel) -> rabbit_log_channel_lager_event; +make_internal_sink_name(connection) -> rabbit_log_connection_lager_event; +make_internal_sink_name(default) -> rabbit_log_lager_event; +make_internal_sink_name(feature_flags) -> rabbit_log_feature_flags_lager_event; +make_internal_sink_name(federation) -> rabbit_log_federation_lager_event; make_internal_sink_name(ldap) -> rabbit_log_ldap_lager_event; make_internal_sink_name(mirroring) -> rabbit_log_mirroring_lager_event; +make_internal_sink_name(prelaunch) -> rabbit_log_prelaunch_lager_event; make_internal_sink_name(queue) -> rabbit_log_queue_lager_event; -make_internal_sink_name(federation) -> rabbit_log_federation_lager_event; +make_internal_sink_name(ra) -> rabbit_log_ra_lager_event; make_internal_sink_name(shovel) -> rabbit_log_shovel_lager_event; make_internal_sink_name(upgrade) -> rabbit_log_upgrade_lager_event; -make_internal_sink_name(ra) -> rabbit_log_ra_lager_event; -make_internal_sink_name(default) -> rabbit_log_lager_event; -make_internal_sink_name(Category) -> erlang:error({unknown_category, Category}). +make_internal_sink_name(Category) -> + erlang:error({unknown_category, Category}). debug(Format) -> debug(Format, []). debug(Format, Args) -> debug(self(), Format, Args). diff --git a/deps/rabbit_common/src/rabbit_log_ra_shim.erl b/deps/rabbit_common/src/rabbit_log_ra_shim.erl index 52e844b..2009e6c 100644 --- a/deps/rabbit_common/src/rabbit_log_ra_shim.erl +++ b/deps/rabbit_common/src/rabbit_log_ra_shim.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_log_ra_shim). diff --git a/deps/rabbit_common/src/rabbit_misc.erl b/deps/rabbit_common/src/rabbit_misc.erl index 1b928f6..d99b6b8 100644 --- a/deps/rabbit_common/src/rabbit_misc.erl +++ b/deps/rabbit_common/src/rabbit_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_misc). @@ -58,7 +58,10 @@ -export([version_minor_equivalent/2, strict_version_minor_equivalent/2]). -export([dict_cons/3, orddict_cons/3, maps_cons/3, gb_trees_cons/3]). -export([gb_trees_fold/3, gb_trees_foreach/2]). --export([all_module_attributes/1, build_acyclic_graph/3]). +-export([all_module_attributes/1, + rabbitmq_related_module_attributes/1, + module_attributes_from_apps/2, + build_acyclic_graph/3]). -export([const/1]). -export([ntoa/1, ntoab/1]). -export([is_process_alive/1]). @@ -939,11 +942,30 @@ module_attributes(Module) -> end. all_module_attributes(Name) -> + Apps = [App || {App, _, _} <- application:loaded_applications()], + module_attributes_from_apps(Name, Apps). + +rabbitmq_related_module_attributes(Name) -> + Apps = rabbitmq_related_apps(), + module_attributes_from_apps(Name, Apps). + +rabbitmq_related_apps() -> + [App + || {App, _, _} <- application:loaded_applications(), + %% Only select RabbitMQ-related applications. + App =:= rabbit_common orelse + App =:= rabbitmq_prelaunch orelse + App =:= rabbit orelse + lists:member( + rabbit, + element(2, application:get_key(App, applications)))]. + +module_attributes_from_apps(Name, Apps) -> Targets = lists:usort( lists:append( [[{App, Module} || Module <- Modules] || - {App, _, _} <- application:loaded_applications(), + App <- Apps, {ok, Modules} <- [application:get_key(App, modules)]])), lists:foldl( fun ({App, Module}, Acc) -> @@ -1139,12 +1161,29 @@ is_os_process_alive(Pid) -> run_ps(Pid) =:= 0 end}, {win32, fun () -> - Cmd = "tasklist /nh /fi \"pid eq " ++ - rabbit_data_coercion:to_list(Pid) ++ "\" ", - Res = os_cmd(Cmd ++ "2>&1"), - case re:run(Res, "erl\\.exe", [{capture, none}]) of - match -> true; - _ -> false + PidS = rabbit_data_coercion:to_list(Pid), + case os:find_executable("tasklist.exe") of + false -> + Cmd = + format( + "PowerShell -Command " + "\"(Get-Process -Id ~s).ProcessName\"", + [PidS]), + Res = + os_cmd(Cmd ++ " 2>&1") -- [$\r, $\n], + case Res of + "erl" -> true; + "werl" -> true; + _ -> false + end; + _ -> + Cmd = + "tasklist /nh /fi " + "\"pid eq " ++ PidS ++ "\"", + Res = os_cmd(Cmd ++ " 2>&1"), + match =:= re:run(Res, + "erl\\.exe", + [{capture, none}]) end end}]). diff --git a/deps/rabbit_common/src/rabbit_msg_store_index.erl b/deps/rabbit_common/src/rabbit_msg_store_index.erl index 957cb12..97b4000 100644 --- a/deps/rabbit_common/src/rabbit_msg_store_index.erl +++ b/deps/rabbit_common/src/rabbit_msg_store_index.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_msg_store_index). diff --git a/deps/rabbit_common/src/rabbit_net.erl b/deps/rabbit_common/src/rabbit_net.erl index aaba85c..cb9969b 100644 --- a/deps/rabbit_common/src/rabbit_net.erl +++ b/deps/rabbit_common/src/rabbit_net.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_net). diff --git a/deps/rabbit_common/src/rabbit_nodes_common.erl b/deps/rabbit_common/src/rabbit_nodes_common.erl index d9648ea..1b24712 100644 --- a/deps/rabbit_common/src/rabbit_nodes_common.erl +++ b/deps/rabbit_common/src/rabbit_nodes_common.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_nodes_common). @@ -26,7 +26,7 @@ %% API %% --export([make/1, parts/1, names/1, ensure_epmd/0, is_running/2, is_process_running/2]). +-export([make/1, parts/1, names/1, name_type/1, ensure_epmd/0, is_running/2, is_process_running/2]). -export([cookie_hash/0, epmd_port/0, diagnostics/1]). -spec make({string(), string()} | string()) -> node(). @@ -52,7 +52,10 @@ names(Hostname) -> {'DOWN', MRef, process, Pid, Reason} -> {error, Reason} end. -make({Prefix, Suffix}) -> list_to_atom(lists:append([Prefix, "@", Suffix])); +make({Prefix, Suffix}) -> rabbit_data_coercion:to_atom( + lists:append([rabbit_data_coercion:to_list(Prefix), + "@", + rabbit_data_coercion:to_list(Suffix)])); make(NodeStr) -> make(parts(NodeStr)). parts(Node) when is_atom(Node) -> @@ -64,6 +67,13 @@ parts(NodeStr) -> {Prefix, Suffix} -> {Prefix, tl(Suffix)} end. +name_type(Node) -> + {_, HostPart} = parts(Node), + case lists:member($., HostPart) of + false -> shortnames; + true -> longnames + end. + epmd_port() -> case init:get_argument(epmd_port) of {ok, [[Port | _] | _]} when is_list(Port) -> Port; diff --git a/deps/rabbit_common/src/rabbit_password_hashing.erl b/deps/rabbit_common/src/rabbit_password_hashing.erl index 1a5849d..9b944d9 100644 --- a/deps/rabbit_common/src/rabbit_password_hashing.erl +++ b/deps/rabbit_common/src/rabbit_password_hashing.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_password_hashing). diff --git a/deps/rabbit_common/src/rabbit_pbe.erl b/deps/rabbit_common/src/rabbit_pbe.erl index 5961bad..4518050 100644 --- a/deps/rabbit_common/src/rabbit_pbe.erl +++ b/deps/rabbit_common/src/rabbit_pbe.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_pbe). @@ -20,6 +20,8 @@ -export([encrypt_term/5, decrypt_term/5]). -export([encrypt/5, decrypt/5]). +-export_type([encryption_result/0]). + supported_ciphers() -> credentials_obfuscation_pbe:supported_ciphers(). @@ -41,15 +43,21 @@ default_iterations() -> encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term) -> credentials_obfuscation_pbe:encrypt_term(Cipher, Hash, Iterations, PassPhrase, Term). -decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - credentials_obfuscation_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, Base64Binary). +decrypt_term(_Cipher, _Hash, _Iterations, _PassPhrase, {plaintext, Term}) -> + Term; +decrypt_term(Cipher, Hash, Iterations, PassPhrase, {encrypted, _Base64Binary}=Encrypted) -> + credentials_obfuscation_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, Encrypted). + +-type encryption_result() :: {'encrypted', binary()} | {'plaintext', binary()}. -spec encrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). + pos_integer(), iodata() | '$pending-secret', binary()) -> encryption_result(). encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText) -> credentials_obfuscation_pbe:encrypt(Cipher, Hash, Iterations, PassPhrase, ClearText). -spec decrypt(crypto:block_cipher(), crypto:hash_algorithms(), - pos_integer(), iodata(), binary()) -> binary(). -decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary) -> - credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, PassPhrase, Base64Binary). \ No newline at end of file + pos_integer(), iodata(), encryption_result()) -> any(). +decrypt(_Cipher, _Hash, _Iterations, _PassPhrase, {plaintext, Term}) -> + Term; +decrypt(Cipher, Hash, Iterations, PassPhrase, {encrypted, _Base64Binary}=Encrypted) -> + credentials_obfuscation_pbe:decrypt(Cipher, Hash, Iterations, PassPhrase, Encrypted). diff --git a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl index 66af270..af3683e 100644 --- a/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl +++ b/deps/rabbit_common/src/rabbit_peer_discovery_backend.erl @@ -2,6 +2,7 @@ %% from rabbitmq-autocluster by Gavin Roy. %% %% Copyright (c) 2014-2015 AWeber Communications +%% Copyright (c) 2016-2020 VMware, Inc. or its affiliates %% All rights reserved. %% %% Redistribution and use in source and binary forms, with or without modification, @@ -31,7 +32,7 @@ %% %% The Initial Developer of the Original Code is AWeber Communications. %% Copyright (c) 2014-2015 AWeber Communications -%% Copyright (c) 2016-2017 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2016-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_peer_discovery_backend). diff --git a/deps/rabbit_common/src/rabbit_policy_validator.erl b/deps/rabbit_common/src/rabbit_policy_validator.erl index c07c39a..57db42f 100644 --- a/deps/rabbit_common/src/rabbit_policy_validator.erl +++ b/deps/rabbit_common/src/rabbit_policy_validator.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_policy_validator). diff --git a/deps/rabbit_common/src/rabbit_queue_collector.erl b/deps/rabbit_common/src/rabbit_queue_collector.erl index bc482e0..e85a53c 100644 --- a/deps/rabbit_common/src/rabbit_queue_collector.erl +++ b/deps/rabbit_common/src/rabbit_queue_collector.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_queue_collector). diff --git a/deps/rabbit_common/src/rabbit_registry.erl b/deps/rabbit_common/src/rabbit_registry.erl index b7214f5..c1fc00d 100644 --- a/deps/rabbit_common/src/rabbit_registry.erl +++ b/deps/rabbit_common/src/rabbit_registry.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_registry). diff --git a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl index c80dc53..9d3dd27 100644 --- a/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl +++ b/deps/rabbit_common/src/rabbit_resource_monitor_misc.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% diff --git a/deps/rabbit_common/src/rabbit_runtime.erl b/deps/rabbit_common/src/rabbit_runtime.erl index 04a7ecf..c5bc028 100644 --- a/deps/rabbit_common/src/rabbit_runtime.erl +++ b/deps/rabbit_common/src/rabbit_runtime.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% This module provides access to runtime metrics that are exposed diff --git a/deps/rabbit_common/src/rabbit_runtime_parameter.erl b/deps/rabbit_common/src/rabbit_runtime_parameter.erl index 01b2cb8..07f91e6 100644 --- a/deps/rabbit_common/src/rabbit_runtime_parameter.erl +++ b/deps/rabbit_common/src/rabbit_runtime_parameter.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_runtime_parameter). diff --git a/deps/rabbit_common/src/rabbit_ssl_options.erl b/deps/rabbit_common/src/rabbit_ssl_options.erl index 40c2f9a..2e839d8 100644 --- a/deps/rabbit_common/src/rabbit_ssl_options.erl +++ b/deps/rabbit_common/src/rabbit_ssl_options.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_ssl_options). diff --git a/deps/rabbit_common/src/rabbit_types.erl b/deps/rabbit_common/src/rabbit_types.erl index 76673f0..99ff5c1 100644 --- a/deps/rabbit_common/src/rabbit_types.erl +++ b/deps/rabbit_common/src/rabbit_types.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_types). diff --git a/deps/rabbit_common/src/rabbit_writer.erl b/deps/rabbit_common/src/rabbit_writer.erl index 5cbc4f7..6b29892 100644 --- a/deps/rabbit_common/src/rabbit_writer.erl +++ b/deps/rabbit_common/src/rabbit_writer.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_writer). diff --git a/deps/rabbit_common/src/supervisor2.erl b/deps/rabbit_common/src/supervisor2.erl index 06ecc5f..a6a45f5 100644 --- a/deps/rabbit_common/src/supervisor2.erl +++ b/deps/rabbit_common/src/supervisor2.erl @@ -40,7 +40,7 @@ %% 5) normal, and {shutdown, _} exit reasons are all treated the same %% (i.e. are regarded as normal exits) %% -%% All modifications are (C) 2010-2013 GoPivotal, Inc. +%% All modifications are (C) 2010-2020 VMware, Inc. or its affiliates. %% %% %CopyrightBegin% %% diff --git a/deps/rabbit_common/src/vm_memory_monitor.erl b/deps/rabbit_common/src/vm_memory_monitor.erl index 5e2e9e6..7b7a4a9 100644 --- a/deps/rabbit_common/src/vm_memory_monitor.erl +++ b/deps/rabbit_common/src/vm_memory_monitor.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% In practice Erlang shouldn't be allowed to grow to more than a half diff --git a/deps/rabbit_common/src/worker_pool.erl b/deps/rabbit_common/src/worker_pool.erl index 3348b72..3928db6 100644 --- a/deps/rabbit_common/src/worker_pool.erl +++ b/deps/rabbit_common/src/worker_pool.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool). @@ -52,6 +52,7 @@ -export([start_link/1, submit/1, submit/2, submit/3, submit_async/1, submit_async/2, + dispatch_sync/1, dispatch_sync/2, ready/2, idle/2, default_pool/0]). @@ -68,6 +69,7 @@ -spec submit(fun (() -> A) | mfargs(), 'reuse' | 'single') -> A. -spec submit(atom(), fun (() -> A) | mfargs(), 'reuse' | 'single') -> A. -spec submit_async(fun (() -> any()) | mfargs()) -> 'ok'. +-spec dispatch_sync(fun(() -> any()) | mfargs()) -> 'ok'. -spec ready(atom(), pid()) -> 'ok'. -spec idle(atom(), pid()) -> 'ok'. -spec default_pool() -> atom(). @@ -103,6 +105,13 @@ submit_async(Fun) -> submit_async(?DEFAULT_POOL, Fun). submit_async(Server, Fun) -> gen_server2:cast(Server, {run_async, Fun}). +dispatch_sync(Fun) -> + dispatch_sync(?DEFAULT_POOL, Fun). + +dispatch_sync(Server, Fun) -> + Pid = gen_server2:call(Server, {next_free, self()}, infinity), + worker_pool_worker:submit_async(Pid, Fun). + ready(Server, WPid) -> gen_server2:cast(Server, {ready, WPid}). idle(Server, WPid) -> gen_server2:cast(Server, {idle, WPid}). diff --git a/deps/rabbit_common/src/worker_pool_sup.erl b/deps/rabbit_common/src/worker_pool_sup.erl index 557f7aa..01f831d 100644 --- a/deps/rabbit_common/src/worker_pool_sup.erl +++ b/deps/rabbit_common/src/worker_pool_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool_sup). diff --git a/deps/rabbit_common/src/worker_pool_worker.erl b/deps/rabbit_common/src/worker_pool_worker.erl index d32a35c..09b5868 100644 --- a/deps/rabbit_common/src/worker_pool_worker.erl +++ b/deps/rabbit_common/src/worker_pool_worker.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(worker_pool_worker). @@ -60,7 +60,7 @@ submit(Pid, Fun, ProcessModel) -> gen_server2:call(Pid, {submit, Fun, self(), ProcessModel}, infinity). submit_async(Pid, Fun) -> - gen_server2:cast(Pid, {submit_async, Fun}). + gen_server2:cast(Pid, {submit_async, Fun, self()}). set_maximum_since_use(Pid, Age) -> gen_server2:cast(Pid, {set_maximum_since_use, Age}). @@ -118,7 +118,13 @@ handle_cast({next_job_from, CPid}, {job, CPid, From, Fun, ProcessModel}) -> ok = worker_pool:idle(get(worker_pool_name), self()), {noreply, undefined, hibernate}; -handle_cast({submit_async, Fun}, undefined) -> +handle_cast({submit_async, Fun, _CPid}, undefined) -> + run(Fun), + ok = worker_pool:idle(get(worker_pool_name), self()), + {noreply, undefined, hibernate}; + +handle_cast({submit_async, Fun, CPid}, {from, CPid, MRef}) -> + erlang:demonitor(MRef), run(Fun), ok = worker_pool:idle(get(worker_pool_name), self()), {noreply, undefined, hibernate}; diff --git a/deps/rabbitmq_amqp1_0/erlang.mk b/deps/rabbitmq_amqp1_0/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_amqp1_0/erlang.mk +++ b/deps/rabbitmq_amqp1_0/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_amqp1_0/rabbitmq-components.mk b/deps/rabbitmq_amqp1_0/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_amqp1_0/rabbitmq-components.mk +++ b/deps/rabbitmq_amqp1_0/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl index 62ae275..100d180 100644 --- a/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl +++ b/deps/rabbitmq_amqp1_0/src/rabbit_amqp1_0_reader.erl @@ -322,8 +322,12 @@ handle_1_0_frame(Mode, Channel, Payload, State) -> catch _:#'v1_0.error'{} = Reason -> handle_exception(State, 0, Reason); - _:Reason -> - Trace = erlang:get_stacktrace(), + _:{error, {not_allowed, Username}} -> + %% section 2.8.15 in http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-complete-v1.0-os.pdf + handle_exception(State, 0, error_frame( + ?V_1_0_AMQP_ERROR_UNAUTHORIZED_ACCESS, + "Access for user '~s' was refused: insufficient permissions~n", [Username])); + _:Reason:Trace -> handle_exception(State, 0, error_frame( ?V_1_0_AMQP_ERROR_INTERNAL_ERROR, "Reader error: ~p~n~p~n", @@ -418,6 +422,12 @@ handle_1_0_connection_frame(#'v1_0.open'{ max_frame_size = ClientFrameMax, heartbeater = Heartbeater, queue_collector = Collector} end, + HostnameVal = case Hostname of + undefined -> undefined; + {utf8, Val} -> Val + end, + rabbit_log:debug("AMQP 1.0 connection.open frame: hostname = ~s, extracted vhost = ~s, idle_timeout = ~p" , + [HostnameVal, vhost(Hostname), HeartbeatSec * 1000]), %% TODO enforce channel_max ok = send_on_channel0( Sock, @@ -703,6 +713,8 @@ send_to_new_1_0_session(Channel, Frame, State) -> put({ch_fr_pid, ChFrPid}, {channel, Channel}), ok = rabbit_amqp1_0_session:process_frame(ChFrPid, Frame); {error, {not_allowed, _}} -> + rabbit_log:error("AMQP 1.0: user '~s' is not allowed to access virtual host '~s'", + [User#user.username, vhost(Hostname)]), %% Let's skip the supervisor trace, this is an expected error throw({error, {not_allowed, User#user.username}}); {error, _} = E -> @@ -785,14 +797,10 @@ ssl_info(F, #v1{sock = Sock}) -> {error, _} -> ''; {ok, Items} -> P = proplists:get_value(protocol, Items), - CS = proplists:get_value(cipher_suite, Items), - %% The first form is R14. - %% The second is R13 - the extra term is exportability (by - %% inspection, the docs are wrong). - case CS of - {K, C, H} -> F({P, {K, C, H}}); - {K, C, H, _} -> F({P, {K, C, H}}) - end + #{cipher := C, + key_exchange := K, + mac := H} = proplists:get_value(selected_cipher_suite, Items), + F({P, {K, C, H}}) end. cert_info(F, #v1{sock = Sock}) -> diff --git a/deps/rabbitmq_auth_backend_cache/README.md b/deps/rabbitmq_auth_backend_cache/README.md index 239574f..78b6daf 100644 --- a/deps/rabbitmq_auth_backend_cache/README.md +++ b/deps/rabbitmq_auth_backend_cache/README.md @@ -12,7 +12,7 @@ As of 3.7.0, this plugin is distributed with RabbitMQ. This plugin provides a way to cache [authentication and authorization backend](https://rabbitmq.com/access-control.html) results for a configurable amount of time. It's not an independent auth backend but a caching layer for existing backends -such as the built-in, [LDAP](github.com/rabbitmq/rabbitmq-auth-backend-ldap), or [HTTP](github.com/rabbitmq/rabbitmq-auth-backend-http) +such as the built-in, [LDAP](https://github.com/rabbitmq/rabbitmq-auth-backend-ldap), or [HTTP](https://github.com/rabbitmq/rabbitmq-auth-backend-http) ones. Cache expiration is currently time-based. It is not very useful with the built-in diff --git a/deps/rabbitmq_auth_backend_cache/erlang.mk b/deps/rabbitmq_auth_backend_cache/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_auth_backend_cache/erlang.mk +++ b/deps/rabbitmq_auth_backend_cache/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema b/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema index 70d51fa..383931f 100644 --- a/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema +++ b/deps/rabbitmq_auth_backend_cache/priv/schema/rabbitmq_auth_backend_cache.schema @@ -38,7 +38,7 @@ fun(Conf) -> cuttlefish:warn(io_lib:format("Cached authZ backend undefined. Using ~p", [AuthN])), {AuthN, AuthN}; {undefined, undefined, V} when V =/= undefined -> - cuttlefish:warn(io_lib:format("Cached suthN backend undefined. Using ~p", [AuthZ])), + cuttlefish:warn(io_lib:format("Cached authN backend undefined. Using ~p", [AuthZ])), {AuthZ, AuthZ}; {V, undefined, undefined} when V =/= undefined -> Common; diff --git a/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_cache/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_http/erlang.mk b/deps/rabbitmq_auth_backend_http/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_auth_backend_http/erlang.mk +++ b/deps/rabbitmq_auth_backend_http/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_http/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch b/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch index a583f4a..1df3955 100644 --- a/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch +++ b/deps/rabbitmq_auth_backend_ldap/.travis.yml.patch @@ -1,11 +1,11 @@ ---- ../rabbit_common/.travis.yml 2020-03-04 13:38:36.985065000 +0100 -+++ .travis.yml 2020-03-04 14:29:42.563905000 +0100 -@@ -43,8 +43,6 @@ - current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" - - make xref - current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" -- - make tests -- current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" - - after_failure: - - | +--- .travis.yml.orig 2020-03-26 15:55:03.107179000 +0100 ++++ .travis.yml 2020-03-26 15:55:22.294603000 +0100 +@@ -13,6 +13,8 @@ + apt: + packages: + - awscli ++ - slapd ++ - ldap-utils + cache: + apt: true + env: diff --git a/deps/rabbitmq_auth_backend_ldap/TESTING.md b/deps/rabbitmq_auth_backend_ldap/TESTING.md index 2fa505b..1db58c9 100644 --- a/deps/rabbitmq_auth_backend_ldap/TESTING.md +++ b/deps/rabbitmq_auth_backend_ldap/TESTING.md @@ -2,19 +2,17 @@ ## The OpenLDAP Dependency -If you have [Vagrant](https://www.vagrantup.com) installed you -can simply `vagrant up` from the root of the project directory. -This will start a vagrant box with OpenLDAP running, accessible -on local port 3890. -Alternatively run OpenLDAP locally on a local port specified via the `LDAP_PORT` environment variable -(3890 by default to avoid conflicts) and use -`example/setup.sh` to create the appropriate ldap databases. - -**IMPORTANT**: this will **wipe out your local OpenLDAP installation**! -The setup script currently needs to be executed between test suite runs, -too. - -The test setup will seed the LDAP database with the required objects. +The testsuite depends on an OpenLDAP server. slapd(8) and the CLI must +be installed for it to work. However there is no need to configure the +server. + +The testsuite takes care of starting its own server and configuring it. +It won't conflict with the system OpenLDAP server instance. + +The testsuite needs the following modules to be available: +* `bdb` +* `memberof` +* `refint` ## Running All Suites diff --git a/deps/rabbitmq_auth_backend_ldap/Vagrantfile b/deps/rabbitmq_auth_backend_ldap/Vagrantfile deleted file mode 100644 index c178099..0000000 --- a/deps/rabbitmq_auth_backend_ldap/Vagrantfile +++ /dev/null @@ -1,10 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure(2) do |config| - config.vm.box = 'ubuntu/bionic64' - config.vm.network "forwarded_port", guest: 389, host: 3890 - config.vm.provision "shell", inline: "sudo apt-get -y update" - config.vm.provision "file", source: "example", destination: "~/example" - config.vm.provision "shell", inline: "/bin/sh /home/vagrant/example/setup.sh" -end diff --git a/deps/rabbitmq_auth_backend_ldap/erlang.mk b/deps/rabbitmq_auth_backend_ldap/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_auth_backend_ldap/erlang.mk +++ b/deps/rabbitmq_auth_backend_ldap/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_ldap/example/README.md b/deps/rabbitmq_auth_backend_ldap/example/README.md new file mode 100644 index 0000000..61b6531 --- /dev/null +++ b/deps/rabbitmq_auth_backend_ldap/example/README.md @@ -0,0 +1,2 @@ +LDIFs files come from the following article: +https://technicalnotes.wordpress.com/2014/04/19/openldap-setup-with-memberof-overlay/ diff --git a/deps/rabbitmq_auth_backend_ldap/example/seed.sh b/deps/rabbitmq_auth_backend_ldap/example/seed.sh deleted file mode 100755 index 9082bed..0000000 --- a/deps/rabbitmq_auth_backend_ldap/example/seed.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -e - -DIR=$(dirname $0) - -sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ${DIR}/global.ldif -sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/memberof_init.ldif -sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/refint_1.ldif -sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f ${DIR}/refint_2.ldif diff --git a/deps/rabbitmq_auth_backend_ldap/example/setup.sh b/deps/rabbitmq_auth_backend_ldap/example/setup.sh deleted file mode 100755 index 8194efe..0000000 --- a/deps/rabbitmq_auth_backend_ldap/example/setup.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -e -export DEBIAN_FRONTEND=noninteractive -sudo apt-get --yes purge slapd -sudo rm -rf /var/lib/ldap -echo -e " \ -slapd slapd/internal/generated_adminpw password openstack -slapd slapd/password2 password openstack -slapd slapd/internal/adminpw password openstack -slapd slapd/password1 password openstack -slapd slapd/backend select BDB -" | sudo debconf-set-selections -sudo apt-get --yes install slapd ldap-utils -sleep 1 - -DIR=$(dirname $0) - -$DIR/seed.sh diff --git a/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_ldap/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl index 3a11b40..f455625 100644 --- a/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl +++ b/deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl @@ -531,45 +531,50 @@ with_login(_Creds, _Servers, _Opts, _Fun, 0 = _RetriesLeft) -> {error, ldap_connect_error}; with_login(Creds, Servers, Opts, Fun, RetriesLeft) -> case get_or_create_conn(Creds == anon, Servers, Opts) of - {ok, LDAP} -> - case Creds of - anon -> - ?L1("anonymous bind", []), - case call_ldap_fun(Fun, LDAP) of - {error, ldap_closed} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - Other -> Other - end; - {UserDN, Password} -> - case eldap:simple_bind(LDAP, UserDN, Password) of - ok -> - ?L1("bind succeeded: ~s", - [scrub_dn(UserDN, env(log))]), - case call_ldap_fun(Fun, LDAP, UserDN) of - {error, ldap_closed} -> - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, {gen_tcp_error, _}} -> - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - Other -> Other - end; - {error, invalidCredentials} -> - ?L1("bind returned \"invalid credentials\": ~s", - [scrub_dn(UserDN, env(log))]), - {refused, UserDN, []}; - {error, ldap_closed} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, {gen_tcp_error, _}} -> - purge_connection(Creds, Servers, Opts), - with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); - {error, E} -> - ?L1("bind error: ~p ~p", - [scrub_dn(UserDN, env(log)), E]), - %% Do not report internal bind error to a client - {error, ldap_bind_error} - end - end; + {ok, {ConnType, LDAP}} -> + Result = case Creds of + anon -> + ?L1("anonymous bind", []), + case call_ldap_fun(Fun, LDAP) of + {error, ldap_closed} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + Other -> Other + end; + {UserDN, Password} -> + case eldap:simple_bind(LDAP, UserDN, Password) of + ok -> + ?L1("bind succeeded: ~s", + [scrub_dn(UserDN, env(log))]), + case call_ldap_fun(Fun, LDAP, UserDN) of + {error, ldap_closed} -> + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, {gen_tcp_error, _}} -> + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + Other -> Other + end; + {error, invalidCredentials} -> + ?L1("bind returned \"invalid credentials\": ~s", + [scrub_dn(UserDN, env(log))]), + {refused, UserDN, []}; + {error, ldap_closed} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, {gen_tcp_error, _}} -> + purge_connection(Creds, Servers, Opts), + with_login(Creds, Servers, Opts, Fun, RetriesLeft - 1); + {error, E} -> + ?L1("bind error: ~p ~p", + [scrub_dn(UserDN, env(log)), E]), + %% Do not report internal bind error to a client + {error, ldap_bind_error} + end + end, + ok = case ConnType of + eldap_transient -> eldap:close(LDAP); + _ -> ok + end, + Result; Error -> ?L1("connect error: ~p", [Error]), case Error of @@ -614,18 +619,24 @@ get_or_create_conn(IsAnon, Servers, Opts) -> Timeout = rabbit_misc:pget(idle_timeout, Opts, infinity), %% Defer the timeout by re-setting it. set_connection_timeout(Key, Timeout), - {ok, Conn}; + {ok, {eldap_pooled, Conn}}; error -> {Timeout, EldapOpts} = case lists:keytake(idle_timeout, 1, Opts) of false -> {infinity, Opts}; {value, {idle_timeout, T}, EOpts} -> {T, EOpts} end, - case eldap_open(Servers, EldapOpts) of - {ok, Conn} -> + case {eldap_open(Servers, EldapOpts), Timeout} of + %% If the timeout was set to 0, treat it as a one-off connection. + %% See rabbitmq/rabbitmq-auth-backend-ldap#120 for background. + {{ok, Conn}, 0} -> + {ok, {eldap_transient, Conn}}; + %% Non-zero timeout, put it in the pool + {{ok, Conn}, Timeout} -> put(ldap_conns, maps:put(Key, Conn, Conns)), set_connection_timeout(Key, Timeout), - {ok, Conn}; - Error -> Error + {ok, {eldap_pooled, Conn}}; + {Error, _} -> + Error end end. diff --git a/deps/rabbitmq_auth_backend_oauth2/README.md b/deps/rabbitmq_auth_backend_oauth2/README.md index fd27839..8257205 100644 --- a/deps/rabbitmq_auth_backend_oauth2/README.md +++ b/deps/rabbitmq_auth_backend_oauth2/README.md @@ -2,18 +2,21 @@ [![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-auth-backend-oauth2.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-auth-backend-oauth2) -This **experimental** [RabbitMQ authentication/authorisation backend](https://www.rabbitmq.com/access-control.html) plugin lets applications (clients) +This [RabbitMQ authentication/authorisation backend](https://www.rabbitmq.com/access-control.html) plugin lets applications (clients) and users authenticate and authorize using JWT-encoded [OAuth 2.0 access tokens](https://tools.ietf.org/html/rfc6749#section-1.4). It is not specific to but developed against [Cloud Foundry UAA](https://github.com/cloudfoundry/uaa). -OAuth 2.0 primers are available [elsewhere on the Web](https://auth0.com/blog/oauth2-the-complete-guide/). +An OAuth 2.0 primer is available [elsewhere on the Web](https://auth0.com/blog/oauth2-the-complete-guide/). ## Supported RabbitMQ Versions -This plugins is developed for RabbitMQ 3.8 (currently in development) and has to be built -against compatible RabbitMQ server, e.g. using the [umbrella repository](https://github.com/rabbitmq/rabbitmq-public-umbrella). +The plugin targets and ships with RabbitMQ 3.8. Like all RabbitMQ [plugins](https://www.rabbitmq.com/plugins.html), it must be enabled before it can be used: + +``` shell +rabbitmq-plugins enable rabbitmq_auth_backend_oauth2 +``` ## How it Works @@ -32,7 +35,7 @@ of this plugin. To use this plugin -1. A symmetrically encrypted JWT token containing a set of RabbitMQ permission scopes. +1. UAA should be configured to produce encrypted JWT tokens containing a set of RabbitMQ permission scopes 2. All RabbitMQ nodes must be [configured to use the `rabbit_auth_backend_oauth2` backend](https://www.rabbitmq.com/access-control.html) 3. All RabbitMQ nodes must be configure with a resource service ID (`resource_server_id`) that matches the scope prefix (e.g. `rabbitmq` in `rabbitmq.read:*/*`). @@ -41,6 +44,8 @@ To use this plugin 1. Client authorize with OAuth 2.0 provider, requesting an `access_token` (using any grant type desired) 2. Token scope returned by OAuth 2.0 provider must include RabbitMQ resource scopes that follow a convention used by this plugin: `configure:%2F/foo` means "configure permissions for 'foo' in vhost '/'") 3. Client passes the token as password when connecting to a RabbitMQ node. **The username field is ignored**. +4. The translated permissions are stored as part of the authenticated connection state and used the same + way permissions from RabbitMQ's internal database would be used. ## Usage @@ -100,7 +105,7 @@ VwIDAQAB ]. ``` -If you are using a symmetric key, the configuration will look like this: +If a symmetric key is used, the configuration will look like this: ```erlang [ @@ -117,8 +122,6 @@ If you are using a symmetric key, the configuration will look like this: ]. ``` -Key signature verification is implemented by the [UAA JWT library](https://github.com/rabbitmq/uaa_jwt). - ### Resource Server ID and Scope Prefixes OAuth 2.0 (and thus UAA-provided) tokens use scopes to communicate what set of permissions particular @@ -153,7 +156,7 @@ There can be multiple wildcards in a pattern: * `start*middle*end` * `*before*after*` -**If you want to use special characters like `*`, `%`, or `/` in a wildcard pattern, +**To use special characters like `*`, `%`, or `/` in a wildcard pattern, the pattern must be [URL-encoded](https://en.wikipedia.org/wiki/Percent-encoding).** These are the typical permissions examples: @@ -187,13 +190,13 @@ In the OAuth context, tags can be added as part of the scope, using a format lik example, if `resource_server_id` is "my_rabbit", a scope to grant access to the management plugin with the `monitoring` tag will be `my_rabbit.tag:monitoring`. -### Examples +## Examples The [demo](/demo) directory contains example configuration files which can be used to set up a development UAA server and issue tokens, which can be used to access RabbitMQ resources. -#### UAA and RabbitMQ Config Files +### UAA and RabbitMQ Config Files To run the demo you need to have a [UAA](https://github.com/cloudfoundry/uaa) node installed or built from source. @@ -213,7 +216,7 @@ To run UAA with a custom config file path, use the following from the UAA git re CLOUDFOUNDRY_CONFIG_PATH=/demo/symmetric_keys ./gradlew run ``` -#### Running RabbitMQ +### Running RabbitMQ ``` RABBITMQ_CONFIG_FILE=/demo/symmetric_keys/rabbitmq rabbitmq-server @@ -223,13 +226,13 @@ make run-broker RABBITMQ_CONFIG_FILE=demo/symmetric_keys/rabbitmq The `rabbitmq_auth_backend_oauth2` plugin must be enabled on the RabbitMQ node. -#### Asymmetric Key Example +### Asymmetric Key Example To use an RSA (asymmetric) key, you can set `CLOUDFOUNDRY_CONFIG_PATH` to `demo/rsa_keys`. This directory also contains `rabbit.config` file, as well as a public key (`public_key.pem`) which will be used for signature verification. -#### UAA User and Permission Management +### UAA User and Permission Management UAA sets scopes from client scopes and user groups. The demo uses groups to set up a set of RabbitMQ permissions scopes. diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb b/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb index be068c1..9ff2145 100644 --- a/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb +++ b/deps/rabbitmq_auth_backend_oauth2/demo/declare_queues.rb @@ -8,7 +8,10 @@ queues.each do |q| vhost = split[0] queue_name = split[1] - conn = Bunny.new(:vhost => vhost) + conn = Bunny.new(:host => ENV["BUNNY_HOST"] || "127.0.0.1", + :user => ENV["BUNNY_USER"] || "guest", + :pass => ENV["BUNNY_PASS"] || "guest", + :vhost => vhost) conn.start ch = conn.create_channel ch.queue(queue_name) diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile new file mode 100644 index 0000000..d93c77c --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/Makefile @@ -0,0 +1,101 @@ +PLATFORM := $(shell uname) + +ifeq ($(PLATFORM),Darwin) +HOST_DOCKER := host.docker.internal +endif + +ifeq ($(PLATFORM),Linux) +HOST_DOCKER := $(shell ip addr show docker0 | grep -Po 'inet \K[\d.]+') +endif + +.DEFAULT_GOAL = test + +.PHONY: run-uaa +run-uaa: + docker exec uaa /bin/echo \ + || docker run \ + --detach \ + --name uaa \ + --publish 8080:8080 \ + --mount type=bind,source=$(CURDIR)/uaa,target=/etc/uaa \ + --env JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" \ + pkuryloski/uaa:74.15.0 + +.PHONY: run-rabbitmq +run-rabbitmq: run-uaa + docker exec rabbitmq /bin/echo \ + || docker run \ + --detach \ + --name rabbitmq \ + --publish 5672:5672 \ + --publish 15672:15672 \ + --mount type=bind,source="$(CURDIR)"/rabbitmq,target=/etc/rabbitmq \ + rabbitmq:3.8-management + +.PHONY: wait-rabbitmq +wait-rabbitmq: run-rabbitmq + docker exec rabbitmq rabbitmq-diagnostics ping -q \ + || (sleep 15; docker exec rabbitmq rabbitmq-diagnostics ping -q) + +.PHONY: vhosts +vhosts: wait-rabbitmq + docker exec rabbitmq rabbitmqctl add_vhost uaa_vhost + docker exec rabbitmq rabbitmqctl add_vhost other_vhost + docker exec rabbitmq rabbitmqctl set_permissions -p uaa_vhost admin '.*' '.*' '.*' + docker exec rabbitmq rabbitmqctl set_permissions -p other_vhost admin '.*' '.*' '.*' + +.PHONY: uaac-bunny-image +uaac-bunny-image: + docker images | grep "^uaac\s" \ + || docker run --name uaac ruby:2.5 gem install cf-uaac bunny + docker images | grep "^uaac\s" \ + || (docker commit $$(docker ps -aqf "name=^uaac$$") uaac:latest \ + && docker rm uaac) + +.PHONY: queues +queues: vhosts uaac-bunny-image + docker run -it --rm \ + --name declare-queues \ + --mount type=bind,source="$(CURDIR)"/../declare_queues.rb,target=/workspace/declare_queues.rb \ + -w /workspace \ + uaac \ + /bin/bash -c "BUNNY_HOST=$(HOST_DOCKER) \ + BUNNY_USER=admin \ + BUNNY_PASS=rabo2 \ + ruby declare_queues.rb \ + uaa_vhost/some_queue \ + uaa_vhost/other_queue \ + other_vhost/some_queue \ + other_vhost/other_queue" + +.PHONY: tokens +tokens: queues uaac-bunny-image + docker run -it --rm \ + --name fetch-tokens \ + uaac \ + /bin/bash -c " \ + uaac target http://$(HOST_DOCKER):8080/uaa \ + && uaac signing key \ + && uaac token owner get rabbit_client rabbit_super -s rabbit_secret -p rabbit_super \ + && uaac token owner get rabbit_client rabbit_nosuper -s rabbit_secret -p rabbit_nosuper \ + && uaac context rabbit_nosuper \ + && uaac context rabbit_super" + +.PHONY: check-token +check-token: queues uaac-bunny-image + docker run -it --rm \ + --name check-token \ + --mount type=bind,source="$(CURDIR)"/check_token.rb,target=/workspace/check_token.rb \ + uaac \ + /bin/bash -c " \ + uaac target http://$(HOST_DOCKER):8080/uaa \ + && uaac token owner get rabbit_client rabbit_super -s rabbit_secret -p rabbit_super \ + && BUNNY_HOST=$(HOST_DOCKER) ruby /workspace/check_token.rb" + +.PHONY: test +test: check-token + +.PHONY: cleanup +cleanup: + docker stop rabbitmq uaa + docker rm rabbitmq uaa \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb new file mode 100644 index 0000000..051adc8 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/check_token.rb @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'net/http' +require 'bunny' +require 'yaml' + +host = ENV["BUNNY_HOST"] + +config = YAML.load_file('/root/.uaac.yml') +access_token = config["http://#{host}:8080/uaa"]["contexts"]["rabbit_super"]["access_token"] + +conn = Bunny.new(:host => host, + :user => "", + :pass => access_token, + :vhost => "uaa_vhost") +conn.start +puts "Connected via AMQP!" +conn.stop + +uri = URI("http://#{host}:15672/api/vhosts") +req = Net::HTTP::Get.new(uri) +req['Authorization'] = "Bearer #{access_token}" + +res = Net::HTTP.start(uri.hostname, uri.port) { |http| + http.request(req) +} + +raise "Could not connect to managment API." unless res.is_a?(Net::HTTPSuccess) +puts "Connected via Management Plugin API!" +puts res.body diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins new file mode 100644 index 0000000..a23c6a8 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/enabled_plugins @@ -0,0 +1 @@ +[rabbitmq_management,rabbitmq_auth_backend_oauth2]. \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config new file mode 100644 index 0000000..a85cca5 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/rabbitmq/rabbitmq.config @@ -0,0 +1,30 @@ +[ + {rabbit, [ + {default_user, <<"admin">>}, + {default_pass, <<"rabo2">>}, + {auth_backends, [rabbit_auth_backend_oauth2, rabbit_auth_backend_internal]} + ]}, + {rabbitmq_management, [ + {enable_uaa, true}, + {uaa_client_id, "rabbit_client"}, + {uaa_location, "http://localhost:8080/uaa"} + ]}, + {rabbitmq_auth_backend_oauth2, [ + {resource_server_id, <<"rabbitmq">>}, + {key_config, [ + {default_key, <<"key-1">>}, + {signing_keys, + #{<<"key-1">> => {pem, <<"-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dP+vRn+Kj+S/oGd49kq +6+CKNAduCC1raLfTH7B3qjmZYm45yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhK +IdcIWadhqDzdtn1hj/22iUwrhH0bd475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2 +B9q9KFBmo4Ahh/6+d4wM1rH9kxl0RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF +2cr3wQwCfF1qVu4eAVNVfxfy/uEvG3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgG +QAvkknWitpRK8KVLypEj5WKej6CF8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7 +VwIDAQAB +-----END PUBLIC KEY-----">>} + } + }] + } + ]} +]. diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties new file mode 100644 index 0000000..cc47df1 --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/log4j2.properties @@ -0,0 +1,28 @@ +status = error +dest = err +name = UaaLog + +property.log_pattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] uaa%X{context} - %pid [%t] .... %5p --- %c{1}: %replace{%m}{(?<=password=|client_secret=)([^&]*)}{}%n + +appender.uaaDefaultAppender.type = Console +appender.uaaDefaultAppender.name = UaaDefaultAppender +appender.uaaDefaultAppender.layout.type = PatternLayout +appender.uaaDefaultAppender.layout.pattern = [UAA] ${log_pattern} + +appender.uaaAuditAppender.type = Console +appender.uaaAuditAppender.name = UaaAuditAppender +appender.uaaAuditAppender.layout.type = PatternLayout +appender.uaaAuditAppender.layout.pattern = [UAA_AUDIT] ${log_pattern} + +rootLogger.level = info +rootLogger.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender + +logger.UAAAudit.name = UAA.Audit +logger.UAAAudit.level = info +logger.UAAAudit.additivity = true +logger.UAAAudit.appenderRef.auditEventLog.ref = UaaAuditAppender + +logger.cfIdentity.name = org.cloudfoundry.identity +logger.cfIdentity.level = info +logger.cfIdentity.additivity = false +logger.cfIdentity.appenderRef.uaaDefaultAppender.ref = UaaDefaultAppender \ No newline at end of file diff --git a/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml new file mode 100644 index 0000000..ab26e5d --- /dev/null +++ b/deps/rabbitmq_auth_backend_oauth2/demo/rsa_docker/uaa/uaa.yml @@ -0,0 +1,104 @@ +logging: + config: /etc/uaa/log4j2.properties + +issuer: + uri: http://localhost:8080/uaa + +encryption: + active_key_label: CHANGE-THIS-KEY + encryption_keys: + - label: CHANGE-THIS-KEY + passphrase: CHANGEME + +login: + serviceProviderKey: | + -----BEGIN RSA PRIVATE KEY----- + MIICXQIBAAKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5 + L39WqS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vA + fpOwznoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQAB + AoGAVOj2Yvuigi6wJD99AO2fgF64sYCm/BKkX3dFEw0vxTPIh58kiRP554Xt5ges + 7ZCqL9QpqrChUikO4kJ+nB8Uq2AvaZHbpCEUmbip06IlgdA440o0r0CPo1mgNxGu + lhiWRN43Lruzfh9qKPhleg2dvyFGQxy5Gk6KW/t8IS4x4r0CQQD/dceBA+Ndj3Xp + ubHfxqNz4GTOxndc/AXAowPGpge2zpgIc7f50t8OHhG6XhsfJ0wyQEEvodDhZPYX + kKBnXNHzAkEAyCA76vAwuxqAd3MObhiebniAU3SnPf2u4fdL1EOm92dyFs1JxyyL + gu/DsjPjx6tRtn4YAalxCzmAMXFSb1qHfwJBAM3qx3z0gGKbUEWtPHcP7BNsrnWK + vw6By7VC8bk/ffpaP2yYspS66Le9fzbFwoDzMVVUO/dELVZyBnhqSRHoXQcCQQCe + A2WL8S5o7Vn19rC0GVgu3ZJlUrwiZEVLQdlrticFPXaFrn3Md82ICww3jmURaKHS + N+l4lnMda79eSp3OMmq9AkA0p79BvYsLshUJJnvbk76pCjR28PK4dV1gSDUEqQMB + qy45ptdwJLqLJCeNoR0JUcDNIRhOCuOPND7pcMtX6hI/ + -----END RSA PRIVATE KEY----- + serviceProviderKeyPassword: password + serviceProviderCertificate: | + -----BEGIN CERTIFICATE----- + MIIDSTCCArKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJhdzEO + MAwGA1UECBMFYXJ1YmExDjAMBgNVBAoTBWFydWJhMQ4wDAYDVQQHEwVhcnViYTEO + MAwGA1UECxMFYXJ1YmExDjAMBgNVBAMTBWFydWJhMR0wGwYJKoZIhvcNAQkBFg5h + cnViYUBhcnViYS5hcjAeFw0xNTExMjAyMjI2MjdaFw0xNjExMTkyMjI2MjdaMHwx + CzAJBgNVBAYTAmF3MQ4wDAYDVQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAM + BgNVBAcTBWFydWJhMQ4wDAYDVQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAb + BgkqhkiG9w0BCQEWDmFydWJhQGFydWJhLmFyMIGfMA0GCSqGSIb3DQEBAQUAA4GN + ADCBiQKBgQDHtC5gUXxBKpEqZTLkNvFwNGnNIkggNOwOQVNbpO0WVHIivig5L39W + qS9u0hnA+O7MCA/KlrAR4bXaeVVhwfUPYBKIpaaTWFQR5cTR1UFZJL/OF9vAfpOw + znoD66DDCnQVpbCjtDYWX+x6imxn8HCYxhMol6ZnTbSsFW6VZjFMjQIDAQABo4Ha + MIHXMB0GA1UdDgQWBBTx0lDzjH/iOBnOSQaSEWQLx1syGDCBpwYDVR0jBIGfMIGc + gBTx0lDzjH/iOBnOSQaSEWQLx1syGKGBgKR+MHwxCzAJBgNVBAYTAmF3MQ4wDAYD + VQQIEwVhcnViYTEOMAwGA1UEChMFYXJ1YmExDjAMBgNVBAcTBWFydWJhMQ4wDAYD + VQQLEwVhcnViYTEOMAwGA1UEAxMFYXJ1YmExHTAbBgkqhkiG9w0BCQEWDmFydWJh + QGFydWJhLmFyggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAYvBJ + 0HOZbbHClXmGUjGs+GS+xC1FO/am2suCSYqNB9dyMXfOWiJ1+TLJk+o/YZt8vuxC + KdcZYgl4l/L6PxJ982SRhc83ZW2dkAZI4M0/Ud3oePe84k8jm3A7EvH5wi5hvCkK + RpuRBwn3Ei+jCRouxTbzKPsuCVB+1sNyxMTXzf0= + -----END CERTIFICATE----- + +#The secret that an external login server will use to authenticate to the uaa using the id `login` +LOGIN_SECRET: loginsecret + +oauth: + clients: + rabbit_client: + id: rabbit_client + secret: rabbit_secret + authorized-grant-types: password,implicit + scope: rabbitmq.*,openid + authorities: rabbitmq + redirect-uri: http://localhost:15672/** + +scim: + username_pattern: '[a-z0-9+\-_.@]+' + users: + - rabbit_super|rabbit_super|rabbit_super@example.com|Rabbit|Super|rabbitmq.read:*/*,rabbitmq.write:*/*,rabbitmq.configure:*/*,rabbitmq.tag:administrator + - rabbit_nosuper|rabbit_nosuper|rabbit_nosuper@example.com|Rabbit|Nosuper|rabbitmq.write:uaa_vhost/*,rabbitmq.read:uaa_vhost/some* + +jwt: + token: + policy: + keys: + key-1: + signingKey: | + -----BEGIN RSA PRIVATE KEY----- + MIIEpAIBAAKCAQEA2dP+vRn+Kj+S/oGd49kq6+CKNAduCC1raLfTH7B3qjmZYm45 + yDl+XmgK9CNmHXkho9qvmhdksdzDVsdeDlhKIdcIWadhqDzdtn1hj/22iUwrhH0b + d475hlKcsiZ+oy/sdgGgAzvmmTQmdMqEXqV2B9q9KFBmo4Ahh/6+d4wM1rH9kxl0 + RvMAKLe+daoIHIjok8hCO4cKQQEw/ErBe4SF2cr3wQwCfF1qVu4eAVNVfxfy/uEv + G3Q7x005P3TcK+QcYgJxav3lictSi5dyWLgGQAvkknWitpRK8KVLypEj5WKej6CF + 8nq30utn15FQg0JkHoqzwiCqqeen8GIPteI7VwIDAQABAoIBAFsB5FszYepa11o3 + 4zSPxgv4qyUjuYf3GfoNW0rRGp3nJLtoHAIYa0CcLX9kzsQfmLtxoY46mdppxr8Z + 2qUZpBdRVO7ILNfyXhthdQKI2NuyFDhtYK1p8bx6BXe095HMcvm2ohjXzPdTP4Hq + HrXAYXjUndUbClbjMJ82AnPF8pM70kBq7g733UqkdfrMuv6/d95Jiyw4cC7dGsI3 + Ruz9DGhiAyCBtQ0tUB+6Kqn5DChSB+ccfMJjr6GnCVYmERxEQ5DJCTIX8am8C6KX + mAxUwHMTsEGBU6GzhcUgAwUFEK3I9RptdlRFp7F8E/P0LxmPkFdgaBNUhrdnB7Y4 + 01n1R1kCgYEA/huFJgwVWSBSK/XIouFuQrxZOI9JbBbdmpFT7SBGCdFg26Or9y7j + +N5HE7yuoZ9PkBh17zzosZdsJhGocRYvO0LSq8cXvKXKCwn2fTMM7uJ/oQe68sxG + cF/fC0M/8LvRESWShH920rrERu0s161RuasdOPre0aXu7ZQzkQ68O6MCgYEA23NO + DHKNblBOdFEWsvotLqV8DrIbQ4le7sSgQr56/bdn9GScZk2JU0f+pqzpiGUy9bIt + 6uujvt5ar0IvpIQVdjf3dbp6Fy+Dwhd4yTR4dMdDECest7jL++/21x8Y0ywFhBIK + yEd+QxpOLXP6qaSKTGxL2rnTXRjl8/g629xQPL0CgYEAkNNOh+jLIgjxzGxA9dRV + 62M91qaTyi8eDkJV+wgx4taaxZP7Jt5qwCSvjegz/5m01wOZ88hbNxx+XxQhVJK4 + SKZFO/I07Sfwh2oeOi0maeBdrYGiY09ZtiJuFRU3FBV3irZHU4zyRBh+VY5HyITX + 12JXPWp+JC7WhkG5QiuLzNECgYEA15OBzICLpx6Es4clAVT6JaSzJcyZM9MyyuOl + e2ubbrpJCK/9ZBIvIPzMj/e0wiSH1wzeRrSM+ud7tkcSfk6ytptsIN67KSOoD3b3 + VNCStEU7ABe5eBG1cRzeI52MyYWpNYBzzyNMSacBvWz9hMD6ivCn44pAtGfNHclw + KKNYvxECgYBOamf25md9Jy6rtQsJVEJWw+8sB4lBlKEEadc5qekR7ZQ0hwj8CnTm + WOo856ynI28Sog62iw8F/do/z0B29RuGuxw+prkBkn3lg/VQXEitzqcYvota6osa + 8XSfaPiTyQwWpzbFNZzzemlTsIDiF3UqwkHvWaMYPDf4Ng3cokPPxw== + -----END RSA PRIVATE KEY----- diff --git a/deps/rabbitmq_auth_backend_oauth2/erlang.mk b/deps/rabbitmq_auth_backend_oauth2/erlang.mk index f3be7bf..83988d3 100644 --- a/deps/rabbitmq_auth_backend_oauth2/erlang.mk +++ b/deps/rabbitmq_auth_backend_oauth2/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-493-g40c2b81 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -185,7 +185,7 @@ core_http_get = curl -Lf$(if $(filter-out 0,$(V)),,s)o $(call core_native_path,$ core_eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # We skip files that contain spaces because they end up causing issues. -core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) -type f -name $(subst *,\*,$2) | grep -v " ")) +core_find = $(if $(wildcard $1),$(shell find $(1:%/=%) \( -type l -o -type f \) -name $(subst *,\*,$2) | grep -v " ")) core_lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$(1))))))))))))))))))))))))))) @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5306,11 +5374,11 @@ define makedep.erl string:join(DirSubname ++ [atom_to_list(Target)], "/") end end, - ok = file:write_file("$(1)", [ + ok = file:write_file("$(1)", unicode:characters_to_binary([ "# Generated by Erlang.mk. Edit at your own risk!\n\n", [[F, "::", [[" ", D] || D <- Deps], "; @touch \$$@\n"] || {F, Deps} <- Depend], "\nCOMPILE_FIRST +=", [[" ", TargetPath(CF)] || CF <- CompileFirst], "\n" - ]), + ])), halt() endef @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk b/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_backend_oauth2/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl index bc518d3..ae4a301 100644 --- a/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl +++ b/deps/rabbitmq_auth_backend_oauth2/src/rabbit_auth_backend_oauth2.erl @@ -47,35 +47,17 @@ description() -> %%-------------------------------------------------------------------- -user_login_authentication(Username0, AuthProps0) -> - AuthProps = to_map(AuthProps0), - Token = token_from_context(AuthProps), - case check_token(Token) of - %% avoid logging the token - {error, _} = E -> E; - {refused, {error, {invalid_token, error, _Err, _Stacktrace}}} -> - {refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid", []}; - {refused, Err} -> - {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; - {ok, DecodedToken} -> - Func = fun() -> - Username = username_from(Username0, DecodedToken), - Tags = tags_from(DecodedToken), - - {ok, #auth_user{username = Username, - tags = Tags, - impl = DecodedToken}} - end, - case with_decoded_token(DecodedToken, Func) of - {error, Err} -> - {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; - Else -> - Else - end +user_login_authentication(Username, AuthProps) -> + case authenticate(Username, AuthProps) of + {refused, Msg, Args} = AuthResult -> + rabbit_log:debug(Msg ++ "~n", Args), + AuthResult; + _ = AuthResult -> + AuthResult end. user_login_authorization(Username, AuthProps) -> - case user_login_authentication(Username, AuthProps) of + case authenticate(Username, AuthProps) of {ok, #auth_user{impl = Impl}} -> {ok, Impl}; Else -> Else end. @@ -125,6 +107,33 @@ update_state(AuthUser, NewToken) -> %%-------------------------------------------------------------------- +authenticate(Username0, AuthProps0) -> + AuthProps = to_map(AuthProps0), + Token = token_from_context(AuthProps), + case check_token(Token) of + %% avoid logging the token + {error, _} = E -> E; + {refused, {error, {invalid_token, error, _Err, _Stacktrace}}} -> + {refused, "Authentication using an OAuth 2/JWT token failed: provided token is invalid", []}; + {refused, Err} -> + {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; + {ok, DecodedToken} -> + Func = fun() -> + Username = username_from(Username0, DecodedToken), + Tags = tags_from(DecodedToken), + + {ok, #auth_user{username = Username, + tags = Tags, + impl = DecodedToken}} + end, + case with_decoded_token(DecodedToken, Func) of + {error, Err} -> + {refused, "Authentication using an OAuth 2/JWT token failed: ~p", [Err]}; + Else -> + Else + end + end. + with_decoded_token(DecodedToken, Fun) -> case validate_token_expiry(DecodedToken) of ok -> Fun(); diff --git a/deps/rabbitmq_auth_mechanism_ssl/erlang.mk b/deps/rabbitmq_auth_mechanism_ssl/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_auth_mechanism_ssl/erlang.mk +++ b/deps/rabbitmq_auth_mechanism_ssl/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk b/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk +++ b/deps/rabbitmq_auth_mechanism_ssl/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_aws/erlang.mk b/deps/rabbitmq_aws/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_aws/erlang.mk +++ b/deps/rabbitmq_aws/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_aws/rabbitmq-components.mk b/deps/rabbitmq_aws/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_aws/rabbitmq-components.mk +++ b/deps/rabbitmq_aws/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_cli/.travis.yml.patch b/deps/rabbitmq_cli/.travis.yml.patch new file mode 100644 index 0000000..9e74681 --- /dev/null +++ b/deps/rabbitmq_cli/.travis.yml.patch @@ -0,0 +1,69 @@ +--- ../rabbit_common/.travis.yml 2020-03-04 16:15:31.047572000 +0100 ++++ .travis.yml 2020-03-06 08:21:14.068094000 +0100 +@@ -17,45 +17,40 @@ + apt: true + env: + global: +- - secure: Tu26VJ9BsXxL20xxwWk4cbCkZyqyxYmNpSSqco5r3FLeU5hk5Vkk+s2BareRvqKhKHFlvyxu8GwsKtajMvsieP6y5J99gSeub6fDOIskPz61bo0aKA9nbDuBFSG1Z5wgXx1XRo0yDatLxXCXe3FbThRsylG7XNjtRaru1/lwuVxfxPtBGQ1opvQX71sST3GYSPoBYR+JlcVpU+uDHMAzsP8J0m5rEpxcl821aTMk3iz90hBQMsoLTBmSQePPcNqOA/1OH75VfjuXR8JBXHvA9njrUBrsyxgHf2uOh3jAXdIrHZwZg/17+y7gNVqByfx/UpGb8XEpVkncg/cRyVIHMk7/gFCZkeVC1QkIN5+EPiGLF7u32x9QaT7Zqz57iLh3IJzED2dj12qWaeX8QypF1K1r5qq4pRrN6iEZx76stpZbyFT4XnExHRdzPuouy7yz1gDHF0HOxbNLowzc/jk7tuTp+qmDSR5tRvegAIH3TONegxXyB7smdbvdI6MCN5/GP2bGK7HiqYWCmTGHtJwgxBKc5XoV8ZjpXfKxG98WbK5RsSP1miRnmxSbxaV0Gai1hfFlanJFFxTA9584O+NVRXNNFMfnnt20Ts6OwoXTcJ/boIPjF5Mcm0eJ4nz4R18TArXE4B5S4pTk3eQkG1ACDigkYZ3fc6ws4cWrt8BZASI= +- - secure: fNEx9OXi2UisiYu0FiHJpV9+vWLB9DIUAIKG24GfUHVgZqFQOInBf5fEYrjlVgm5zNezSBS3hFNHXd/EXJF8KNgbf6mI0z4h4RyyQY98N+78tWvINoIawEeYpgC6NTI52MdaCfV+fTVWhiL0uP7mqWhLmll2bKXIy6HA6I9PnmiQSloNe64vUPF+UsVZHzzeabK4DR2VdI3h+BGXzOY9FG8Kt2voiXOLd2RFpVeN86FDTp+uVZY/K9e/MsktoK+XaZZ4qMAgm6lB32LVkzl3KA9ki6y6BY7le1m2c90hxAtBJGWZptkMb+VL0Fem39nEBnLjE0a0vIddp32PLJQmv6eopMfLay5BIkwtkRwv3P0uCwYd0bgYQSHF/gdTCcK1nr7fMhkQveBh6vmnbhrca7OeQRHz08+jo6EquUgNQZKmTZPWXQn9lS9mU/0EDLJJhn4KhJezGw6DcAAqB0KqmQedxtHMUT87by7LzhINwKZnm4y5WKA/W/zLI6dNqvIgc5C6UJh0EVgxa13GRmrnGmttV1dtLRQhiMJCbJykaekjPMULUmli0RbFz7bSFqFqEUsF+wwovyD+Y6D8KGOJdvvEYPdPIFpRPnhGUvH86JzsFdVKNJBicGI9LpCtlXlWNRbQIQ8uV5ze2HhxSJhtM6e6dB4d9yzpp6a81uR77bk= +- + # $base_rmq_ref is used by rabbitmq-components.mk to select the + # appropriate branch for dependencies. + - base_rmq_ref=v3.8.x + +-elixir: +- - '1.9' +-otp_release: +- - '21.3' +- - '22.2' ++jobs: ++ include: ++ - elixir: '1.8' ++ otp_release: '21.3' ++ - elixir: '1.10' ++ otp_release: '22.2' + + install: + # This project being an Erlang one (we just set language to Elixir + # to ensure it is installed), we don't want Travis to run mix(1) + # automatically as it will break. +- skip ++ - mix local.rebar --force + + script: + # $current_rmq_ref is also used by rabbitmq-components.mk to select + # the appropriate branch for dependencies. +- - make check-rabbitmq-components.mk ++ - make ++ DEPS_DIR=$PWD/.. + current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" +- - make xref +- current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" ++ - | ++ git clone \ ++ --branch "$base_rmq_ref" \ ++ --depth 1 \ ++ https://github.com/rabbitmq/rabbitmq-server-release.git \ ++ ../rabbitmq_server_release ++ make start-background-broker -C ../rabbitmq_server_release \ ++ DEPS_DIR=$PWD/.. \ ++ PLUGINS='rabbitmq_federation rabbitmq_stomp' \ ++ PROJECT_VERSION=3.9.0 \ ++ current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" + - make tests ++ DEPS_DIR=$PWD/.. + current_rmq_ref="${TRAVIS_PULL_REQUEST_BRANCH:-${TRAVIS_BRANCH}}" +- +-after_failure: +- - | +- cd "$TRAVIS_BUILD_DIR" +- if test -d logs && test "$AWS_ACCESS_KEY_ID" && test "$AWS_SECRET_ACCESS_KEY"; then +- archive_name="$(basename "$TRAVIS_REPO_SLUG")-$TRAVIS_JOB_NUMBER" +- +- tar -c --transform "s/^logs/${archive_name}/" -f - logs | \ +- xz > "${archive_name}.tar.xz" +- +- aws s3 cp "${archive_name}.tar.xz" s3://server-release-pipeline/travis-ci-logs/ \ +- --region eu-west-1 \ +- --acl public-read +- fi diff --git a/deps/rabbitmq_cli/CONTRIBUTING.md b/deps/rabbitmq_cli/CONTRIBUTING.md index 6a1a7e5..672b29d 100644 --- a/deps/rabbitmq_cli/CONTRIBUTING.md +++ b/deps/rabbitmq_cli/CONTRIBUTING.md @@ -81,9 +81,19 @@ ask the core team for their opinion on the [RabbitMQ users mailing list][rmq-use Assuming you have: * Installed [Elixir](http://elixir-lang.org/install.html) -* Have a local running RabbitMQ node with the `rabbitmq-federation` plugin enabled (for parameter management testing), e.g. `make run-broker PLUGINS='rabbitmq_federation rabbitmq_stomp'` from a server release repository clone +* Have a local running RabbitMQ node with the `rabbitmq-federation` and `rabbitmq_stomp` plugins enabled, e.g. -...you can simply run `make tests` within this project's root directory. +``` +make run-broker PLUGINS='rabbitmq_federation rabbitmq_stomp' +``` + +from a server release repository clone, use + +``` +make tests +``` + +to run all tests. ### Running a Single Test Case diff --git a/deps/rabbitmq_cli/Makefile b/deps/rabbitmq_cli/Makefile index 14ff1bb..3188fa1 100644 --- a/deps/rabbitmq_cli/Makefile +++ b/deps/rabbitmq_cli/Makefile @@ -68,9 +68,9 @@ escript/rabbitmq-plugins escript/rabbitmq-diagnostics escript/rabbitmq-queues es # the source was previously copied in that directory. ifdef USE_SYMLINKS_IN_ESCRIPTS_DIR -link_escript = ln -s "$(notdir $(1))" "$(2)" +link_escript = ln -sf "$(notdir $(1))" "$(2)" else -link_escript = ln "$(dir $(2))$(notdir $(1))" "$(2)" +link_escript = ln -f "$(dir $(2))$(notdir $(1))" "$(2)" endif app:: $(ESCRIPTS) @@ -119,7 +119,7 @@ test:: $(ESCRIPTS) ifdef TEST_FILE $(gen_verbose) $(MIX_TEST) $(TEST_FILE) else - $(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/close_all_connections_command_test.exs" 1>&2; false + $(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/ctl" 1>&2; false endif dialyzer:: $(ESCRIPTS) @@ -130,10 +130,9 @@ dialyzer:: $(ESCRIPTS) install: $(ESCRIPTS) ifdef PREFIX $(gen_verbose) mkdir -p "$(DESTDIR)$(PREFIX)" - $(verbose) $(foreach script,$(ESCRIPTS), \ - rm -f "$(DESTDIR)$(PREFIX)/$(notdir $(script))";) $(verbose) $(foreach script,$(ACTUAL_ESCRIPTS), \ - cp "$(script)" "$(DESTDIR)$(PREFIX)";) + cmp -s "$(script)" "$(DESTDIR)$(PREFIX)/$(notdir $(script))" || \ + cp "$(script)" "$(DESTDIR)$(PREFIX)/$(notdir $(script))";) $(verbose) $(foreach script,$(LINKED_ESCRIPTS), \ $(call link_escript,$($(notdir $(script))),$(DESTDIR)$(PREFIX)/$(notdir $(script)));) else diff --git a/deps/rabbitmq_cli/README.md b/deps/rabbitmq_cli/README.md index ca7de2f..32d0104 100644 --- a/deps/rabbitmq_cli/README.md +++ b/deps/rabbitmq_cli/README.md @@ -1,5 +1,7 @@ # RabbitMQ CLI Tools +[![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-cli.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-cli) + This repository contains [RabbitMQ CLI tools](https://rabbitmq.com/cli.html) ([rabbitmqctl](https://www.rabbitmq.com/man/rabbitmqctl.1.man.html) and others). diff --git a/deps/rabbitmq_cli/erlang.mk b/deps/rabbitmq_cli/erlang.mk index 7279079..c37eaaa 100644 --- a/deps/rabbitmq_cli/erlang.mk +++ b/deps/rabbitmq_cli/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/cover plugins/ct plugins/dialyzer plugins/eunit plugins/proper plugins/triq # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6604,6 +6675,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6650,6 +6722,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7085,3 +7158,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex index 083c87c..1002c4a 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/code_path.ex @@ -100,9 +100,6 @@ defmodule RabbitMQ.CLI.Core.CodePath do {:error, {:unable_to_load_rabbit, :rabbitmq_home_is_undefined}} _ -> - path = Path.join(home, "ebin") - Code.append_path(path) - case Application.load(:rabbit) do :ok -> Code.ensure_loaded(:rabbit_plugins) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex index 0af93de..3f48fcd 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/config.ex @@ -20,6 +20,7 @@ defmodule RabbitMQ.CLI.Core.Config do FormatterBehaviour, PrinterBehaviour } + alias RabbitMQ.CLI.Core.Helpers # # Environment @@ -28,7 +29,7 @@ defmodule RabbitMQ.CLI.Core.Config do def get_option(name, opts \\ %{}) do raw_option = opts[name] || - get_system_option(name) || + get_system_option(name, opts) || default(name) normalise(name, raw_option) @@ -57,30 +58,84 @@ defmodule RabbitMQ.CLI.Core.Config do def normalise(:longnames, _val), do: :shortnames def normalise(_, value), do: value - def system_env_variable(name) do - case name do - :longnames -> "RABBITMQ_USE_LONGNAME" - :rabbitmq_home -> "RABBITMQ_HOME" - :mnesia_dir -> "RABBITMQ_MNESIA_DIR" - :plugins_dir -> "RABBITMQ_PLUGINS_DIR" - :plugins_expand_dir -> "RABBITMQ_PLUGINS_EXPAND_DIR" - :feature_flags_file -> "RABBITMQ_FEATURE_FLAGS_FILE" - :enabled_plugins_file -> "RABBITMQ_ENABLED_PLUGINS_FILE" - :node -> "RABBITMQ_NODENAME" - :aliases_file -> "RABBITMQ_CLI_ALIASES_FILE" - :erlang_cookie -> "RABBITMQ_ERLANG_COOKIE" - _ -> "" - end - end - - def get_system_option(:script_name) do + def get_system_option(:script_name, _) do Path.basename(:escript.script_name()) |> Path.rootname() |> String.to_atom() end - def get_system_option(name) do - System.get_env(system_env_variable(name)) + def get_system_option(:node, _) do + System.get_env("RABBITMQ_NODENAME") + end + + def get_system_option(:aliases_file, _) do + System.get_env("RABBITMQ_CLI_ALIASES_FILE") + end + + def get_system_option(:erlang_cookie, _) do + System.get_env("RABBITMQ_ERLANG_COOKIE") + end + + def get_system_option(name, opts) do + work_offline = opts[:offline] == true + remote_node = case name do + :longnames -> + nil + :rabbitmq_home -> + nil + _ -> + case opts[:node] do + nil -> + # Just in case `opts` was not normalized yet (to get the + # default node), we do it here as well. + case Helpers.normalise_node_option(opts) do + {:error, _} -> nil + {:ok, normalized_opts} -> normalized_opts[:node] + end + node -> + node + end + end + context = get_env_context(remote_node, work_offline) + val0 = get_val_from_env_context(context, name) + val = cond do + remote_node != nil and + val0 == :undefined and + (name == :plugins_dir or name == :enabled_plugins_file) -> + context1 = get_env_context(nil, true) + get_val_from_env_context(context1, name) + true -> + val0 + end + case val do + :undefined -> nil + _ -> val + end + end + + def get_env_context(remote_node, work_offline) do + query_remote = remote_node != nil + case query_remote do + true -> + case work_offline do + true -> :rabbit_env.get_context(:offline) + false -> :rabbit_env.get_context(remote_node) + end + false -> + :rabbit_env.get_context() + end + end + + def get_val_from_env_context(context, name) do + case name do + :longnames -> context[:nodename_type] == :longnames + :rabbitmq_home -> context[:rabbitmq_home] + :mnesia_dir -> context[:mnesia_dir] + :plugins_dir -> context[:plugins_path] + :plugins_expand_dir -> context[:plugins_expand_dir] + :feature_flags_file -> context[:feature_flags_file] + :enabled_plugins_file -> context[:enabled_plugins_file] + end end def default(:script_name), do: :rabbitmqctl diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex index a97dd0e..8908bcc 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/core/doc_guide.ex @@ -54,7 +54,7 @@ defmodule RabbitMQ.CLI.Core.DocGuide do Macros.defguide("consumers") Macros.defguide("definitions") Macros.defguide("erlang_versions", path_segment: "which-erlang") - Macros.defguide("feature_flags", domain: "next.rabbitmq.com") + Macros.defguide("feature_flags") Macros.defguide("firehose") Macros.defguide("mirroring", path_segment: "ha") Macros.defguide("logging") @@ -66,7 +66,7 @@ defmodule RabbitMQ.CLI.Core.DocGuide do Macros.defguide("publishers") Macros.defguide("plugins") Macros.defguide("queues") - Macros.defguide("quorum_queues", domain: "next.rabbitmq.com") + Macros.defguide("quorum_queues") Macros.defguide("runtime_tuning", path_segment: "runtime") Macros.defguide("tls", path_segment: "ssl") Macros.defguide("troubleshooting") diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex index 83dfe99..b140a65 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/await_startup_command.ex @@ -26,7 +26,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.AwaitStartupCommand do @behaviour RabbitMQ.CLI.CommandBehaviour - @default_timeout 300 + @default_timeout 300_000 def merge_defaults(args, opts) do {args, Map.merge(%{timeout: @default_timeout}, opts)} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex index 2bf5782..4245b3b 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/cluster_status_command.ex @@ -223,13 +223,24 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do end defp versions_by_node(node, timeout) do - {rmq_vsn, otp_vsn} = case :rabbit_misc.rpc_call( - to_atom(node), :rabbit_misc, :rabbitmq_and_erlang_versions, [], timeout) do - {:badrpc, _} -> {nil, nil} - pair -> pair + {rmq_name, rmq_vsn, otp_vsn} = case :rabbit_misc.rpc_call( + to_atom(node), :rabbit, :product_info, [], timeout) do + {:badrpc, _} -> + {nil, nil, nil} + map -> + %{:otp_release => otp} = map + name = case map do + %{:product_name => v} -> v + %{:product_base_name => v} -> v + end + vsn = case map do + %{:product_version => v} -> v + %{:product_base_version => v} -> v + end + {name, vsn, otp} end - {node, %{rabbitmq_version: to_string(rmq_vsn), erlang_version: to_string(otp_vsn)}} + {node, %{rabbitmq_name: to_string(rmq_name), rabbitmq_version: to_string(rmq_vsn), erlang_version: to_string(otp_vsn)}} end defp node_lines(nodes) do @@ -237,8 +248,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ClusterStatusCommand do end defp version_lines(mapping) do - Enum.map(mapping, fn {node, %{rabbitmq_version: rmq_vsn, erlang_version: otp_vsn}} -> - "#{node}: RabbitMQ #{rmq_vsn} on Erlang #{otp_vsn}" + Enum.map(mapping, fn {node, %{rabbitmq_name: rmq_name, rabbitmq_version: rmq_vsn, erlang_version: otp_vsn}} -> + "#{node}: #{rmq_name} #{rmq_vsn} on Erlang #{otp_vsn}" end) end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex index f8128e0..a7bfaf8 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/decode_command.ex @@ -32,19 +32,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.DecodeCommand do def distribution(_), do: :none def merge_defaults(args, opts) do - {args, - Map.merge( - %{ + with_defaults = Map.merge(%{ cipher: :rabbit_pbe.default_cipher(), hash: :rabbit_pbe.default_hash(), iterations: :rabbit_pbe.default_iterations() - }, - opts - )} + }, opts) + {args, with_defaults} end def validate(args, _) when length(args) < 2 do - {:validation_failure, {:bad_argument, "Please provide a value to decode and a passphrase"}} + {:validation_failure, {:not_enough_args, "Please provide a value to decode and a passphrase"}} end def validate(args, _) when length(args) > 2 do @@ -75,8 +72,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.DecodeCommand do term_to_decrypt = case term_value do - {:encrypted, encrypted_term} -> encrypted_term - _ -> term_value + {:encrypted, _} = encrypted -> + encrypted + _ -> + {:encrypted, term_value} end result = :rabbit_pbe.decrypt_term(cipher, hash, iterations, passphrase, term_to_decrypt) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex index 7fa7fb1..f5482e5 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/encode_command.ex @@ -30,19 +30,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EncodeCommand do def distribution(_), do: :none def merge_defaults(args, opts) do - {args, - Map.merge( - %{ + with_defaults = Map.merge(%{ cipher: :rabbit_pbe.default_cipher(), hash: :rabbit_pbe.default_hash(), iterations: :rabbit_pbe.default_iterations() - }, - opts - )} + }, opts) + {args, with_defaults} end def validate(args, _) when length(args) < 2 do - {:validation_failure, {:bad_argument, "Please provide a value to decode and a passphrase."}} + {:validation_failure, {:not_enough_args, "Please provide a value to decode and a passphrase."}} end def validate(args, _) when length(args) > 2 do @@ -68,8 +65,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EncodeCommand do def run([value, passphrase], %{cipher: cipher, hash: hash, iterations: iterations}) do try do term_value = Helpers.evaluate_input_as_term(value) - result = :rabbit_pbe.encrypt_term(cipher, hash, iterations, passphrase, term_value) - {:ok, {:encrypted, result}} + result = {:encrypted, _} = :rabbit_pbe.encrypt_term(cipher, hash, iterations, passphrase, term_value) + {:ok, result} catch _, _ -> {:error, "Error during cipher operation."} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex index 7c327e7..cea5279 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/help_command.ex @@ -23,7 +23,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.HelpCommand do @behaviour RabbitMQ.CLI.CommandBehaviour - def scopes(), do: [:ctl, :diagnostics, :plugins, :queues] + def scopes(), do: [:ctl, :diagnostics, :plugins, :queues, :upgrade] def switches(), do: [list_commands: :boolean] def distribution(_), do: :none diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex index 49470dc..b8c47e0 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/report_command.ex @@ -29,7 +29,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do ListQueuesCommand, StatusCommand } - alias RabbitMQ.CLI.Diagnostics.Commands.CommandLineArgumentsCommand + alias RabbitMQ.CLI.Diagnostics.Commands.{ + CommandLineArgumentsCommand, + OsEnvCommand + } @behaviour RabbitMQ.CLI.CommandBehaviour @@ -63,7 +66,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do run_command(EnvironmentCommand, [], opts), run_command(ListConnectionsCommand, info_keys(ListConnectionsCommand), opts), run_command(ListChannelsCommand, info_keys(ListChannelsCommand), opts), - run_command(CommandLineArgumentsCommand, [], opts) + run_command(CommandLineArgumentsCommand, [], opts), + run_command(OsEnvCommand, [], opts) ] vhost_data = @@ -78,7 +82,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.ReportCommand do run_command(ListPermissionsCommand, [], opts), run_command(ListPoliciesCommand, [], opts), run_command(ListGlobalParametersCommand, [], opts), - run_command(ListParametersCommand, [], opts) + run_command(ListParametersCommand, [], opts), + ] end) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex index f990583..4f11e9a 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex @@ -76,12 +76,29 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do def output(result, %{node: node_name, unit: unit}) when is_list(result) do m = result_map(result) + product_name_section = case m do + %{:product_name => product_name} when product_name != "" -> + ["Product name: #{product_name}"] + _ -> + [] + end + product_version_section = case m do + %{:product_version => product_version} when product_version != "" -> + ["Product version: #{product_version}"] + _ -> + [] + end + runtime_section = [ "#{bright("Runtime")}\n", "OS PID: #{m[:pid]}", "OS: #{m[:os]}", # TODO: format "Uptime (seconds): #{m[:uptime]}", + ] ++ + product_name_section ++ + product_version_section ++ + [ "RabbitMQ version: #{m[:rabbitmq_version]}", "Node name: #{node_name}", "Erlang configuration: #{m[:erlang_version]}", @@ -194,6 +211,8 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do %{ os: os_name(Keyword.get(result, :os)), pid: Keyword.get(result, :pid), + product_name: Keyword.get(result, :product_name) |> to_string, + product_version: Keyword.get(result, :product_version) |> to_string, rabbitmq_version: Keyword.get(result, :rabbitmq_version) |> to_string, erlang_version: Keyword.get(result, :erlang_version) |> to_string |> String.trim_trailing, uptime: Keyword.get(result, :uptime), diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex index c914a66..a348a7e 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/stop_command.ex @@ -39,9 +39,10 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StopCommand do end def run([pidfile_path], %{node: node_name}) do + ret = OsPid.read_pid_from_file(pidfile_path, true) :rabbit_misc.rpc_call(node_name, :rabbit, :stop_and_halt, []) - case OsPid.read_pid_from_file(pidfile_path, true) do + case ret do {:error, details} -> {:error, "could not read pid from file #{pidfile_path}. Error: #{details}"} diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex index 754fa2d..1228327 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/wait_command.ex @@ -55,7 +55,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do Helpers.stream_until_error_parameterised( [ log("Waiting for pid file '#{pid_file}' to appear", quiet), - fn _ -> wait_for_pid_file(pid_file, timeout) end, + fn _ -> wait_for_pid_file(pid_file, node_name, timeout) end, log_param(fn pid -> "pid is #{pid}" end, quiet) ] ++ wait_for_pid_funs(node_name, app_names, timeout, quiet), @@ -73,9 +73,9 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do ) end - def output({:error, err}, _opts) do + def output({:error, err}, opts) do case format_error(err) do - :undefined -> RabbitMQ.CLI.DefaultOutput.output({:error, err}) + :undefined -> RabbitMQ.CLI.DefaultOutput.output({:error, err}, opts) error_str -> {:error, RabbitMQ.CLI.Core.ExitCodes.exit_software(), error_str} end end @@ -249,7 +249,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do :rabbit_misc.is_os_process_alive(to_charlist(pid)) end - defp wait_for_pid_file(pid_file, timeout) do + defp wait_for_pid_file(pid_file, node_name, timeout) do wait_for( timeout, fn -> @@ -259,8 +259,11 @@ defmodule RabbitMQ.CLI.Ctl.Commands.WaitCommand do :error -> {:error, {:garbage_in_pid_file, pid_file}} - {int, _} -> - {:ok, int} + {pid, _} -> + case check_distribution(pid, node_name) do + :ok -> {:ok, pid} + _ -> {:error, :loop} + end end {:error, :enoent} -> diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex index df040bf..e0bc2dc 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/default_output.ex @@ -16,19 +16,17 @@ alias RabbitMQ.CLI.Formatters.FormatterHelpers defmodule RabbitMQ.CLI.DefaultOutput do # When `use RabbitMQ.CLI.DefaultOutput` is invoked, - # this will define output/2 that delegates to RabbitMQ.CLI.DefaultOutput.output/3. + # this will define output/2 that delegates to RabbitMQ.CLI.DefaultOutput.output/2. defmacro __using__(_) do quote do - def output(result, _opts) do - RabbitMQ.CLI.DefaultOutput.output(result) + def output(result, opts) do + RabbitMQ.CLI.DefaultOutput.output(result, opts) end end end - def output(result) do - result - |> normalize_output() - |> format_output() + def output(result, opts \\ %{}) do + format_output(normalize_output(result, opts)) end def mnesia_running_error(node_name) do @@ -36,30 +34,37 @@ defmodule RabbitMQ.CLI.DefaultOutput do "Please stop RabbitMQ with 'rabbitmqctl stop_app' first." end - defp normalize_output(:ok), do: :ok - defp normalize_output({:ok, _} = input), do: input - defp normalize_output({:stream, _} = input), do: input - defp normalize_output({:badrpc_multi, _, _} = input), do: {:error, input} - defp normalize_output({:badrpc, :nodedown} = input), do: {:error, input} - defp normalize_output({:badrpc, :timeout} = input), do: {:error, input} - defp normalize_output({:badrpc, {:timeout, _n}} = input), do: {:error, input} - defp normalize_output({:badrpc, {:timeout, _n, _msg}} = input), do: {:error, input} - defp normalize_output({:badrpc, {:EXIT, reason}}), do: {:error, reason} - defp normalize_output({:error, exit_code, string}) when is_integer(exit_code) do + defp normalize_output(:ok, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name}} + end + defp normalize_output(:ok, _opts), do: :ok + defp normalize_output({:ok, value}, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "value" => value}} + end + defp normalize_output({:ok, _} = input, _opts), do: input + defp normalize_output({:stream, _} = input, _opts), do: input + defp normalize_output({:badrpc_multi, _, _} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, :nodedown} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, :timeout} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:timeout, _n}} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:timeout, _n, _msg}} = input, _opts), do: {:error, input} + defp normalize_output({:badrpc, {:EXIT, reason}}, _opts), do: {:error, reason} + defp normalize_output({:error, exit_code, string}, _opts) when is_integer(exit_code) do {:error, exit_code, to_string(string)} end - defp normalize_output({:error, format, args}) + defp normalize_output({:error, format, args}, _opts) when (is_list(format) or is_binary(format)) and is_list(args) do {:error, to_string(:rabbit_misc.format(format, args))} end - defp normalize_output({:error, _} = input), do: input - defp normalize_output({:error_string, string}) do + defp normalize_output({:error, _} = input, _opts), do: input + defp normalize_output({:error_string, string}, _opts) do {:error, to_string(string)} end - defp normalize_output(unknown) when is_atom(unknown), do: {:error, unknown} - defp normalize_output({unknown, _} = input) when is_atom(unknown), do: {:error, input} - defp normalize_output(result) when not is_atom(result), do: {:ok, result} + defp normalize_output(unknown, _opts) when is_atom(unknown), do: {:error, unknown} + defp normalize_output({unknown, _} = input, _opts) when is_atom(unknown), do: {:error, input} + defp normalize_output(result, _opts) when not is_atom(result), do: {:ok, result} + defp format_output({:error, _} = result) do result end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex new file mode 100644 index 0000000..2d2b841 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/os_env_command.ex @@ -0,0 +1,76 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Diagnostics.Commands.OsEnvCommand do + @moduledoc """ + Lists RabbitMQ-specific environment variables defined on target node + """ + + import RabbitMQ.CLI.Core.Platform, only: [line_separator: 0] + + @behaviour RabbitMQ.CLI.CommandBehaviour + + def scopes(), do: [:diagnostics] + + use RabbitMQ.CLI.Core.AcceptsDefaultSwitchesAndTimeout + use RabbitMQ.CLI.Core.MergesNoDefaults + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + + def run([], %{node: node_name, timeout: timeout}) do + case :rabbit_misc.rpc_call(node_name, :rabbit_env, :get_used_env_vars, [], timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + xs when is_list(xs) -> + # convert keys and values to binaries (Elixir strings) + xs + |> Enum.map(fn {k, v} -> {:rabbit_data_coercion.to_binary(k), :rabbit_data_coercion.to_binary(v)} end) + |> :maps.from_list + other -> other + end + end + + def output([], %{formatter: fmt}) when fmt == "csv" or fmt == "erlang" do + {:ok, []} + end + def output([], %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "variables" => []}} + end + def output([], %{node: node_name}) do + {:ok, "Node #{node_name} reported no relevant environment variables."} + end + def output(vars, %{node: node_name, formatter: "json"}) do + {:ok, %{"result" => "ok", "node" => node_name, "variables" => vars}} + end + def output(vars, %{formatter: "csv"}) do + {:stream, [Enum.map(vars, fn({k, v}) -> [variable: k, value: v] end)]} + end + def output(vars, _opts) do + lines = Enum.map(vars, fn({k, v}) -> "#{k}=#{v}" end) |> Enum.join(line_separator()) + {:ok, lines} + end + + def usage() do + "os_env" + end + + def help_section(), do: :observability_and_health_checks + + def description(), do: "Lists RabbitMQ-specific environment variables set on target node" + + def banner(_, %{node: node_name}) do + "Listing RabbitMQ-specific environment variables defined on node #{node_name}..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex new file mode 100644 index 0000000..c66baa0 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_quorum_plus_one_command.ex @@ -0,0 +1,74 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineQuorumPlusOneCommand do + alias RabbitMQ.CLI.Core.DocGuide + + @behaviour RabbitMQ.CLI.CommandBehaviour + + @default_timeout 120_000 + + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + + def merge_defaults(args, opts) do + timeout = + case opts[:timeout] do + nil -> @default_timeout + :infinity -> @default_timeout + val -> val + end + + {args, Map.put(opts, :timeout, timeout)} + end + + + def run([], %{node: node_name, timeout: timeout}) do + rpc_timeout = timeout + 500 + case :rabbit_misc.rpc_call(node_name, :rabbit_upgrade_preparation, :await_online_quorum_plus_one, [timeout], rpc_timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + {:badrpc, _} = err -> err + + true -> :ok + false -> {:error, "time is up, no quorum + 1 online replicas came online for at least some quorum queues"} + end + end + + def output({:error, msg}, %{node: node_name, formatter: "json"}) do + {:error, %{"result" => "error", "node" => node_name, "message" => msg}} + end + use RabbitMQ.CLI.DefaultOutput + + def usage, do: "await_online_quorum_plus_one" + + def usage_doc_guides() do + [ + DocGuide.quorum_queues(), + DocGuide.upgrade() + ] + end + + def help_section, do: :upgrade + + def description() do + "Waits for all quorum queues to have an above minimum online quorum. " <> + "This makes sure that no queues would lose their quorum if the target node is shut down" + end + + def banner([], %{timeout: timeout}) do + "Will wait for a quorum + 1 of nodes to be online for all quorum queues for #{round(timeout/1000)} seconds..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex new file mode 100644 index 0000000..7948269 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/upgrade/commands/await_online_synchronized_mirror_command.ex @@ -0,0 +1,74 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at https://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. + +defmodule RabbitMQ.CLI.Upgrade.Commands.AwaitOnlineSynchronizedMirrorCommand do + alias RabbitMQ.CLI.Core.DocGuide + + @behaviour RabbitMQ.CLI.CommandBehaviour + + @default_timeout 120_000 + + use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments + + def merge_defaults(args, opts) do + timeout = + case opts[:timeout] do + nil -> @default_timeout + :infinity -> @default_timeout + val -> val + end + + {args, Map.put(opts, :timeout, timeout)} + end + + + def run([], %{node: node_name, timeout: timeout}) do + rpc_timeout = timeout + 500 + case :rabbit_misc.rpc_call(node_name, :rabbit_upgrade_preparation, :await_online_synchronised_mirrors, [timeout], rpc_timeout) do + {:error, _} = err -> err + {:error, _, _} = err -> err + {:badrpc, _} = err -> err + + true -> :ok + false -> {:error, "time is up, no synchronised mirror came online for at least some classic mirrored queues"} + end + end + + def output({:error, msg}, %{node: node_name, formatter: "json"}) do + {:error, %{"result" => "error", "node" => node_name, "message" => msg}} + end + use RabbitMQ.CLI.DefaultOutput + + def usage, do: "await_online_synchronized_mirror" + + def usage_doc_guides() do + [ + DocGuide.mirroring(), + DocGuide.upgrade() + ] + end + + def help_section, do: :upgrade + + def description() do + "Waits for all classic mirrored queues hosted on the target node to have at least one synchronized mirror online. " <> + "This makes sure that if target node is shut down, there will be an up-to-date mirror to promote." + end + + def banner([], %{timeout: timeout}) do + "Will wait for a synchronised mirror be online for all classic mirrored queues for #{round(timeout/1000)} seconds..." + end +end diff --git a/deps/rabbitmq_cli/lib/rabbitmqctl.ex b/deps/rabbitmq_cli/lib/rabbitmqctl.ex index 7ef55e8..05ba5a8 100644 --- a/deps/rabbitmq_cli/lib/rabbitmqctl.ex +++ b/deps/rabbitmq_cli/lib/rabbitmqctl.ex @@ -477,9 +477,14 @@ defmodule RabbitMQCtl do op = CommandModules.module_to_command(module) {:error, ExitCodes.exit_code_for(result), - "Error: operation #{op} on node #{opts[:node]} timed out. Timeout value used: #{ - opts[:timeout] - }"} + "Error: operation #{op} on node #{opts[:node]} timed out. Timeout value used: #{opts[:timeout]}"} + end + + defp format_error({:error, :timeout, msg}, opts, module) do + op = CommandModules.module_to_command(module) + + {:error, ExitCodes.exit_code_for(:timeout), + "Error: operation #{op} on node #{opts[:node]} timed out: #{msg}. Timeout value used: #{opts[:timeout]}"} end # Plugins @@ -536,6 +541,15 @@ defmodule RabbitMQCtl do end # Catch all clauses + defp format_error({:error, err}, %{formatter: "json"}, _) when is_map(err) do + {:ok, res} = JSON.encode(err) + {:error, ExitCodes.exit_unavailable(), res} + end + defp format_error({:error, exit_code, err}, %{formatter: "json"}, _) when is_map(err) do + {:ok, res} = JSON.encode(err) + {:error, exit_code, res} + end + defp format_error({:error, exit_code, err}, _, _) do string_err = Helpers.string_or_inspect(err) diff --git a/deps/rabbitmq_cli/mix.exs b/deps/rabbitmq_cli/mix.exs index 81d5b54..1321e19 100644 --- a/deps/rabbitmq_cli/mix.exs +++ b/deps/rabbitmq_cli/mix.exs @@ -20,7 +20,7 @@ defmodule RabbitMQCtl.MixfileBase do [ app: :rabbitmqctl, version: "3.8.0-dev", - elixir: ">= 1.7.0 and < 1.11.0", + elixir: ">= 1.8.0 and < 1.11.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, escript: [main_module: RabbitMQCtl, @@ -136,6 +136,18 @@ defmodule RabbitMQCtl.MixfileBase do compile: false, override: true }, + { + :goldrush, + path: Path.join(deps_dir, "goldrush"), + compile: false, + override: true + }, + { + :lager, + path: Path.join(deps_dir, "lager"), + compile: false, + override: true + }, { :amqp_client, path: Path.join(deps_dir, "amqp_client"), diff --git a/deps/rabbitmq_cli/rabbitmq-components.mk b/deps/rabbitmq_cli/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_cli/rabbitmq-components.mk +++ b/deps/rabbitmq_cli/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_consistent_hash_exchange/erlang.mk b/deps/rabbitmq_consistent_hash_exchange/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_consistent_hash_exchange/erlang.mk +++ b/deps/rabbitmq_consistent_hash_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk b/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_consistent_hash_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_event_exchange/erlang.mk b/deps/rabbitmq_event_exchange/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_event_exchange/erlang.mk +++ b/deps/rabbitmq_event_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_event_exchange/rabbitmq-components.mk b/deps/rabbitmq_event_exchange/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_event_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_event_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_federation/README.md b/deps/rabbitmq_federation/README.md index b779d81..efebf43 100644 --- a/deps/rabbitmq_federation/README.md +++ b/deps/rabbitmq_federation/README.md @@ -1,5 +1,7 @@ ## RabbitMQ Federation +[![Build Status](https://travis-ci.org/rabbitmq/rabbitmq-federation.svg?branch=master)](https://travis-ci.org/rabbitmq/rabbitmq-federation) + RabbitMQ federation offers a group of features for loosely coupled and WAN-friendly distributed RabbitMQ setups. Note that this is not an alternative to queue mirroring. @@ -11,7 +13,7 @@ This plugin ships with RabbitMQ, there is no need to install it separately. -## Documentation +## Documentation See [RabbitMQ federation plugin](https://www.rabbitmq.com/federation.html) on rabbitmq.com. @@ -20,4 +22,4 @@ See [RabbitMQ federation plugin](https://www.rabbitmq.com/federation.html) on ra Released under [the same license as RabbitMQ](https://www.rabbitmq.com/mpl.html). -2007-2015 (c) Pivotal Software Inc. +2007-2015 (c) 2007-2020 VMware, Inc. or its affiliates. diff --git a/deps/rabbitmq_federation/erlang.mk b/deps/rabbitmq_federation/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_federation/erlang.mk +++ b/deps/rabbitmq_federation/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_federation/include/rabbit_federation.hrl b/deps/rabbitmq_federation/include/rabbit_federation.hrl index 2c0c793..9efa485 100644 --- a/deps/rabbitmq_federation/include/rabbit_federation.hrl +++ b/deps/rabbitmq_federation/include/rabbit_federation.hrl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -record(upstream, {uris, @@ -27,7 +27,8 @@ ack_mode, ha_policy, name, - bind_nowait}). + bind_nowait, + resource_cleanup_mode}). -record(upstream_params, {uri, diff --git a/deps/rabbitmq_federation/rabbitmq-components.mk b/deps/rabbitmq_federation/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_federation/rabbitmq-components.mk +++ b/deps/rabbitmq_federation/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl index 1cf6023..2424616 100644 --- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl +++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module('Elixir.RabbitMQ.CLI.Ctl.Commands.FederationStatusCommand'). diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl index 7ba372e..6af27e8 100644 --- a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl +++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module('Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand'). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_app.erl b/deps/rabbitmq_federation/src/rabbit_federation_app.erl index bb09c09..704e217 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_app.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_app.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_app). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_db.erl b/deps/rabbitmq_federation/src/rabbit_federation_db.erl index 37bfcda..afdcc1b 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_db.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_db.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_db). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_event.erl b/deps/rabbitmq_federation/src/rabbit_federation_event.erl index adf52cd..7477020 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_event.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_event.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_event). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl index efc866a..57fff55 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% %% TODO rename this diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl index e71c9ae..1dab147 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_exchange_link). @@ -199,7 +199,6 @@ handle_info(Msg, State) -> terminate(_Reason, {not_started, _}) -> ok; - terminate(Reason, #state{downstream_connection = DConn, connection = Conn, upstream = Upstream, @@ -207,15 +206,39 @@ terminate(Reason, #state{downstream_connection = DConn, downstream_exchange = XName, internal_exchange_timer = TRef, internal_exchange = IntExchange, - queue = Queue}) -> + queue = Queue}) when Reason =:= shutdown; + Reason =:= {shutdown, restart}; + Reason =:= gone -> + timer:cancel(TRef), + rabbit_federation_link_util:ensure_connection_closed(DConn), + + rabbit_log:debug("Exchange federation: link is shutting down, resource cleanup mode: ~p", [Upstream#upstream.resource_cleanup_mode]), + case Upstream#upstream.resource_cleanup_mode of + never -> ok; + _ -> + %% This is a normal shutdown and we are allowed to clean up the internally used queue and exchange + rabbit_log:debug("Federated exchange '~s' link will delete its internal queue '~s'", [Upstream#upstream.exchange_name, Queue]), + delete_upstream_queue(Conn, Queue), + rabbit_log:debug("Federated exchange '~s' link will delete its upstream exchange", [Upstream#upstream.exchange_name]), + delete_upstream_exchange(Conn, IntExchange) + end, + + rabbit_federation_link_util:ensure_connection_closed(Conn), + rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, XName), + ok; +%% unexpected shutdown +terminate(Reason, #state{downstream_connection = DConn, + connection = Conn, + upstream = Upstream, + upstream_params = UParams, + downstream_exchange = XName, + internal_exchange_timer = TRef}) -> timer:cancel(TRef), - %% Terminate the direct connection rabbit_federation_link_util:ensure_connection_closed(DConn), - %% Cleanup of internal queue and exchange - delete_upstream_queue(Conn, Queue), - delete_upstream_exchange(Conn, IntExchange), + %% unlike in the clean shutdown case above, we keep the queue + %% and exchange around rabbit_federation_link_util:ensure_connection_closed(Conn), rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, XName), diff --git a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl index 09eb790..e5748f6 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_exchange_link_sup_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_exchange_link_sup_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl index 625d70d..5535823 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_link_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_link_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl index 6570c2d..885772a 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_link_util.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_link_util). @@ -267,6 +267,9 @@ handle_upstream_down(Reason, _Args, State) -> %%---------------------------------------------------------------------------- +log_terminate(gone, _Upstream, _UParams, _XorQName) -> + %% the link cannot start, this has been logged already + ok; log_terminate({shutdown, restart}, _Upstream, _UParams, _XorQName) -> %% We've already logged this before munging the reason ok; diff --git a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl index dc655ab..de73272 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_parameters.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_parameters). @@ -96,6 +96,7 @@ shared_validation() -> {<<"trust-user-id">>, fun rabbit_parameter_validation:boolean/2, optional}, {<<"ack-mode">>, rabbit_parameter_validation:enum( ['no-ack', 'on-publish', 'on-confirm']), optional}, + {<<"resource-cleanup-mode">>, rabbit_parameter_validation:enum(['default', 'never']), optional}, {<<"ha-policy">>, fun rabbit_parameter_validation:binary/2, optional}, {<<"bind-nowait">>, fun rabbit_parameter_validation:boolean/2, optional}]. diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl index f3659f0..a9605ef 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl index 70b5d18..9fde78b 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue_link). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl index 2bef357..835e4db 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link_sup_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_queue_link_sup_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_status.erl b/deps/rabbitmq_federation/src/rabbit_federation_status.erl index a57a129..c42271c 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_status.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_status.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_status). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl index f4319bc..0fddf05 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_sup.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_sup.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_sup). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl index 6145a83..f691872 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_upstream). @@ -26,6 +26,7 @@ -import(rabbit_misc, [pget/2, pget/3]). -import(rabbit_federation_util, [name/1, vhost/1, r/1]). +-import(rabbit_data_coercion, [to_atom/1]). %%---------------------------------------------------------------------------- @@ -143,12 +144,11 @@ from_upstream_or_set(US, Name, U, XorQ) -> expires = bget(expires, US, U, none), message_ttl = bget('message-ttl', US, U, none), trust_user_id = bget('trust-user-id', US, U, false), - ack_mode = list_to_atom( - binary_to_list( - bget('ack-mode', US, U, <<"on-confirm">>))), + ack_mode = to_atom(bget('ack-mode', US, U, <<"on-confirm">>)), ha_policy = bget('ha-policy', US, U, none), name = Name, - bind_nowait = bget('bind-nowait', US, U, false)}. + bind_nowait = bget('bind-nowait', US, U, false), + resource_cleanup_mode = to_atom(bget('resource-cleanup-mode', US, U, <<"default">>))}. %%---------------------------------------------------------------------------- diff --git a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl index b126f11..65b948b 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_upstream_exchange.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_upstream_exchange). diff --git a/deps/rabbitmq_federation/src/rabbit_federation_util.erl b/deps/rabbitmq_federation/src/rabbit_federation_util.erl index b8d563d..0e73d06 100644 --- a/deps/rabbitmq_federation/src/rabbit_federation_util.erl +++ b/deps/rabbitmq_federation/src/rabbit_federation_util.erl @@ -11,7 +11,7 @@ %% The Original Code is RabbitMQ Federation. %% %% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. %% -module(rabbit_federation_util). diff --git a/deps/rabbitmq_federation_management/erlang.mk b/deps/rabbitmq_federation_management/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_federation_management/erlang.mk +++ b/deps/rabbitmq_federation_management/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_federation_management/rabbitmq-components.mk b/deps/rabbitmq_federation_management/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_federation_management/rabbitmq-components.mk +++ b/deps/rabbitmq_federation_management/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_jms_topic_exchange/erlang.mk b/deps/rabbitmq_jms_topic_exchange/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_jms_topic_exchange/erlang.mk +++ b/deps/rabbitmq_jms_topic_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk b/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_management/bin/rabbitmqadmin b/deps/rabbitmq_management/bin/rabbitmqadmin index 3b76e58..a4e0b54 100755 --- a/deps/rabbitmq_management/bin/rabbitmqadmin +++ b/deps/rabbitmq_management/bin/rabbitmqadmin @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # The contents of this file are subject to the Mozilla Public License # Version 1.1 (the "License"); you may not use this file except in @@ -20,6 +20,7 @@ from __future__ import print_function from optparse import OptionParser, TitledHelpFormatter import base64 +import copy import json import os import socket @@ -165,8 +166,8 @@ DECLARABLE = { DELETABLE = { 'exchange': {'mandatory': ['name']}, 'queue': {'mandatory': ['name']}, - 'binding': {'mandatory': ['source', 'destination_type', 'destination'], - 'optional': {'properties_key': '~'}}, + 'binding': {'mandatory': ['source', 'destination_type', 'destination'], + 'optional': {'properties_key': '~'}}, 'vhost': {'mandatory': ['name']}, 'user': {'mandatory': ['name']}, 'permission': {'mandatory': ['vhost', 'user']}, @@ -331,6 +332,8 @@ def fmt_usage_stanza(root, verb): default_options = {"hostname": "localhost", "port": "15672", + # default config file section name + "node": "default", "path_prefix": "", "declare_vhost": "/", "username": "guest", @@ -429,56 +432,72 @@ def default_config(): def make_configuration(): make_parser() - (options, args) = parser.parse_args() - setattr(options, "declare_vhost", None) - if options.version: + (cli_options, args) = parser.parse_args() + + if cli_options.version: print_version() - if options.config is None: + + setattr(cli_options, "declare_vhost", None) + final_options = copy.copy(cli_options) + + # Resolve config file path + if cli_options.config is None: config_file = default_config() if config_file is not None: - setattr(options, "config", config_file) - else: - if not os.path.isfile(options.config): - assert_usage(False, "Could not read config file '%s'" % options.config) - - if options.node is None and options.config: - options.node = "default" + setattr(final_options, "config", config_file) else: - options.node = options.node - for (key, val) in default_options.items(): - if getattr(options, key) is None: - setattr(options, key, val) - - if options.config is not None: - config = ConfigParser() + if not os.path.isfile(cli_options.config): + assert_usage(False, "Could not read config file '%s'" % cli_options.config) + + final_options = merge_default_options(cli_options, final_options) + final_options = merge_config_file_options(cli_options, final_options) + final_options = expand_base_uri_options(cli_options, final_options) + + return (final_options, args) + +def merge_default_options(cli_options, final_options): + for (key, default_val) in default_options.items(): + if getattr(cli_options, key) is None: + setattr(final_options, key, default_val) + return final_options + +def merge_config_file_options(cli_options, final_options): + # Parse config file and load it, making sure that CLI flags + # take precedence + if final_options.config is not None: + config_parser = ConfigParser() try: - config.read(options.config) - new_conf = dict(config.items(options.node)) + config_parser.read(final_options.config) + section_settings = dict(config_parser.items(final_options.node)) except NoSectionError as error: - if options.node == "default": + # Report if an explicitly provided section (node) does not exist in the file + if final_options.node == "default": pass else: - msg = "Could not read section '%s' in config file '%s':\n %s" % (options.node, options.config, error) + msg = "Could not read section '%s' in config file '%s':\n %s" % (final_options.node, final_options.config, error) assert_usage(False, msg) else: - for key, val in new_conf.items(): + for key, section_val in section_settings.items(): + # special case --ssl if key == 'ssl': - setattr(options, key, val == "True") + setattr(final_options, key, section_val == "True") else: - setattr(options, key, val) + # if CLI options do not contain this key, set it from the config file + if getattr(cli_options, key) is None: + setattr(final_options, key, section_val) + return final_options +def expand_base_uri_options(cli_options, final_options): # if --base-uri is passed, set connection parameters from it - if options.base_uri is not None: - u = urlparse.urlparse(options.base_uri) + if final_options.base_uri is not None: + u = urlparse.urlparse(final_options.base_uri) for key in ["hostname", "port", "username", "password"]: if getattr(u, key) is not None: - setattr(options, key, getattr(u, key)) + setattr(final_options, key, getattr(u, key)) if u.path is not None and (u.path != "") and (u.path != "/"): eprint("WARNING: path in --base-uri is ignored. Please specify --vhost and/or --path-prefix separately.\n") - - return (options, args) - + return final_options def assert_usage(expr, error): if not expr: @@ -690,17 +709,15 @@ class Management: if self.options.vhost: uri += "/%s" % quote_plus(self.options.vhost) definitions = self.get(uri) - f = open(path, 'w') - f.write(definitions) - f.close() + with open(path, 'wb') as f: + f.write(definitions.encode()) self.verbose("Exported definitions for %s to \"%s\"" % (self.options.hostname, path)) def invoke_import(self): path = self.get_arg() - f = open(path, 'r') - definitions = f.read() - f.close() + with open(path, 'rb') as f: + definitions = f.read() uri = "/definitions" if self.options.vhost: uri += "/%s" % quote_plus(self.options.vhost) @@ -848,8 +865,10 @@ def format_list(json_list, columns, args, options): print(json_list) return elif format == "pretty_json": - enc = json.JSONEncoder(False, False, True, True, True, 2) - print(enc.encode(json.loads(json_list))) + json_list_parsed = json.loads(json_list) + print(json.dumps(json_list_parsed, + skipkeys=False, ensure_ascii=False, check_circular=True, + allow_nan=True, sort_keys=True, indent=2)) return else: formatter = FORMATS[format] @@ -1052,13 +1071,12 @@ def write_payload_file(payload_file, json_list): result = json.loads(json_list)[0] payload = result['payload'] payload_encoding = result['payload_encoding'] - f = open(payload_file, 'w') - if payload_encoding == 'base64': - data = base64.b64decode(payload) - else: - data = payload - f.write(data) - f.close() + with open(payload_file, 'wb') as f: + if payload_encoding == 'base64': + data = base64.b64decode(payload) + else: + data = payload + f.write(data.encode("utf-8")) def print_bash_completion(): diff --git a/deps/rabbitmq_management/erlang.mk b/deps/rabbitmq_management/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_management/erlang.mk +++ b/deps/rabbitmq_management/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_management/priv/www/api/index.html b/deps/rabbitmq_management/priv/www/api/index.html index 7d5b5ca..f556c4b 100644 --- a/deps/rabbitmq_management/priv/www/api/index.html +++ b/deps/rabbitmq_management/priv/www/api/index.html @@ -1012,6 +1012,17 @@ or:

    curl -4u 'guest:guest' -XPOST localhost:15672/api/rebalance/queues/
    + + X + + + + /api/federation-links
    + /api/federation-links/vhost + + Provides status for all federation links. Requires the rabbitmq_federation_management plugin to be enabled. + + diff --git a/deps/rabbitmq_management/priv/www/js/global.js b/deps/rabbitmq_management/priv/www/js/global.js index a3429bf..d472a77 100644 --- a/deps/rabbitmq_management/priv/www/js/global.js +++ b/deps/rabbitmq_management/priv/www/js/global.js @@ -631,8 +631,13 @@ function setup_global_vars() { 'User ' + (user_administrator ? '
    ' + user_name + '' : user_name) ); + var product = overview.rabbitmq_version; + if (overview.product_name && overview.product_version) { + product = overview.product_name + ' ' + overview.product_version; + } + $('#versions').html( - '' + fmt_escape_html(overview.rabbitmq_version) + '' + + '' + fmt_escape_html(product) + '' + 'Erlang ' + fmt_escape_html(overview.erlang_version) + '' ); nodes_interesting = false; diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs index a93a450..b1e6653 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs @@ -248,12 +248,15 @@ <% } %> + +<% if(!disable_stats) { %>

    Consumers

    <%= format('consumers', {'mode': 'queue', 'consumers': queue.consumer_details}) %>
    +<% } %>

    Bindings

    diff --git a/deps/rabbitmq_management/rabbitmq-components.mk b/deps/rabbitmq_management/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_management/rabbitmq-components.mk +++ b/deps/rabbitmq_management/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl index ea4aca1..8741a2a 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_app.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_app.erl @@ -29,6 +29,7 @@ -define(TCP_CONTEXT, rabbitmq_management_tcp). -define(TLS_CONTEXT, rabbitmq_management_tls). -define(DEFAULT_PORT, 15672). +-define(DEFAULT_TLS_PORT, 15671). start(_Type, _StartArgs) -> case application:get_env(rabbitmq_management_agent, disable_metrics_collector, false) of @@ -94,12 +95,15 @@ get_listeners_config() -> maybe_disable_sendfile(Listeners) -> DisableSendfile = #{sendfile => false}, - lists:map(fun(Listener) -> - CowboyOpts0 = maps:from_list(proplists:get_value(cowboy_opts, Listener, [])), - - [{cowboy_opts, maps:to_list(maps:merge(DisableSendfile, CowboyOpts0))} | lists:keydelete(cowboy_opts, 1, Listener)] - end, - Listeners). + F = fun(L0) -> + CowboyOptsL0 = proplists:get_value(cowboy_opts, L0, []), + CowboyOptsM0 = maps:from_list(CowboyOptsL0), + CowboyOptsM1 = maps:merge(DisableSendfile, CowboyOptsM0), + CowboyOptsL1 = maps:to_list(CowboyOptsM1), + L1 = lists:keydelete(cowboy_opts, 1, L0), + [{cowboy_opts, CowboyOptsL1}|L1] + end, + lists:map(F, Listeners). has_configured_legacy_listener() -> has_configured_listener(listener). @@ -122,37 +126,52 @@ get_legacy_listener() -> get_tls_listener() -> {ok, Listener0} = application:get_env(rabbitmq_management, ssl_config), - [{ssl, true} | Listener0]. + case proplists:get_value(cowboy_opts, Listener0) of + undefined -> + [{ssl, true}, {ssl_opts, Listener0}]; + CowboyOpts -> + Listener1 = lists:keydelete(cowboy_opts, 1, Listener0), + [{ssl, true}, {ssl_opts, Listener1}, {cowboy_opts, CowboyOpts}] + end. get_tcp_listener() -> application:get_env(rabbitmq_management, tcp_config, []). -start_listener(Listener, IgnoreApps, NeedLogStartup) -> - {Type, ContextName} = case is_tls(Listener) of +start_listener(Listener0, IgnoreApps, NeedLogStartup) -> + {Type, ContextName} = case is_tls(Listener0) of true -> {tls, ?TLS_CONTEXT}; false -> {tcp, ?TCP_CONTEXT} end, - {ok, _} = register_context(ContextName, Listener, IgnoreApps), + {ok, Listener1} = ensure_port(Type, Listener0), + {ok, _} = register_context(ContextName, Listener1, IgnoreApps), case NeedLogStartup of - true -> log_startup(Type, Listener); + true -> log_startup(Type, Listener1); false -> ok end, ok. -register_context(ContextName, Listener0, IgnoreApps) -> - M0 = maps:from_list(Listener0), - %% include default port if it's not provided in the config - %% as Cowboy won't start if the port is missing - M1 = maps:merge(#{port => ?DEFAULT_PORT}, M0), +register_context(ContextName, Listener, IgnoreApps) -> + Dispatcher = rabbit_mgmt_dispatcher:build_dispatcher(IgnoreApps), rabbit_web_dispatch:register_context_handler( - ContextName, maps:to_list(M1), "", - rabbit_mgmt_dispatcher:build_dispatcher(IgnoreApps), - "RabbitMQ Management"). + ContextName, Listener, "", + Dispatcher, "RabbitMQ Management"). unregister_all_contexts() -> rabbit_web_dispatch:unregister_context(?TCP_CONTEXT), rabbit_web_dispatch:unregister_context(?TLS_CONTEXT). +ensure_port(tls, Listener) -> + do_ensure_port(?DEFAULT_TLS_PORT, Listener); +ensure_port(tcp, Listener) -> + do_ensure_port(?DEFAULT_PORT, Listener). + +do_ensure_port(Port, Listener) -> + %% include default port if it's not provided in the config + %% as Cowboy won't start if the port is missing + M0 = maps:from_list(Listener), + M1 = maps:merge(#{port => Port}, M0), + {ok, maps:to_list(M1)}. + log_startup(tcp, Listener) -> rabbit_log:info("Management plugin: HTTP (non-TLS) listener started on port ~w", [port(Listener)]); log_startup(tls, Listener) -> diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl index 7dd544b..a71fe11 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_db_cache.erl @@ -98,12 +98,19 @@ init([]) -> args = [], multiplier = Mult}}. +handle_call({fetch, _FetchFun, FunArgs} = Msg, From, + #state{data = CachedData, args = Args} = State) when + CachedData =/= none andalso Args =/= FunArgs -> + %% there is cached data that needs to be invalidated + handle_call(Msg, From, ?RESET_STATE(State)); handle_call({fetch, FetchFun, FunArgs}, _From, - #state{data = CachedData, args = Args, - multiplier = Mult, timer_ref = Ref} = State) when - CachedData =:= none orelse Args =/= FunArgs -> + #state{data = none, + multiplier = Mult, timer_ref = Ref} = State) -> + %% force a gc here to clean up previously cleared data + garbage_collect(), case Ref of - R when is_reference(R) -> _ = erlang:cancel_timer(R); + R when is_reference(R) -> + _ = erlang:cancel_timer(R); _ -> ok end, @@ -124,14 +131,14 @@ handle_call({fetch, _FetchFun, _}, _From, #state{data = Data} = State) -> Reply = {ok, Data}, {reply, Reply, State}; handle_call(purge_cache, _From, State) -> - {reply, ok, ?RESET_STATE(State)}. + {reply, ok, ?RESET_STATE(State), hibernate}. handle_cast(_Msg, State) -> {noreply, State}. handle_info(purge_cache, State) -> - {noreply, ?RESET_STATE(State)}; + {noreply, ?RESET_STATE(State), hibernate}; handle_info(_Info, State) -> {noreply, State}. diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl index 47394cc..29d79ee 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl @@ -66,10 +66,14 @@ all_definitions(ReqData, Context) -> QNames = [{pget(name, Q), pget(vhost, Q)} || Q <- Qs], Bs = [B || B <- rabbit_mgmt_wm_bindings:basic(ReqData), export_binding(B, QNames)], - {ok, Vsn} = application:get_key(rabbit, vsn), + Vsn = rabbit:base_product_version(), + ProductName = rabbit:product_name(), + ProductVersion = rabbit:product_version(), rabbit_mgmt_util:reply( [{rabbit_version, rabbit_data_coercion:to_binary(Vsn)}, - {rabbitmq_version, rabbit_data_coercion:to_binary(Vsn)}] ++ + {rabbitmq_version, rabbit_data_coercion:to_binary(Vsn)}, + {product_name, rabbit_data_coercion:to_binary(ProductName)}, + {product_version, rabbit_data_coercion:to_binary(ProductVersion)}] ++ filter( [{users, rabbit_mgmt_wm_users:users(all)}, {vhosts, rabbit_mgmt_wm_vhosts:basic()}, diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl index 06a380a..82d6abf 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl @@ -52,7 +52,9 @@ to_json(ReqData, Context = #context{user = User = #user{tags = Tags}}) -> {rates_mode, RatesMode}, {sample_retention_policies, SRP}, {exchange_types, ExchangeTypes}, - {rabbitmq_version, version(rabbit)}, + {product_version, list_to_binary(rabbit:product_version())}, + {product_name, list_to_binary(rabbit:product_name())}, + {rabbitmq_version, list_to_binary(rabbit:base_product_version())}, {cluster_name, rabbit_nodes:cluster_name()}, {erlang_version, erlang_version()}, {erlang_full_version, erlang_full_version()}, diff --git a/deps/rabbitmq_management_agent/erlang.mk b/deps/rabbitmq_management_agent/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_management_agent/erlang.mk +++ b/deps/rabbitmq_management_agent/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_management_agent/rabbitmq-components.mk b/deps/rabbitmq_management_agent/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_management_agent/rabbitmq-components.mk +++ b/deps/rabbitmq_management_agent/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_mqtt/erlang.mk b/deps/rabbitmq_mqtt/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_mqtt/erlang.mk +++ b/deps/rabbitmq_mqtt/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_mqtt/rabbitmq-components.mk b/deps/rabbitmq_mqtt/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_mqtt/rabbitmq-components.mk +++ b/deps/rabbitmq_mqtt/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_aws/erlang.mk b/deps/rabbitmq_peer_discovery_aws/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_peer_discovery_aws/erlang.mk +++ b/deps/rabbitmq_peer_discovery_aws/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_aws/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_common/erlang.mk b/deps/rabbitmq_peer_discovery_common/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_peer_discovery_common/erlang.mk +++ b/deps/rabbitmq_peer_discovery_common/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_common/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl index 8548c30..85c55ed 100644 --- a/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl +++ b/deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_config.erl @@ -19,7 +19,7 @@ -include("rabbit_peer_discovery.hrl"). --export([get/3, config_map/1]). +-export([get/3, get_integer/3, config_map/1]). %% %% API @@ -38,6 +38,19 @@ get(Key, Mapping, Config) -> get_with_entry_meta(Key, maps:get(Key, Mapping), Config) end. +-spec get_integer(Key :: atom(), + Mapping :: #{atom() => peer_discovery_config_entry_meta()}, + Config :: #{atom() => peer_discovery_config_value()}) -> integer(). + +get_integer(Key, Mapping, Config) -> + case maps:is_key(Key, Mapping) of + false -> + rabbit_log:error("Key ~s is not found in peer discovery config mapping ~p!", [Key, Mapping]), + throw({badkey, Key}); + true -> + get_integer_with_entry_meta(Key, maps:get(Key, Mapping), Config) + end. + -spec config_map(atom()) -> #{atom() => peer_discovery_config_value()}. config_map(BackendConfigKey) -> @@ -63,6 +76,15 @@ get_with_entry_meta(Key, #peer_discovery_config_entry_meta{env_variable = EV, type = Type}, Map) -> normalize(Type, get_from_env_variable_or_map(Map, EV, Key, Default)). +-spec get_integer_with_entry_meta(Key :: atom(), + EntryMeta :: #peer_discovery_config_entry_meta{}, + Map :: #{atom() => peer_discovery_config_value()}) -> integer(). + +get_integer_with_entry_meta(Key, #peer_discovery_config_entry_meta{env_variable = EV, + default_value = Default, + type = Type}, Map) -> + normalize(Type, get_integer_from_env_variable_or_map(Map, EV, Key, Default)). + %%-------------------------------------------------------------------- %% @private @@ -81,6 +103,16 @@ get_from_env_variable_or_map(Map, OSKey, AppKey, Default) -> Value -> Value end. +-spec get_integer_from_env_variable_or_map(Map :: map(), OSKey :: string(), AppKey :: atom(), + Default :: integer()) + -> integer(). +get_integer_from_env_variable_or_map(Map, OSKey, AppKey, Default) -> + case rabbit_peer_discovery_util:getenv(OSKey) of + false -> maps:get(AppKey, Map, Default); + "" -> Default; + Value -> Value + end. + %%-------------------------------------------------------------------- %% @private %% @doc diff --git a/deps/rabbitmq_peer_discovery_consul/erlang.mk b/deps/rabbitmq_peer_discovery_consul/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_peer_discovery_consul/erlang.mk +++ b/deps/rabbitmq_peer_discovery_consul/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_consul/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl index c4fafdb..12c1660 100644 --- a/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl +++ b/deps/rabbitmq_peer_discovery_consul/src/rabbit_peer_discovery_consul.erl @@ -66,7 +66,7 @@ list_nodes() -> M = maps:from_list(Proplist), case rabbit_peer_discovery_httpc:get(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, health, service, get_config_key(consul_svc, M)]), list_nodes_query_args(), maybe_add_acl([]), @@ -97,7 +97,7 @@ register() -> rabbit_log:debug("Consul registration body: ~s", [Body]), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, service, register]), [], maybe_add_acl([]), @@ -116,7 +116,7 @@ unregister() -> rabbit_log:debug("Unregistering with Consul using service ID '~s'", [ID]), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, service, deregister, ID]), [], maybe_add_acl([]), @@ -142,7 +142,8 @@ post_registration() -> -spec lock(Node :: atom()) -> {ok, Data :: term()} | {error, Reason :: string()}. lock(Node) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), + M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), + rabbit_log:debug("Effective Consul peer discovery configuration: ~p", [M]), case create_session(Node, get_config_key(consul_svc_ttl, M)) of {ok, SessionId} -> TRef = start_session_ttl_updater(SessionId), @@ -178,6 +179,13 @@ unlock({SessionId, TRef}) -> get_config_key(Key, Map) -> ?CONFIG_MODULE:get(Key, ?CONFIG_MAPPING, Map). +-spec get_integer_config_key(Key :: atom(), Map :: #{atom() => peer_discovery_config_value()}) + -> integer(). + +get_integer_config_key(Key, Map) -> + ?CONFIG_MODULE:get_integer(Key, ?CONFIG_MAPPING, Map). + + -spec filter_nodes(ConsulResult :: list(), AllowWarning :: atom()) -> list(). filter_nodes(Nodes, Warn) -> case Warn of @@ -458,7 +466,7 @@ send_health_check_pass() -> rabbit_log:debug("Running Consul health check"), case rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, agent, check, pass, Service]), [], maybe_add_acl([]), @@ -544,7 +552,7 @@ consul_session_create(Query, Headers, Body) -> {ok, Serialized} -> rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/session/create", Query, Headers, @@ -663,7 +671,7 @@ consul_kv_write(Path, Query, Headers, Body) -> {ok, Serialized} -> rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/kv/" ++ Path, Query, Headers, @@ -686,7 +694,7 @@ consul_kv_read(Path, Query, Headers) -> M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), rabbit_peer_discovery_httpc:get(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), "v1/kv/" ++ Path, Query, Headers, @@ -770,7 +778,7 @@ consul_session_renew(SessionId, Query, Headers) -> M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), rabbit_peer_discovery_httpc:put(get_config_key(consul_scheme, M), get_config_key(consul_host, M), - get_config_key(consul_port, M), + get_integer_config_key(consul_port, M), rabbit_peer_discovery_httpc:build_path([v1, session, renew, rabbit_data_coercion:to_atom(SessionId)]), Query, Headers, diff --git a/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch b/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch new file mode 100644 index 0000000..e8fed35 --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/.travis.yml.patch @@ -0,0 +1,19 @@ +--- .travis.yml ++++ .travis.yml +@@ -1,7 +1,7 @@ + # vim:sw=2:et: + + os: linux +-dist: xenial ++dist: bionic + language: elixir + notifications: + email: +@@ -13,6 +13,7 @@ addons: + apt: + packages: + - awscli ++ - daemonize + cache: + apt: true + env: diff --git a/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md b/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md index 42af1f7..5933280 100644 --- a/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md +++ b/deps/rabbitmq_peer_discovery_etcd/CONTRIBUTING.md @@ -78,21 +78,16 @@ ask the core team for their opinion on the [RabbitMQ users mailing list][rmq-use ## Running Tests -To run a "fast suite" (a subset of tests): - - make ct-fast - -To run a "slow suite" (a subset of tests that take much longer to run): - - make ct-slow +See [RUNNING_TESTS.md](./RUNNING_TESTS.md) to learn how the test suites provision an `etcd` +node and what the prerequisites are. To run a particular suite: make ct-$suite_name -for example, to run the `backing_queue` suite: +for example, to run the `system` suite: - make ct-backing_queue + make ct-system Finally, diff --git a/deps/rabbitmq_peer_discovery_etcd/Makefile b/deps/rabbitmq_peer_discovery_etcd/Makefile index b1800ef..114c3ee 100644 --- a/deps/rabbitmq_peer_discovery_etcd/Makefile +++ b/deps/rabbitmq_peer_discovery_etcd/Makefile @@ -2,9 +2,11 @@ PROJECT = rabbitmq_peer_discovery_etcd PROJECT_DESCRIPTION = etcd-based RabbitMQ peer discovery backend PROJECT_MOD = rabbitmq_peer_discovery_etcd_app -DEPS = rabbit_common rabbitmq_peer_discovery_common rabbit +DEPS = rabbit_common rabbitmq_peer_discovery_common rabbit eetcd gun TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers ct_helper meck dep_ct_helper = git https://github.com/extend/ct_helper.git master +dep_gun = hex 1.3.2 +dep_eetcd = hex 0.3.2 DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk diff --git a/deps/rabbitmq_peer_discovery_etcd/README.md b/deps/rabbitmq_peer_discovery_etcd/README.md index 41909af..17e4bbd 100644 --- a/deps/rabbitmq_peer_discovery_etcd/README.md +++ b/deps/rabbitmq_peer_discovery_etcd/README.md @@ -18,12 +18,10 @@ are not in scope for this plugin. This plugin requires RabbitMQ 3.7.0 or later. -For an etcd-based peer discovery and cluster formation -mechanism that supports 3.6.x, see [rabbitmq-autocluster](https://github.com/rabbitmq/rabbitmq-autocluster). ## Supported etcd Versions -The plugin supports etcd v2 and v3. +The plugin supports etcd 3.4 or later and uses the current stable v3 gRPC API. ## Installation diff --git a/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md b/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md new file mode 100644 index 0000000..9aafe85 --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/RUNNING_TESTS.md @@ -0,0 +1,33 @@ +## Running Common Test Suites + +```shell +gmake tests +``` + +When running tests via `gmake tests`, there is no need to run the +`init-etcd.sh` script as the test suite will do it for you. + + +## etcd Node Management + +The test suite of this plugin ships with a [script](./test/system_SUITE_data/init-etcd.sh) +that starts an `etcd` node in the background. + +This script can also be used to start a node for experimenting with this +plugin. To run it: + +```shell +./test/system_SUITE_data/init-etcd.sh [etcd data dir] [etcd client port] +``` + +where `[etcd data dir]` is the desired `etcd` node data directory path. + +The script depends on the [`daemonize` +tool](https://software.clapper.org/daemonize/) for running the process in the +background and pid file creation. + +To stop a node started this way use the pid file created by `daemonize`: + +```shell +pkill -INT $(cat [etcd data dir]/etcd.pid) +``` diff --git a/deps/rabbitmq_peer_discovery_etcd/erlang.mk b/deps/rabbitmq_peer_discovery_etcd/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_peer_discovery_etcd/erlang.mk +++ b/deps/rabbitmq_peer_discovery_etcd/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md deleted file mode 100644 index 552d615..0000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/README.md +++ /dev/null @@ -1,30 +0,0 @@ -Dynamic RabbitMQ cluster using: - -1. [Docker compose](https://docs.docker.com/compose/) - -2. [Etcd](https://coreos.com/etcd/) - -3. [HA proxy](https://github.com/docker/dockercloud-haproxy) - -4. [rabbitmq-peer-discovery-etcd plugin](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd) - ---- - -How to run: - -``` -docker-compose up -``` - -How to scale: - -``` -docker-compose up --scale rabbit=2 -d -``` - - ---- - -Check running status: - -- RabbitMQ Management: http://localhost:15672/#/ \ No newline at end of file diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins deleted file mode 100644 index 1397d5e..0000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/enabled_plugins +++ /dev/null @@ -1 +0,0 @@ -[rabbitmq_management,rabbitmq_peer_discovery_etcd]. \ No newline at end of file diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf deleted file mode 100644 index 0b39190..0000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/conf/rabbitmq.conf +++ /dev/null @@ -1,10 +0,0 @@ -loopback_users.guest = false -cluster_formation.peer_discovery_backend = rabbit_peer_discovery_etcd -cluster_formation.etcd.host = etcd0 -# Set to false if automatic removal of unknown/absent nodes -# is desired. This can be dangerous, see -# * http://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup -# * https://groups.google.com/forum/#!msg/rabbitmq-users/wuOfzEywHXo/k8z_HWIkBgAJ -cluster_formation.node_cleanup.only_log_warning = true -cluster_partition_handling = autoheal -vm_memory_high_watermark.relative = 0.8 diff --git a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml b/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml deleted file mode 100644 index e876d15..0000000 --- a/deps/rabbitmq_peer_discovery_etcd/examples/compose_etcd2/docker-compose.yml +++ /dev/null @@ -1,52 +0,0 @@ -version: "2" -services: - etcd0: - image: quay.io/coreos/etcd:v2.1.1 - networks: - - back - ports: - - "4001:4001" - - 2380 - - 2379 - command: - - --name=etcd0 - - --initial-cluster-token=etcd-cluster-1 - - --initial-cluster=etcd0=http://etcd0:2380 - - --initial-cluster-state=new - - --initial-advertise-peer-urls=http://etcd0:2380 - - --listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001 - - --listen-peer-urls=http://0.0.0.0:2380 - - --advertise-client-urls=http://etcd0:2379 - networks: - - back - rabbit: - environment: - - TCP_PORTS=15672, 5672 - - RABBITMQ_ERLANG_COOKIE="mycookie" - networks: - - back - image: rabbitmq:3.7 - expose: - - 15672 - - 5672 - - 5671 - - 15671 - tty: true - volumes: - - ./conf/:/etc/rabbitmq/ - command: sh -c "sleep 10; rabbitmq-server;" - lb: - image: dockercloud/haproxy - environment: - - MODE=tcp - links: - - rabbit - volumes: - - /var/run/docker.sock:/var/run/docker.sock - ports: - - 15672:15672 - - 5672:5672 - networks: - - back -networks: - back: diff --git a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl index 12880c4..062f2c5 100644 --- a/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl +++ b/deps/rabbitmq_peer_discovery_etcd/include/rabbit_peer_discovery_etcd.hrl @@ -1,46 +1,19 @@ --define(CONFIG_MODULE, rabbit_peer_discovery_config). --define(UTIL_MODULE, rabbit_peer_discovery_util). --define(HTTPC_MODULE, rabbit_peer_discovery_httpc). - -define(BACKEND_CONFIG_KEY, peer_discovery_etcd). - --define(CONFIG_MAPPING, - #{ - etcd_scheme => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_SCHEME", - default_value = "http" - }, - etcd_host => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_HOST", - default_value = "localhost" - }, - etcd_port => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "ETCD_PORT", - default_value = 2379 - }, - etcd_prefix => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "ETCD_PREFIX", - default_value = "rabbitmq" - }, - etcd_node_ttl => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "ETCD_NODE_TTL", - default_value = 30 - }, - cluster_name => #peer_discovery_config_entry_meta{ - type = string, - env_variable = "CLUSTER_NAME", - default_value = "default" - }, - lock_wait_time => #peer_discovery_config_entry_meta{ - type = integer, - env_variable = "LOCK_WAIT_TIME", - default_value = 300 - } - }). - +-record(statem_data, { + endpoints, + tls_options, + connection_name, + connection_pid, + connection_monitor, + key_prefix, + cluster_name, + node_key_lease_id, + node_key_ttl_in_seconds, + %% the pid of the process returned by eetcd_lease:keep_alive/2 + %% which refreshes this node's key lease + node_lease_keepalive_pid, + lock_ttl_in_seconds, + username, + obfuscated_password +}). diff --git a/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema b/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema index 9f06066..2a3a209 100644 --- a/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema +++ b/deps/rabbitmq_peer_discovery_etcd/priv/schema/rabbitmq_peer_discovery_etcd.schema @@ -1,4 +1,24 @@ -%% etcd host +%% Endpoints + +{mapping, "cluster_formation.etcd.endpoints", "rabbit.cluster_formation.peer_discovery_etcd.endpoints", [ + {datatype, {enum, [none]}} +]}. + +{mapping, "cluster_formation.etcd.endpoints.$index", "rabbit.cluster_formation.peer_discovery_etcd.endpoints", [ + {datatype, [string, ip]} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.endpoints", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.endpoints", Conf, undefined) of + none -> []; + _ -> + Endpoints = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.endpoints", Conf), + [V || {_, V} <- Endpoints] + end +end}. + +%% Legacy: etcd host {mapping, "cluster_formation.etcd.host", "rabbit.cluster_formation.peer_discovery_etcd.etcd_host", [ {datatype, string} @@ -12,7 +32,7 @@ fun(Conf) -> end end}. -%% etcd port +%% Legacy: etcd port {mapping, "cluster_formation.etcd.port", "rabbit.cluster_formation.peer_discovery_etcd.etcd_port", [ {datatype, integer}, @@ -27,7 +47,7 @@ fun(Conf) -> end end}. -%% etcd scheme +%% Legacy: etcd scheme. The key remains for backwards compatibility, it will not be used. {mapping, "cluster_formation.etcd.scheme", "rabbit.cluster_formation.peer_discovery_etcd.etcd_scheme", [ {datatype, string} @@ -41,7 +61,7 @@ fun(Conf) -> end end}. -%% key prefix +%% key prefix appended after /rabbitmq/{discovery,locks} (a mandatory prefix we enforce as of #22) {mapping, "cluster_formation.etcd.key_prefix", "rabbit.cluster_formation.peer_discovery_etcd.etcd_prefix", [ {datatype, string} @@ -69,7 +89,7 @@ fun(Conf) -> end end}. -%% node ttl +%% node key ttl {mapping, "cluster_formation.etcd.node_ttl", "rabbit.cluster_formation.peer_discovery_etcd.etcd_node_ttl", [ {datatype, integer}, @@ -109,3 +129,144 @@ fun(Conf) -> Value -> Value end end}. + +%% authentication + +{mapping, "cluster_formation.etcd.username", "rabbit.cluster_formation.peer_discovery_etcd.etcd_username", [ + {datatype, string} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.etcd_username", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.username", Conf, undefined) of + undefined -> cuttlefish:unset(); + Value -> Value + end +end}. + +{mapping, "cluster_formation.etcd.password", "rabbit.cluster_formation.peer_discovery_etcd.etcd_password", [ + {datatype, string} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.etcd_password", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.password", Conf, undefined) of + undefined -> cuttlefish:unset(); + Value -> Value + end +end}. + +%% +%% TLS client options +%% + +{mapping, "cluster_formation.etcd.ssl_options", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options", [ + {datatype, {enum, [none]}} +]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options", +fun(Conf) -> + case cuttlefish:conf_get("cluster_formation.etcd.ssl_options", Conf, undefined) of + none -> []; + _ -> cuttlefish:invalid("Invalid cluster_formation.etcd.ssl_options") + end +end}. + +{mapping, "cluster_formation.etcd.ssl_options.verify", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.verify", [ + {datatype, {enum, [verify_peer, verify_none]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.fail_if_no_peer_cert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.fail_if_no_peer_cert", [ + {datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.cacertfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacertfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.certfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.certfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.cacerts.$name", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacerts", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cacerts", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.cacerts", Conf), + [ list_to_binary(V) || {_, V} <- Settings ] +end}. + +{mapping, "cluster_formation.etcd.ssl_options.cert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cert", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.cert", +fun(Conf) -> + list_to_binary(cuttlefish:conf_get("cluster_formation.etcd.ssl_options.cert", Conf)) +end}. + +{mapping, "cluster_formation.etcd.ssl_options.crl_check", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.crl_check", + [{datatype, [{enum, [true, false, peer, best_effort]}]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.depth", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.depth", + [{datatype, integer}, {validators, ["byte"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.dh", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dh", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dh", +fun(Conf) -> + list_to_binary(cuttlefish:conf_get("cluster_formation.etcd.ssl_options.dh", Conf)) +end}. + +{mapping, "cluster_formation.etcd.ssl_options.dhfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.dhfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.RSAPrivateKey", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.DSAPrivateKey", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.key.PrivateKeyInfo", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.key", +fun(Conf) -> + case cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.key", Conf) of + [{[_,_,Key], Val}|_] -> {list_to_atom(Key), list_to_binary(Val)}; + _ -> undefined + end +end}. + +{mapping, "cluster_formation.etcd.ssl_options.keyfile", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.keyfile", + [{datatype, string}, {validators, ["file_accessible"]}]}. + +{mapping, "cluster_formation.etcd.ssl_options.log_alert", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.log_alert", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.password", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.password", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.psk_identity", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.psk_identity", + [{datatype, string}]}. + +{mapping, "cluster_formation.etcd.ssl_options.reuse_sessions", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.reuse_sessions", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.secure_renegotiate", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.secure_renegotiate", + [{datatype, {enum, [true, false]}}]}. + +{mapping, "cluster_formation.etcd.ssl_options.versions.$version", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.versions", + [{datatype, atom}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.versions", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.versions", Conf), + [V || {_, V} <- Settings] +end}. + +{mapping, "cluster_formation.etcd.ssl_options.ciphers.$cipher", "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.ciphers", + [{datatype, string}]}. + +{translation, "rabbit.cluster_formation.peer_discovery_etcd.ssl_options.ciphers", +fun(Conf) -> + Settings = cuttlefish_variable:filter_by_prefix("cluster_formation.etcd.ssl_options.ciphers", Conf), + lists:reverse([V || {_, V} <- Settings]) +end}. diff --git a/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_etcd/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl index 31bf867..0f41a15 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbit_peer_discovery_etcd.erl @@ -25,27 +25,34 @@ -export([init/0, list_nodes/0, supports_registration/0, register/0, unregister/0, post_registration/0, lock/1, unlock/1]). --export([update_node_key/0]). - --export([lock_ttl_update_callback/1]). - -%% for tests --export([extract_nodes/1, base_path/0, base_path/1, startup_lock_path/0, node_path/1, nodes_path/1, - get_node_from_key/2]). - +-define(ETCD_CLIENT, rabbitmq_peer_discovery_etcd_v3_client). %% %% API %% init() -> - rabbit_log:debug("Peer discovery etcd: initialising..."), - ok = application:ensure_started(inets), - %% we cannot start this plugin yet since it depends on the rabbit app, + %% We cannot start this plugin yet since it depends on the rabbit app, %% which is in the process of being started by the time this function is called application:load(rabbitmq_peer_discovery_common), - ?HTTPC_MODULE:maybe_configure_proxy(), - ?HTTPC_MODULE:maybe_configure_inet6(). + application:load(rabbitmq_peer_discovery_etcd), + + %% Here we start the client very early on, before plugins have initialized. + %% We need to do it conditionally, however. + NoOp = fun() -> ok end, + Run = fun(_) -> + rabbit_log:debug("Peer discovery etcd: initialising..."), + application:ensure_all_started(eetcd), + Formation = application:get_env(rabbit, cluster_formation, []), + Opts = maps:from_list(proplists:get_value(peer_discovery_etcd, Formation, [])), + {ok, Pid} = rabbitmq_peer_discovery_etcd_v3_client:start_link(Opts), + %% unlink so that this supervisor's lifecycle does not affect RabbitMQ core + unlink(Pid), + rabbit_log:debug("etcd peer discovery: v3 client pid: ~p", [whereis(rabbitmq_peer_discovery_etcd_v3_client)]) + end, + rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, NoOp, NoOp, Run), + + ok. -spec list_nodes() -> {ok, {Nodes :: list(), NodeType :: rabbit_types:node_type()}} | {error, Reason :: string()}. @@ -60,17 +67,10 @@ list_nodes() -> [?MODULE]), {ok, {[], disc}} end, - Fun2 = fun(Proplist) -> - M = maps:from_list(Proplist), - case etcd_get(nodes_path(M), [{recursive, true}], M) of - {ok, Nodes} -> - NodeList = extract_nodes(Nodes), - {ok, NodeList}; - {error, "404"} -> - {ok, []}; - Error -> - Error - end + Fun2 = fun(_Proplist) -> + %% error logging will be done by the client + Nodes = rabbitmq_peer_discovery_etcd_v3_client:list_nodes(), + {ok, {Nodes, disc}} end, rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, Fun0, Fun1, Fun2). @@ -84,25 +84,17 @@ supports_registration() -> -spec register() -> ok | {error, string()}. register() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - case set_etcd_node_key(M) of - {ok, _} -> - rabbit_log:info("Registered node with etcd"), - ok; - {error, Error} -> - rabbit_log:error("Failed to register node with etcd: ~s", [Error]), - {error, Error} - end. + Result = ?ETCD_CLIENT:register(), + rabbit_log:info("Registered node with etcd"), + Result. -spec unregister() -> ok | {error, string()}. unregister() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - rabbit_log:info("Unregistering node with etcd"), - case etcd_delete(node_path(M), [{recursive, true}], M) of - {ok, _} -> ok; - Error -> Error - end. + %% This backend unregisters on plugin (etcd v3 client) deactivation + %% because by the time unregistration happens, the plugin and thus the client + %% it provides are already gone. MK. + ok. -spec post_registration() -> ok | {error, Reason :: string()}. @@ -112,271 +104,13 @@ post_registration() -> -spec lock(Node :: atom()) -> {ok, Data :: term()} | {error, Reason :: string()}. lock(Node) when is_atom(Node) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Now = erlang:system_time(seconds), - EndTime = Now + get_config_key(lock_wait_time, M), - lock(atom_to_list(Node) ++ " - " ++ generate_unique_string(), Now, EndTime). - - --spec unlock(Data :: term()) -> ok. - -unlock({UniqueId, TRef}) -> - stop_lock_ttl_updater(TRef), - case delete_etcd_lock_key(UniqueId) of - {ok, _} -> - ok; - {error, _} = Err -> - Err + case rabbitmq_peer_discovery_etcd_v3_client:lock(Node) of + {ok, GeneratedKey} -> GeneratedKey; + {error, _} = Error -> Error end. -%% -%% Implementation -%% - --spec get_config_key(Key :: atom(), Map :: #{atom() => peer_discovery_config_value()}) - -> peer_discovery_config_value(). - -get_config_key(Key, Map) -> - ?CONFIG_MODULE:get(Key, ?CONFIG_MAPPING, Map). - -%% @doc Update etcd, setting a key for this node with a TTL of etcd_node_ttl -%% @end --spec set_etcd_node_key(Map :: #{atom() => peer_discovery_config_value()}) - -> {ok, any()} | {error, string()}. -set_etcd_node_key(Map) -> - Interval = get_config_key(etcd_node_ttl, Map), - etcd_put(node_path(Map), [{ttl, Interval}], [{value, enabled}], Map). - -%% @doc Part of etcd path that allows us to distinguish different -%% cluster using the same etcd server. -%% @end --spec cluster_name_path_part(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -cluster_name_path_part(Map) -> - case get_config_key(cluster_name, Map) of - "undefined" -> "default"; - Value -> Value - end. - -%% @doc Return a list of path segments that are the base path for all -%% etcd keys related to current cluster. -%% @end --spec base_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -base_path(Map) -> - Segments = [v2, keys, get_config_key(etcd_prefix, Map), cluster_name_path_part(Map)], - rabbit_peer_discovery_httpc:build_path(Segments). - -%% @doc Return a list of path segments that are the base path for all -%% etcd keys related to current cluster. -%% @end --spec base_path() -> string(). -base_path() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - base_path(M). -%% @doc Returns etcd path under which nodes should be registered. -%% @end --spec nodes_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -nodes_path(Map) -> - base_path(Map) ++ "/nodes". - -%% @doc Returns etcd path under which current node should be registered -%% @end --spec node_path(Map :: #{atom() => peer_discovery_config_value()}) -> string(). -node_path(Map) -> - nodes_path(Map) ++ "/" ++ atom_to_list(node()). - -%% @doc Return the list of erlang nodes -%% @end -%% --spec extract_nodes(list(), list()) -> [node()]. -extract_nodes([], Nodes) -> Nodes; -extract_nodes([H|T], Nodes) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - ToAppend = case get_node_from_key(maps:get(<<"key">>, H), M) of - {error, none} -> []; - Name -> [Name] - end, - extract_nodes(T, lists:append(Nodes, ToAppend)). - -%% @doc Return the list of erlang nodes -%% @end -%% --spec extract_nodes(list()) -> [node()]. -extract_nodes([]) -> []; -extract_nodes(Nodes) -> - Dir = maps:get(<<"node">>, Nodes), - case maps:get(<<"nodes">>, Dir, undefined) of - undefined -> []; - Values -> extract_nodes(Values, []) - end. - - -%% @doc Given an etcd key, return the erlang node name -%% @end -%% --spec get_node_from_key(binary(), Map :: #{atom() => peer_discovery_config_value()}) -> node() | rabbit_types:error('none'). -get_node_from_key(<<"/", V/binary>>, Map) -> get_node_from_key(V, Map); -get_node_from_key(V, _Map) -> - %% Nodes path is /v2/keys/{etcd-prefix}/{cluster-name}/nodes and - %% etcd returns node keys as /{etcd-prefix}/{cluster-name}/nodes/{nodename}. - %% - %% Note that both the prefix and the cluster name might contain slashes, - %% and so will the resulting key. It is, however, significantly less - %% likely that any of those will contains a /nodes/{name} sequence, - %% so that's what we extract. - %% - %% See rabbitmq/rabbitmq-peer-discovery-etcd#14 for details. - case re:run(V, <<"/nodes/([^/]+)$">>, [{capture, all_but_first, binary}]) of - nomatch -> {error, none}; - {match, [Name]} -> - ?UTIL_MODULE:node_name(Name) - end. - --spec etcd_delete(Path, Query, Map) - -> {ok, term()} | {error, string()} when - Path :: string(), - Query :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_delete(Path, Query, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:delete(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query, "")). - --spec etcd_get(Path, Query, Map) - -> {ok, term()} | {error, string()} when - Path :: string(), - Query :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_get(Path, Query, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:get(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query)). - --spec etcd_put(Path, Query, Body, Map) -> {ok, any()} | {error, string()} when - Path :: string(), - Query :: list(), - Body :: list(), - Map :: #{atom() => peer_discovery_config_value()}. -etcd_put(Path, Query, Body, Map) -> - ?UTIL_MODULE:stringify_error( - ?HTTPC_MODULE:put(get_config_key(etcd_scheme, Map), - get_config_key(etcd_host, Map), - get_config_key(etcd_port, Map), - Path, Query, ?HTTPC_MODULE:build_query(Body))). - - --spec update_node_key() -> {ok, any()} | {error, string()}. -update_node_key() -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - set_etcd_node_key(M). - -%% @doc -%% Tries to acquire the lock. Will retry until the lock is finally -%% granted or time is up. -%% @end --spec lock(string(), pos_integer(), pos_integer()) -> ok | {error, string()}. -lock(_, Now, EndTime) when EndTime < Now -> - {error, "Acquiring the lock taking too long, bailing out"}; -lock(UniqueId, _, EndTime) -> - case try_insert_lock_key(UniqueId) of - true -> - TRef = start_lock_ttl_updater(UniqueId), - {ok, {UniqueId, TRef}}; - false -> - wait_for_lock_release(), - lock(UniqueId, erlang:system_time(seconds), EndTime); - {error, Reason} -> - {error, lists:flatten(io_lib:format("Error while acquiring the lock, reason: ~p", [Reason]))} - end. - -%% @doc Tries to acquire a lock in etcd. This can either succeed, fail -%% because somebody else is holding the lock, or completely file due -%% to some I/O error. -%% @end --spec try_insert_lock_key(string()) -> boolean() | {error, term()}. -try_insert_lock_key(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Ttl = get_config_key(etcd_node_ttl, M), - case set_etcd_lock_key(UniqueId, Ttl) of - {ok, _} -> - true; - %% Precondition failed - {error, "412"} -> - false; - {error, _} = Err -> - Err - end. - -%% @doc Orders etcd to create startup lock key if it doesn't exist already. -%% @end --spec set_etcd_lock_key(string(), non_neg_integer()) -> {ok, term()} | {error, string()}. -set_etcd_lock_key(UniqueId, Ttl) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - rabbit_log:debug("Will set a lock key with Etcd, path: ~p", [startup_lock_path()]), - etcd_put(startup_lock_path(), - [{ttl, Ttl}, {'prevExist', "false"}], - [{value, UniqueId}], - M). - -%% @doc Returns etcd path for startup lock -%% @end --spec startup_lock_path() -> string(). -startup_lock_path() -> - base_path() ++ "/startup_lock". - -%% @doc Generate random string. We are using it for compare-and-change -%% operations in etcd. -%% @end --spec generate_unique_string() -> string(). -generate_unique_string() -> - [ $a - 1 + rand:uniform(26) || _ <- lists:seq(1, 32) ]. - --spec start_lock_ttl_updater(string()) -> timer:tref(). -start_lock_ttl_updater(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - Interval = get_config_key(etcd_node_ttl, M), - rabbit_log:debug("Starting startup lock refresher"), - {ok, TRef} = timer:apply_interval(Interval * 500, ?MODULE, - lock_ttl_update_callback, [UniqueId]), - TRef. - --spec stop_lock_ttl_updater(timer:tref()) -> ok. -stop_lock_ttl_updater(TRef) -> - timer:cancel(TRef), - rabbit_log:debug("Stopped startup lock refresher"), - ok. - --spec wait_for_lock_release() -> ok. -wait_for_lock_release() -> - %% XXX Try to use etcd wait feature, but we somehow need to know - %% the index from the last lock attempt operation. - timer:sleep(1000). - -%% @doc Delete startup lock in etcd, but only if we are the holder of that lock. -%% @end --spec delete_etcd_lock_key(string()) -> {ok, term()} | {error, string()}. -delete_etcd_lock_key(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - etcd_delete(startup_lock_path(), - [{'prevExist', "true"}, {'prevValue', UniqueId}], - M). - --spec lock_ttl_update_callback(string()) -> string(). -lock_ttl_update_callback(UniqueId) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - _ = refresh_etcd_lock_ttl(UniqueId, get_config_key(etcd_node_ttl, M)), - UniqueId. +-spec unlock(Data :: term()) -> ok. -%% @doc Refresh startup lock TTL in etcd, but only if we are the holder of that lock. -%% @end --spec refresh_etcd_lock_ttl(string(), non_neg_integer()) -> {ok, term()} | {error, string()}. -refresh_etcd_lock_ttl(UniqueId, Ttl) -> - M = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - etcd_put(startup_lock_path(), - [], - [{ttl, Ttl}, {'prevExist', true}, {'prevValue', UniqueId}, {refresh, true}], - M). +unlock(GeneratedKey) -> + rabbitmq_peer_discovery_etcd_v3_client:unlock(GeneratedKey). diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl index 1118b31..100bece 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_app.erl @@ -21,10 +21,18 @@ %% -behaviour(application). --export([start/2, stop/1]). +-export([start/2, stop/1, prep_stop/1]). start(_Type, _StartArgs) -> + %% The tree had been started earlier, see rabbit_peer_discovery_etcd:init/0. MK. rabbitmq_peer_discovery_etcd_sup:start_link(). +prep_stop(_State) -> + try + rabbitmq_peer_discovery_etcd_v3_client:unregister() + catch + _:_ -> ok + end. + stop(_State) -> ok. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl deleted file mode 100644 index 580a3e6..0000000 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_health_check_helper.erl +++ /dev/null @@ -1,92 +0,0 @@ -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (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.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -%% License for the specific language governing rights and limitations -%% under the License. -%% -%% The Original Code is RabbitMQ Management Console. -%% -%% The Initial Developer of the Original Code is GoPivotal, Inc. -%% Copyright (c) 2007-2020 Pivotal Software, Inc. All rights reserved. -%% - -%% This gen_server starts a periodic timer on behalf of -%% a short lived process that kicks off peer discovery. -%% This is so that the timer is not automatically canceled -%% and cleaned up by the timer server when the short lived -%% process terminates. - --module(rabbitmq_peer_discovery_etcd_health_check_helper). - --behaviour(gen_server). - --include_lib("rabbitmq_peer_discovery_common/include/rabbit_peer_discovery.hrl"). --include("rabbit_peer_discovery_etcd.hrl"). - --export([start_link/0]). --export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, - code_change/3]). - --record(state, {timer_ref = undefined}). - --type(state() :: #state{timer_ref :: timer:tref() | undefined}). - - -%% -%% API -%% - -start_link() -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). - --spec init(list()) -> {ok, state()}. - -init([]) -> - Map = ?CONFIG_MODULE:config_map(?BACKEND_CONFIG_KEY), - case ?CONFIG_MODULE:get(etcd_node_ttl, ?CONFIG_MAPPING, Map) of - undefined -> - {ok, #state{timer_ref = none}}; - %% in seconds - Interval -> - %% We cannot use timer:apply_interval/4 here because this - %% function is executed in a short live process and when it - %% exits, the timer module will automatically cancel the - %% timer. - %% - %% Instead we delegate to a locally registered gen_server, - %% `rabbitmq_peer_discovery_etcd_health_check_helper`. - %% - %% The value is 1/2 of what's configured to avoid a race - %% condition between check TTL expiration and in flight - %% notifications - rabbit_log:info("Starting etcd health check notifier " - "(effective interval: ~p milliseconds)", - [Interval]), - {ok, TRef} = timer:apply_interval(Interval * 500, - rabbit_peer_discovery_etcd, - update_node_key, []), - {ok, #state{timer_ref = TRef}} - end. - -handle_call(_Msg, _From, State) -> - {reply, not_understood, State}. - -handle_cast(_Msg, State) -> - {noreply, State}. - -handle_info(_MSg, State) -> - {noreply, State}. - -terminate(_Arg, #state{timer_ref = undefined}) -> - ok; - -terminate(_Arg, #state{timer_ref = TRef}) -> - timer:cancel(TRef), - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl index c852287..72c3ccd 100644 --- a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_sup.erl @@ -27,20 +27,32 @@ %% init([]) -> - Flags = #{strategy => one_for_one, intensity => 1, period => 1}, + Flags = #{strategy => one_for_one, intensity => 10, period => 1}, Fun0 = fun() -> {ok, {Flags, []}} end, Fun1 = fun() -> {ok, {Flags, []}} end, Fun2 = fun(_) -> - Specs = [#{id => rabbitmq_peer_discovery_etcd_health_check_helper, - start => {rabbitmq_peer_discovery_etcd_health_check_helper, start_link, []}, - restart => permanent, - shutdown => ?SUPERVISOR_WAIT, - type => worker, - modules => [rabbitmq_peer_discovery_etcd_health_check_helper] - }], - {ok, {Flags, Specs}} + %% we stop the previously started client and "re-attach" it. MK. + rabbitmq_peer_discovery_etcd_v3_client:stop(), + Formation = application:get_env(rabbit, cluster_formation, []), + Opts = maps:from_list(proplists:get_value(peer_discovery_etcd, Formation, [])), + EtcdClientFSM = #{ + id => rabbitmq_peer_discovery_etcd_v3_client, + start => {rabbitmq_peer_discovery_etcd_v3_client, start_link, [Opts]}, + restart => permanent, + shutdown => ?SUPERVISOR_WAIT, + type => worker, + modules => [rabbitmq_peer_discovery_etcd_v3_client] + }, + Specs = [ + EtcdClientFSM + ], + {ok, {Flags, Specs}} end, rabbit_peer_discovery_util:maybe_backend_configured(?BACKEND_CONFIG_KEY, Fun0, Fun1, Fun2). start_link() -> - supervisor:start_link({local, ?MODULE}, ?MODULE, []). + case supervisor:start_link({local, ?MODULE}, ?MODULE, []) of + {ok, Pid} -> {ok, Pid}; + {error, {already_started, Pid}} -> {ok, Pid}; + {error, _} = Err -> Err + end. diff --git a/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl new file mode 100644 index 0000000..09ea0a8 --- /dev/null +++ b/deps/rabbitmq_peer_discovery_etcd/src/rabbitmq_peer_discovery_etcd_v3_client.erl @@ -0,0 +1,448 @@ +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (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.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +%% License for the specific language governing rights and limitations +%% under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 VMware, Inc. or its affiliates. All rights reserved. +%% +-module(rabbitmq_peer_discovery_etcd_v3_client). + +%% API +-export([]). + + +-behaviour(gen_statem). + +-export([start_link/1, start/1, stop/0]). +-export([init/1, callback_mode/0, terminate/3]). +-export([register/1, register/0, unregister/1, unregister/0, list_nodes/0, list_nodes/1]). +-export([lock/0, lock/1, lock/2, unlock/0, unlock/1, unlock/2]). +-export([recover/3, connected/3, disconnected/3]). + +%% for tests +-export([extract_node/1, filter_node/1, registration_value/1, node_key_base/1, node_key/1, lock_key_base/1]). + +-import(rabbit_data_coercion, [to_binary/1, to_list/1]). + +-compile(nowarn_unused_function). + +-include("rabbit_peer_discovery_etcd.hrl"). + +%% +%% API +%% + +-define(ETCD_CONN_NAME, ?MODULE). +%% 60s by default matches the default heartbeat timeout. +%% We add 1s for state machine bookkeeping and +-define(DEFAULT_NODE_KEY_LEASE_TTL, 61). +%% don't allow node lease key TTL to be lower than this +%% as overly low values can cause annoying timeouts in etcd client operations +-define(MINIMUM_NODE_KEY_LEASE_TTL, 15). +%% default randomized delay range is 5s to 60s, so this value +%% produces a comparable delay +-define(DEFAULT_LOCK_WAIT_TTL, 70). +%% don't allow lock lease TTL to be lower than this +%% as overly low values can cause annoying timeouts in etcd client operations +-define(MINIMUM_LOCK_WAIT_TTL, 30). + +-define(CALL_TIMEOUT, 15000). + +start(Conf) -> + gen_statem:start({local, ?MODULE}, ?MODULE, Conf, []). + +start_link(Conf) -> + gen_statem:start_link({local, ?MODULE}, ?MODULE, Conf, []). + +stop() -> + gen_statem:stop(?MODULE). + +init(Args) -> + ok = application:ensure_started(eetcd), + Settings = normalize_settings(Args), + Endpoints = maps:get(endpoints, Settings), + Username = maps:get(etcd_username, Settings, undefined), + Password = maps:get(etcd_password, Settings, undefined), + TLSOpts = maps:get(ssl_options, Settings, []), + Actions = [{next_event, internal, start}], + {ok, recover, #statem_data{ + endpoints = Endpoints, + tls_options = TLSOpts, + username = Username, + obfuscated_password = obfuscate(Password), + key_prefix = maps:get(etcd_prefix, Settings, <<"rabbitmq">>), + node_key_ttl_in_seconds = erlang:max( + ?MINIMUM_NODE_KEY_LEASE_TTL, + maps:get(etcd_node_ttl, Settings, ?DEFAULT_NODE_KEY_LEASE_TTL) + ), + cluster_name = maps:get(cluster_name, Settings, <<"default">>), + lock_ttl_in_seconds = erlang:max( + ?MINIMUM_LOCK_WAIT_TTL, + maps:get(lock_wait_time, Settings, ?DEFAULT_LOCK_WAIT_TTL) + ) + }, Actions}. + +callback_mode() -> [state_functions, state_enter]. + +terminate(Reason, State, Data) -> + rabbit_log:debug("etcd v3 API client will terminate in state ~p, reason: ~p", + [State, Reason]), + disconnect(?ETCD_CONN_NAME, Data), + rabbit_log:debug("etcd v3 API client has disconnected"), + rabbit_log:debug("etcd v3 API client: total number of connections to etcd is ~p", [length(eetcd_conn_sup:info())]), + ok. + +register() -> + register(?MODULE). + +register(ServerRef) -> + gen_statem:call(ServerRef, register, ?CALL_TIMEOUT). + +unregister() -> + ?MODULE:unregister(?MODULE). + +unregister(ServerRef) -> + gen_statem:call(ServerRef, unregister, ?CALL_TIMEOUT). + +list_nodes() -> + list_nodes(?MODULE). + +list_nodes(ServerRef) -> + gen_statem:call(ServerRef, list_keys, ?CALL_TIMEOUT). + +lock() -> + lock(?MODULE, node()). + +lock(Node) -> + lock(?MODULE, Node). + +lock(ServerRef, Node) -> + gen_statem:call(ServerRef, {lock, Node}, ?CALL_TIMEOUT). + +unlock() -> + unlock(?MODULE, node()). + +unlock(LockKey) -> + unlock(?MODULE, LockKey). + +unlock(ServerRef, LockKey) -> + gen_statem:call(ServerRef, {unlock, LockKey}, ?CALL_TIMEOUT). + +%% +%% States +%% + +recover(enter, _PrevState, #statem_data{endpoints = Endpoints}) -> + rabbit_log:debug("etcd v3 API client has entered recovery state, endpoints: ~s", + [string:join(Endpoints, ",")]), + keep_state_and_data; +recover(internal, start, Data = #statem_data{endpoints = Endpoints, connection_monitor = Ref}) -> + rabbit_log:debug("etcd v3 API client will attempt to connect, endpoints: ~s", + [string:join(Endpoints, ",")]), + maybe_demonitor(Ref), + {Transport, TransportOpts} = pick_transport(Data), + case Transport of + tcp -> rabbit_log:info("etcd v3 API client is configured to connect over plain TCP, without using TLS"); + tls -> rabbit_log:info("etcd v3 API client is configured to use TLS") + end, + ConnName = ?ETCD_CONN_NAME, + case connect(ConnName, Endpoints, Transport, TransportOpts, Data) of + {ok, Pid} -> + rabbit_log:debug("etcd v3 API client connection: ~p", [Pid]), + rabbit_log:debug("etcd v3 API client: total number of connections to etcd is ~p", [length(eetcd_conn_sup:info())]), + {next_state, connected, Data#statem_data{ + connection_name = ConnName, + connection_pid = Pid, + connection_monitor = monitor(process, Pid) + }}; + {error, Errors} -> + [rabbit_log:error("etcd peer discovery: failed to connect to endpoint ~p: ~p", [Endpoint, Err]) || {Endpoint, Err} <- Errors], + ensure_disconnected(?ETCD_CONN_NAME, Data), + Actions = [{state_timeout, reconnection_interval(), recover}], + {keep_state, reset_statem_data(Data), Actions} + end; +recover(state_timeout, _PrevState, Data) -> + rabbit_log:debug("etcd peer discovery: connection entered a reconnection delay state"), + ensure_disconnected(?ETCD_CONN_NAME, Data), + {next_state, recover, reset_statem_data(Data)}; +recover({call, From}, Req, _Data) -> + rabbit_log:error("etcd v3 API: client received a call ~p while not connected, will do nothing", [Req]), + gen_statem:reply(From, {error, not_connected}), + keep_state_and_data. + + +connected(enter, _PrevState, Data) -> + rabbit_log:info("etcd peer discovery: successfully connected to etcd"), + + {keep_state, acquire_node_key_lease_grant(Data)}; +connected(info, {'DOWN', ConnRef, process, ConnPid, Reason}, Data = #statem_data{ + connection_pid = ConnPid, + connection_monitor = ConnRef + }) -> + rabbit_log:debug("etcd peer discovery: connection to etcd ~p is down: ~p", [ConnPid, Reason]), + maybe_demonitor(ConnRef), + {next_state, recover, reset_statem_data(Data)}; +connected({call, From}, {lock, _Node}, Data = #statem_data{connection_name = Conn, lock_ttl_in_seconds = TTL}) -> + case eetcd_lease:grant(eetcd_kv:new(Conn), TTL) of + {ok, #{'ID' := LeaseID}} -> + Key = lock_key_base(Data), + rabbit_log:debug("etcd peer discovery: granted a lease ~p for registration lock ~s with TTL = ~p", [LeaseID, Key, TTL]), + case eetcd_lock:lock(lock_context(Conn, Data), Key, LeaseID) of + {ok, #{key := GeneratedKey}} -> + rabbit_log:debug("etcd peer discovery: successfully acquired a lock, lock owner key: ~s", [GeneratedKey]), + reply_and_retain_state(From, {ok, GeneratedKey}); + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to acquire a lock using key ~s: ~p", [Key, Error]), + reply_and_retain_state(From, Error) + end; + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to get a lease for registration lock: ~p", [Error]), + reply_and_retain_state(From, Error) + end; +connected({call, From}, {unlock, GeneratedKey}, Data = #statem_data{connection_name = Conn}) -> + Ctx = unlock_context(Conn, Data), + case eetcd_lock:unlock(Ctx, GeneratedKey) of + {ok, _} -> + rabbit_log:debug("etcd peer discovery: successfully released lock, lock owner key: ~s", [GeneratedKey]), + reply_and_retain_state(From, ok); + {error, _} = Error -> + rabbit_log:debug("etcd peer discovery: failed to release registration lock, lock owner key: ~s, error ~p", + [GeneratedKey, Error]), + reply_and_retain_state(From, Error) + end; +connected({call, From}, register, Data = #statem_data{connection_name = Conn}) -> + Ctx = registration_context(Conn, Data), + Key = node_key(Data), + eetcd_kv:put(Ctx, Key, registration_value(Data)), + rabbit_log:debug("etcd peer discovery: put key ~p, done with registration", [Key]), + gen_statem:reply(From, ok), + keep_state_and_data; +connected({call, From}, unregister, Data = #statem_data{connection_name = Conn}) -> + unregister(Conn, Data), + gen_statem:reply(From, ok), + {keep_state, Data#statem_data{ + node_key_lease_id = undefined + }}; +connected({call, From}, list_keys, Data = #statem_data{connection_name = Conn}) -> + Prefix = node_key_base(Data), + C1 = eetcd_kv:new(Conn), + C2 = eetcd_kv:with_prefix(eetcd_kv:with_key(C1, Prefix)), + rabbit_log:debug("etcd peer discovery: will use prefix ~s to query for node keys", [Prefix]), + {ok, #{kvs := Result}} = eetcd_kv:get(C2), + rabbit_log:debug("etcd peer discovery returned keys: ~p", [Result]), + Values = [maps:get(value, M) || M <- Result], + case Values of + Xs when is_list(Xs) -> + rabbit_log:debug("etcd peer discovery: listing node keys returned ~b results", [length(Xs)]), + ParsedNodes = lists:map(fun extract_node/1, Xs), + {Successes, Failures} = lists:partition(fun filter_node/1, ParsedNodes), + JoinedString = lists:join(",", [rabbit_data_coercion:to_list(Node) || Node <- lists:usort(Successes)]), + rabbit_log:error("etcd peer discovery: successfully extracted nodes: ~s", [JoinedString]), + lists:foreach(fun(Val) -> + rabbit_log:error("etcd peer discovery: failed to extract node name from etcd value ~p", [Val]) + end, Failures), + gen_statem:reply(From, lists:usort(Successes)), + keep_state_and_data; + Other -> + rabbit_log:debug("etcd peer discovery: listing node keys returned ~p", [Other]), + gen_statem:reply(From, []), + keep_state_and_data + end. + +disconnected(enter, _PrevState, _Data) -> + rabbit_log:info("etcd peer discovery: successfully disconnected from etcd"), + keep_state_and_data. + + +%% +%% Implementation +%% + +acquire_node_key_lease_grant(Data = #statem_data{connection_name = Name, node_key_ttl_in_seconds = TTL}) -> + %% acquire a lease for TTL + {ok, #{'ID' := LeaseID}} = eetcd_lease:grant(Name, TTL), + {ok, KeepalivePid} = eetcd_lease:keep_alive(Name, LeaseID), + rabbit_log:debug("etcd peer discovery: acquired a lease ~p for node key ~s with TTL = ~p", [LeaseID, node_key(Data), TTL]), + Data#statem_data{ + node_key_lease_id = LeaseID, + node_lease_keepalive_pid = KeepalivePid + }. + +registration_context(ConnName, #statem_data{node_key_lease_id = LeaseID}) -> + Ctx1 = eetcd_kv:new(ConnName), + eetcd_kv:with_lease(Ctx1, LeaseID). + +unregistration_context(ConnName, _Data) -> + eetcd_kv:new(ConnName). + +lock_context(ConnName, #statem_data{lock_ttl_in_seconds = LeaseTTL}) -> + %% LeaseTT is in seconds, eetcd_lock:with_timeout/2 expects milliseconds + eetcd_lock:with_timeout(eetcd_lock:new(ConnName), LeaseTTL * 1000). + +unlock_context(ConnName, #statem_data{lock_ttl_in_seconds = Timeout}) -> + %% caps the timeout here using the lock TTL value, it makes more + %% sense than picking an arbitrary number. MK. + eetcd_lock:with_timeout(eetcd_lock:new(ConnName), Timeout * 1000). + +node_key_base(#statem_data{cluster_name = ClusterName, key_prefix = Prefix}) -> + to_binary(rabbit_misc:format("/rabbitmq/discovery/~s/clusters/~s/nodes", [Prefix, ClusterName])). + +node_key(Data) -> + to_binary(rabbit_misc:format("~s/~s", [node_key_base(Data), node()])). + +lock_key_base(#statem_data{key_prefix = Prefix, cluster_name = ClusterName}) -> + Key = rabbit_misc:format("/rabbitmq/locks/~s/clusters/~s/registration", + [Prefix, ClusterName]), + to_binary(Key). + +%% This value is not used and merely +%% provides additional context to the operator. +registration_value(#statem_data{node_key_lease_id = LeaseID, node_key_ttl_in_seconds = TTL}) -> + to_binary(rabbit_json:encode(#{ + <<"node">> => to_binary(node()), + <<"lease_id">> => LeaseID, + <<"ttl">> => TTL + })). + +-spec extract_node(binary()) -> atom() | {error, any()}. + +extract_node(Payload) -> + case rabbit_json:decode(Payload) of + {error, Error} -> {error, Error}; + Map -> + case maps:get(<<"node">>, Map, undefined) of + undefined -> undefined; + Node -> rabbit_data_coercion:to_atom(Node) + end + end. + +filter_node(undefined) -> false; +filter_node({error, _}) -> false; +filter_node(_Other) -> true. + + +error_is_already_started({_Endpoint, already_started}) -> + true; +error_is_already_started({_Endpoint, _}) -> + false. + +connect(Name, Endpoints, Transport, TransportOpts, Data) -> + case eetcd_conn:lookup(Name) of + {ok, Pid} when is_pid(Pid) -> + {ok, Pid}; + {error, eetcd_conn_unavailable} -> + do_connect(Name, Endpoints, Transport, TransportOpts, Data) + end. + +do_connect(Name, Endpoints, Transport, TransportOpts, Data = #statem_data{username = Username}) -> + case Username of + undefined -> rabbit_log:info("etcd peer discovery: will connect to etcd without authentication (no credentials configured)"); + _ -> rabbit_log:info("etcd peer discovery: will connect to etcd as user '~s'", [Username]) + end, + case eetcd:open(Name, Endpoints, connection_options(Data), Transport, TransportOpts) of + {ok, Pid} -> {ok, Pid}; + {error, Errors0} -> + Errors = case is_list(Errors0) of + true -> Errors0; + false -> [Errors0] + end, + rabbit_log:debug("etcd peer discovery: connection errors: ~p", + [Errors]), + rabbit_log:debug("etcd peer discovery: are all connection errors benign?: ~p", + [lists:all(fun error_is_already_started/1, Errors)]), + %% If all errors are already_started we can ignore them. + %% eetcd registers connections under a name + case lists:all(fun error_is_already_started/1, Errors) of + true -> + eetcd_conn:lookup(Name); + false -> + {error, Errors} + end + end. + +connection_options(#statem_data{username = Username, obfuscated_password = Password}) -> + SharedOpts = [{mode, random}], + case {Username, Password} of + {undefined, _} -> SharedOpts; + {_, undefined} -> SharedOpts; + {UVal, PVal} -> + [{name, UVal}, {password, to_list(deobfuscate(PVal))}] ++ SharedOpts + end. + + +obfuscate(undefined) -> undefined; +obfuscate(Password) -> + credentials_obfuscation:encrypt(to_binary(Password)). + +deobfuscate(undefined) -> undefined; +deobfuscate(Password) -> + credentials_obfuscation:decrypt(to_binary(Password)). + +disconnect(ConnName, #statem_data{connection_monitor = Ref}) -> + maybe_demonitor(Ref), + do_disconnect(ConnName). + +unregister(Conn, Data = #statem_data{node_key_lease_id = LeaseID, node_lease_keepalive_pid = KAPid}) -> + Ctx = unregistration_context(Conn, Data), + Key = node_key(Data), + eetcd_kv:delete(Ctx, Key), + rabbit_log:debug("etcd peer discovery: deleted key ~s, done with unregistration", [Key]), + eetcd_lease:revoke(Ctx, LeaseID), + exit(KAPid, normal), + rabbit_log:debug("etcd peer discovery: revoked a lease ~p for node key ~s", [LeaseID, Key]), + ok. + +reply_and_retain_state(From, Value) -> + gen_statem:reply(From, Value), + keep_state_and_data. + +maybe_demonitor(undefined) -> + true; +maybe_demonitor(Ref) when is_reference(Ref) -> + erlang:demonitor(Ref). + +reset_statem_data(Data0 = #statem_data{endpoints = Es, connection_monitor = Ref}) when Es =/= undefined -> + maybe_demonitor(Ref), + Data0#statem_data{ + connection_pid = undefined, + connection_monitor = undefined + }. + +ensure_disconnected(Name, #statem_data{connection_monitor = Ref}) -> + maybe_demonitor(Ref), + do_disconnect(Name). + +do_disconnect(Name) -> + try + eetcd:close(Name) + catch _:_ -> + ok + end. + +reconnection_interval() -> + 3000. + +normalize_settings(Map) when is_map(Map) -> + Endpoints = maps:get(endpoints, Map, []), + LegacyEndpoints = case maps:get(etcd_host, Map, undefined) of + undefined -> []; + Hostname -> + Port = maps:get(etcd_port, Map, 2379), + [rabbit_misc:format("~s:~p", [Hostname, Port])] + end, + + AllEndpoints = Endpoints ++ LegacyEndpoints, + maps:merge(maps:without([etcd_prefix, etcd_node_ttl, lock_wait_time], Map), + #{endpoints => AllEndpoints}). + +pick_transport(#statem_data{tls_options = []}) -> + {tcp, []}; +pick_transport(#statem_data{tls_options = Opts}) -> + {tls, Opts}. diff --git a/deps/rabbitmq_peer_discovery_k8s/erlang.mk b/deps/rabbitmq_peer_discovery_k8s/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_peer_discovery_k8s/erlang.mk +++ b/deps/rabbitmq_peer_discovery_k8s/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk b/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk +++ b/deps/rabbitmq_peer_discovery_k8s/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_prelaunch/Makefile b/deps/rabbitmq_prelaunch/Makefile new file mode 100644 index 0000000..572f770 --- /dev/null +++ b/deps/rabbitmq_prelaunch/Makefile @@ -0,0 +1,11 @@ +PROJECT = rabbitmq_prelaunch +PROJECT_DESCRIPTION = RabbitMQ prelaunch setup +PROJECT_VERSION = 1.0.0 +PROJECT_MOD = rabbit_prelaunch_app + +DEPS = rabbit_common lager + +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk + +include ../../rabbitmq-components.mk +include ../../erlang.mk diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl new file mode 100644 index 0000000..9adcc92 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state.erl @@ -0,0 +1,84 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2019-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state). + +-include_lib("eunit/include/eunit.hrl"). + +-export([get/0, + set/1, + wait_for/2]). + +-define(PT_KEY_BOOT_STATE, {?MODULE, boot_state}). + +-type boot_state() :: 'stopped' | 'booting' | 'ready' | 'stopping'. + +-export_type([boot_state/0]). + +-spec get() -> boot_state(). +get() -> + persistent_term:get(?PT_KEY_BOOT_STATE, stopped). + +-spec set(boot_state()) -> ok. +set(BootState) -> + rabbit_log_prelaunch:debug("Change boot state to `~s`", [BootState]), + ?assert(is_valid(BootState)), + case BootState of + stopped -> persistent_term:erase(?PT_KEY_BOOT_STATE); + _ -> persistent_term:put(?PT_KEY_BOOT_STATE, BootState) + end, + rabbit_boot_state_sup:notify_boot_state_listeners(BootState). + +-spec wait_for(boot_state(), timeout()) -> ok | {error, timeout}. +wait_for(BootState, infinity) -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, infinity) + end; +wait_for(BootState, Timeout) + when is_integer(Timeout) andalso Timeout >= 0 -> + case is_reached(BootState) of + true -> ok; + false -> Wait = 200, + timer:sleep(Wait), + wait_for(BootState, Timeout - Wait) + end; +wait_for(_, _) -> + {error, timeout}. + +boot_state_idx(stopped) -> 0; +boot_state_idx(booting) -> 1; +boot_state_idx(ready) -> 2; +boot_state_idx(stopping) -> 3. + +is_valid(BootState) -> + is_integer(boot_state_idx(BootState)). + +is_reached(TargetBootState) -> + is_reached(?MODULE:get(), TargetBootState). + +is_reached(CurrentBootState, CurrentBootState) -> + true; +is_reached(stopping, stopped) -> + false; +is_reached(_CurrentBootState, stopped) -> + true; +is_reached(stopped, _TargetBootState) -> + true; +is_reached(CurrentBootState, TargetBootState) -> + boot_state_idx(TargetBootState) =< boot_state_idx(CurrentBootState). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl new file mode 100644 index 0000000..44f421e --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_sup.erl @@ -0,0 +1,46 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_sup). +-behaviour(supervisor). + +-export([start_link/0, + init/1]). + +-export([notify_boot_state_listeners/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + SystemdSpec = #{id => rabbit_boot_state_systemd, + start => {rabbit_boot_state_systemd, start_link, []}, + restart => transient}, + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, + [SystemdSpec]}}. + +-spec notify_boot_state_listeners(rabbit_boot_state:boot_state()) -> ok. +notify_boot_state_listeners(BootState) -> + lists:foreach( + fun + ({_, Child, _, _}) when is_pid(Child) -> + gen_server:cast(Child, {notify_boot_state, BootState}); + (_) -> + ok + end, + supervisor:which_children(?MODULE)). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl new file mode 100644 index 0000000..7a94274 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_boot_state_systemd.erl @@ -0,0 +1,183 @@ +%%%------------------------------------------------------------------- +%% The contents of this file are subject to the Mozilla Public License +%% Version 1.1 (the "License"); you may not use this file except in +%% compliance with the License. You may obtain a copy of the License +%% at https://www.mozilla.org/MPL/ +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and +%% limitations under the License. +%% +%% The Original Code is RabbitMQ. +%% +%% Copyright (c) 2015-2020 Pivotal Software, Inc. All rights reserved. +%% + +-module(rabbit_boot_state_systemd). + +-behaviour(gen_server). + +-export([start_link/0]). + +-export([init/1, + handle_call/3, + handle_cast/2, + terminate/2, + code_change/3]). + +-record(state, {mechanism, + sd_notify_module, + socket}). + +-define(LOG_PREFIX, "Boot state/systemd: "). + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +init([]) -> + case os:type() of + {unix, _} -> + case code:load_file(sd_notify) of + {module, sd_notify} -> + {ok, #state{mechanism = legacy, + sd_notify_module = sd_notify}}; + {error, _} -> + case os:getenv("NOTIFY_SOCKET") of + false -> + ignore; + "" -> + ignore; + Socket -> + {ok, #state{mechanism = socat, + socket = Socket}} + end + end; + _ -> + ignore + end. + +handle_call(_Request, _From, State) -> + {noreply, State}. + +handle_cast({notify_boot_state, BootState}, State) -> + notify_boot_state(BootState, State), + {noreply, State}. + +terminate(normal, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%% Private + +notify_boot_state(ready = BootState, + #state{mechanism = legacy, sd_notify_module = SDNotify}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via native module)", + [BootState]), + sd_notify_legacy(SDNotify); +notify_boot_state(ready = BootState, + #state{mechanism = socat, socket = Socket}) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "notifying of state `~s` (via socat(1))", + [BootState]), + sd_notify_socat(Socket); +notify_boot_state(BootState, _) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "ignoring state `~s`", + [BootState]), + ok. + +sd_notify_message() -> + "READY=1\nSTATUS=Initialized\nMAINPID=" ++ os:getpid() ++ "\n". + +sd_notify_legacy(SDNotify) -> + SDNotify:sd_notify(0, sd_notify_message()). + +%% socat(1) is the most portable way the sd_notify could be +%% implemented in erlang, without introducing some NIF. Currently the +%% following issues prevent us from implementing it in a more +%% reasonable way: +%% - systemd-notify(1) is unstable for non-root users +%% - erlang doesn't support unix domain sockets. +%% +%% Some details on how we ended with such a solution: +%% https://github.com/rabbitmq/rabbitmq-server/issues/664 +sd_notify_socat(Socket) -> + case sd_current_unit() of + {ok, Unit} -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemd unit for activation check: \"~s\"~n", + [Unit]), + sd_notify_socat(Socket, Unit); + _ -> + ok + end. + +sd_notify_socat(Socket, Unit) -> + try sd_open_port(Socket) of + Port -> + Port ! {self(), {command, sd_notify_message()}}, + Result = sd_wait_activation(Port, Unit), + port_close(Port), + Result + catch + Class:Reason -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "Failed to start socat(1): ~p:~p~n", + [Class, Reason]), + false + end. + +sd_current_unit() -> + CmdOut = os:cmd("ps -o unit= -p " ++ os:getpid()), + Ret = (catch re:run(CmdOut, + "([-.@0-9a-zA-Z]+)", + [unicode, {capture, all_but_first, list}])), + case Ret of + {'EXIT', _} -> error; + {match, [Unit]} -> {ok, Unit}; + _ -> error + end. + +socat_socket_arg("@" ++ AbstractUnixSocket) -> + "abstract-sendto:" ++ AbstractUnixSocket; +socat_socket_arg(UnixSocket) -> + "unix-sendto:" ++ UnixSocket. + +sd_open_port(Socket) -> + open_port( + {spawn_executable, os:find_executable("socat")}, + [{args, [socat_socket_arg(Socket), "STDIO"]}, + use_stdio, out]). + +sd_wait_activation(Port, Unit) -> + case os:find_executable("systemctl") of + false -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "systemctl(1) unavailable, falling back to sleep~n"), + timer:sleep(5000), + ok; + _ -> + sd_wait_activation(Port, Unit, 10) + end. + +sd_wait_activation(_, _, 0) -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "service still in 'activating' state, bailing out~n"), + ok; +sd_wait_activation(Port, Unit, AttemptsLeft) -> + Ret = os:cmd("systemctl show --property=ActiveState -- '" ++ Unit ++ "'"), + case Ret of + "ActiveState=activating\n" -> + timer:sleep(1000), + sd_wait_activation(Port, Unit, AttemptsLeft - 1); + "ActiveState=" ++ _ -> + ok; + _ = Err -> + rabbit_log_prelaunch:debug( + ?LOG_PREFIX "unexpected status from systemd: ~p~n", [Err]), + ok + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl new file mode 100644 index 0000000..ef15f47 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch.erl @@ -0,0 +1,228 @@ +-module(rabbit_prelaunch). + +-include_lib("eunit/include/eunit.hrl"). + +-export([run_prelaunch_first_phase/0, + assert_mnesia_is_stopped/0, + get_context/0, + get_stop_reason/0, + set_stop_reason/1, + clear_stop_reason/0, + is_initial_pass/0, + initial_pass_finished/0, + shutdown_func/1]). + +-ifdef(TEST). +-export([store_context/1, + clear_context_cache/0]). +-endif. + +-define(PT_KEY_CONTEXT, {?MODULE, context}). +-define(PT_KEY_INITIAL_PASS, {?MODULE, initial_pass_finished}). +-define(PT_KEY_SHUTDOWN_FUNC, {?MODULE, chained_shutdown_func}). +-define(PT_KEY_STOP_REASON, {?MODULE, stop_reason}). + +run_prelaunch_first_phase() -> + try + do_run() + catch + throw:{error, _} = Error -> + rabbit_prelaunch_errors:log_error(Error), + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error; + Class:Exception:Stacktrace -> + rabbit_prelaunch_errors:log_exception( + Class, Exception, Stacktrace), + Error = {error, Exception}, + set_stop_reason(Error), + rabbit_boot_state:set(stopped), + Error + end. + +do_run() -> + %% Indicate RabbitMQ is booting. + clear_stop_reason(), + rabbit_boot_state:set(booting), + + %% Configure dbg if requested. + rabbit_prelaunch_early_logging:enable_quick_dbg(rabbit_env:dbg_config()), + + %% Setup signal handler. + ok = rabbit_prelaunch_sighandler:setup(), + + %% We assert Mnesia is stopped before we run the prelaunch + %% phases. + %% + %% We need this because our cluster consistency check (in the second + %% phase) depends on Mnesia not being started before it has a chance + %% to run. + %% + %% Also, in the initial pass, we don't want Mnesia to run before + %% Erlang distribution is configured. + assert_mnesia_is_stopped(), + + %% Get informations to setup logging. + Context0 = rabbit_env:get_context_before_logging_init(), + ?assertMatch(#{}, Context0), + + %% Setup logging for the prelaunch phase. + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context0, true), + + IsInitialPass = is_initial_pass(), + case IsInitialPass of + true -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug( + "== Prelaunch phase [1/2] (initial pass) =="), + rabbit_log_prelaunch:debug(""); + false -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Prelaunch phase [1/2] =="), + rabbit_log_prelaunch:debug("") + end, + rabbit_env:log_process_env(), + + %% Load rabbitmq-env.conf, redo logging setup and continue. + Context1 = rabbit_env:get_context_after_logging_init(Context0), + ?assertMatch(#{}, Context1), + ok = rabbit_prelaunch_early_logging:setup_early_logging(Context1, true), + rabbit_env:log_process_env(), + + %% Complete context now that we have the final environment loaded. + Context2 = rabbit_env:get_context_after_reloading_env(Context1), + ?assertMatch(#{}, Context2), + store_context(Context2), + rabbit_env:log_context(Context2), + ok = setup_shutdown_func(), + + Context = Context2#{initial_pass => IsInitialPass}, + + rabbit_env:context_to_code_path(Context), + rabbit_env:context_to_app_env_vars(Context), + + %% 1. Erlang/OTP compatibility check. + ok = rabbit_prelaunch_erlang_compat:check(Context), + + %% 2. Erlang distribution check + start. + ok = rabbit_prelaunch_dist:setup(Context), + + %% 3. Configuration check + loading. + ok = rabbit_prelaunch_conf:setup(Context), + + %% 4. Write PID file. + rabbit_log_prelaunch:debug(""), + _ = write_pid_file(Context), + ignore. + +assert_mnesia_is_stopped() -> + ?assertNot(lists:keymember(mnesia, 1, application:which_applications())). + +store_context(Context) when is_map(Context) -> + persistent_term:put(?PT_KEY_CONTEXT, Context). + +get_context() -> + case persistent_term:get(?PT_KEY_CONTEXT, undefined) of + undefined -> undefined; + Context -> Context#{initial_pass => is_initial_pass()} + end. + +-ifdef(TEST). +clear_context_cache() -> + persistent_term:erase(?PT_KEY_CONTEXT). +-endif. + +get_stop_reason() -> + persistent_term:get(?PT_KEY_STOP_REASON, undefined). + +set_stop_reason(Reason) -> + case get_stop_reason() of + undefined -> + rabbit_log_prelaunch:debug("Set stop reason to: ~p", [Reason]), + persistent_term:put(?PT_KEY_STOP_REASON, Reason); + _ -> + ok + end. + +clear_stop_reason() -> + persistent_term:erase(?PT_KEY_STOP_REASON). + +is_initial_pass() -> + not persistent_term:get(?PT_KEY_INITIAL_PASS, false). + +initial_pass_finished() -> + persistent_term:put(?PT_KEY_INITIAL_PASS, true). + +setup_shutdown_func() -> + ThisMod = ?MODULE, + ThisFunc = shutdown_func, + ExistingShutdownFunc = application:get_env(kernel, shutdown_func), + case ExistingShutdownFunc of + {ok, {ThisMod, ThisFunc}} -> + ok; + {ok, {ExistingMod, ExistingFunc}} -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1 " + "(chained with ~s:~s/1)", + [ThisMod, ThisFunc, ExistingMod, ExistingFunc]), + ok = persistent_term:put( + ?PT_KEY_SHUTDOWN_FUNC, + ExistingShutdownFunc), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc); + _ -> + rabbit_log_prelaunch:debug( + "Setting up kernel shutdown function: ~s:~s/1", + [ThisMod, ThisFunc]), + ok = record_kernel_shutdown_func(ThisMod, ThisFunc) + end. + +record_kernel_shutdown_func(Mod, Func) -> + application:set_env( + kernel, shutdown_func, {Mod, Func}, + [{persistent, true}]). + +shutdown_func(Reason) -> + rabbit_log_prelaunch:debug( + "Running ~s:shutdown_func() as part of `kernel` shutdown", [?MODULE]), + Context = get_context(), + remove_pid_file(Context), + ChainedShutdownFunc = persistent_term:get( + ?PT_KEY_SHUTDOWN_FUNC, + undefined), + case ChainedShutdownFunc of + {ChainedMod, ChainedFunc} -> ChainedMod:ChainedFunc(Reason); + _ -> ok + end. + +write_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Writing PID file: ~s", [PidFile]), + case filelib:ensure_dir(PidFile) of + ok -> + OSPid = os:getpid(), + case file:write_file(PidFile, OSPid) of + ok -> + ok; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to write PID file \"~s\": ~s", + [PidFile, file:format_error(Reason)]), + Error + end; + {error, Reason} = Error -> + rabbit_log_prelaunch:warning( + "Failed to create PID file \"~s\" directory: ~s", + [PidFile, file:format_error(Reason)]), + Error + end; +write_pid_file(_) -> + ok. + +remove_pid_file(#{pid_file := PidFile, keep_pid_file_on_exit := true}) -> + rabbit_log_prelaunch:debug("Keeping PID file: ~s", [PidFile]), + ok; +remove_pid_file(#{pid_file := PidFile}) -> + rabbit_log_prelaunch:debug("Deleting PID file: ~s", [PidFile]), + _ = file:delete(PidFile), + ok; +remove_pid_file(_) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl new file mode 100644 index 0000000..cef7f05 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_app.erl @@ -0,0 +1,11 @@ +-module(rabbit_prelaunch_app). +-behaviour(application). + +-export([start/2]). +-export([stop/1]). + +start(_Type, _Args) -> + rabbit_prelaunch_sup:start_link(). + +stop(_State) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl new file mode 100644 index 0000000..d2409f0 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -0,0 +1,503 @@ +-module(rabbit_prelaunch_conf). + +-include_lib("kernel/include/file.hrl"). +-include_lib("stdlib/include/zip.hrl"). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([setup/1, + get_config_state/0, + generate_config_from_cuttlefish_files/3, + decrypt_config/1]). + +-ifdef(TEST). +-export([decrypt_config/2]). +-endif. + +setup(Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Configuration =="), + + %% TODO: Check if directories/files are inside Mnesia dir. + + ok = set_default_config(), + + AdditionalConfigFiles = find_additional_config_files(Context), + AdvancedConfigFile = find_actual_advanced_config_file(Context), + State = case find_actual_main_config_file(Context) of + {MainConfigFile, erlang} -> + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + MainConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => MainConfigFile}; + {MainConfigFile, cuttlefish} -> + ConfigFiles = [MainConfigFile | AdditionalConfigFiles], + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdditionalConfigFiles =/= [] -> + ConfigFiles = AdditionalConfigFiles, + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdvancedConfigFile =/= undefined -> + rabbit_log_prelaunch:warning( + "Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s", + [AdvancedConfigFile]), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_files => AdditionalConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined -> + #{config_files => [], + config_advanced_file => undefined} + end, + ok = override_with_hard_coded_critical_config(), + ok = set_credentials_obfuscation_secret(), + rabbit_log_prelaunch:debug( + "Saving config state to application env: ~p", [State]), + store_config_state(State). + +store_config_state(ConfigState) -> + persistent_term:put({rabbitmq_prelaunch, config_state}, ConfigState). + +get_config_state() -> + persistent_term:get({rabbitmq_prelaunch, config_state}, undefined). + +%% ------------------------------------------------------------------- +%% Configuration loading. +%% ------------------------------------------------------------------- + +set_default_config() -> + rabbit_log_prelaunch:debug("Setting default config"), + Config = [ + {ra, + [ + {wal_max_size_bytes, 536870912}, %% 5 * 2 ^ 20 + {wal_max_batch_size, 4096} + ]}, + {sysmon_handler, + [{process_limit, 100}, + {port_limit, 100}, + {gc_ms_limit, 0}, + {schedule_ms_limit, 0}, + {heap_word_limit, 0}, + {busy_port, false}, + {busy_dist_port, true}]} + ], + apply_erlang_term_based_config(Config). + +find_actual_main_config_file(#{main_config_file := File}) -> + case filelib:is_regular(File) of + true -> + Format = case filename:extension(File) of + ".conf" -> cuttlefish; + ".config" -> erlang; + _ -> determine_config_format(File) + end, + {File, Format}; + false -> + OldFormatFile = File ++ ".config", + NewFormatFile = File ++ ".conf", + case filelib:is_regular(OldFormatFile) of + true -> + case filelib:is_regular(NewFormatFile) of + true -> + rabbit_log_prelaunch:warning( + "Both old (.config) and new (.conf) format config " + "files exist."), + rabbit_log_prelaunch:warning( + "Using the old format config file: ~s", + [OldFormatFile]), + rabbit_log_prelaunch:warning( + "Please update your config files to the new format " + "and remove the old file."), + ok; + false -> + ok + end, + {OldFormatFile, erlang}; + false -> + case filelib:is_regular(NewFormatFile) of + true -> {NewFormatFile, cuttlefish}; + false -> undefined + end + end + end. + +find_additional_config_files(#{additional_config_files := Pattern}) + when Pattern =/= undefined -> + Pattern1 = case filelib:is_dir(Pattern) of + true -> filename:join(Pattern, "*"); + false -> Pattern + end, + OnlyFiles = [File || + File <- filelib:wildcard(Pattern1), + filelib:is_regular(File)], + lists:sort(OnlyFiles); +find_additional_config_files(_) -> + []. + +find_actual_advanced_config_file(#{advanced_config_file := File}) -> + case filelib:is_regular(File) of + true -> File; + false -> undefined + end. + +determine_config_format(File) -> + case filelib:file_size(File) of + 0 -> + cuttlefish; + _ -> + case file:consult(File) of + {ok, _} -> erlang; + _ -> cuttlefish + end + end. + +load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile) -> + Config = generate_config_from_cuttlefish_files( + Context, ConfigFiles, AdvancedConfigFile), + apply_erlang_term_based_config(Config), + Config. + +generate_config_from_cuttlefish_files(Context, + ConfigFiles, + AdvancedConfigFile) -> + %% Load schemas. + SchemaFiles = find_cuttlefish_schemas(Context), + case SchemaFiles of + [] -> + rabbit_log_prelaunch:error( + "No configuration schema found~n", []), + throw({error, no_configuration_schema_found}); + _ -> + rabbit_log_prelaunch:debug( + "Configuration schemas found:~n", []), + lists:foreach( + fun(SchemaFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [SchemaFile]) + end, + SchemaFiles), + ok + end, + Schema = cuttlefish_schema:files(SchemaFiles), + + %% Load configuration. + rabbit_log_prelaunch:debug( + "Loading configuration files (Cuttlefish based):"), + lists:foreach( + fun(ConfigFile) -> + rabbit_log_prelaunch:debug(" - ~ts", [ConfigFile]) + end, ConfigFiles), + case cuttlefish_conf:files(ConfigFiles) of + {errorlist, Errors} -> + rabbit_log_prelaunch:error("Error parsing configuration:"), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)]) + end, Errors), + rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"), + throw({error, failed_to_parse_configuration_file}); + Config0 -> + %% Finalize configuration, based on the schema. + Config = case cuttlefish_generator:map(Schema, Config0) of + {error, Phase, {errorlist, Errors}} -> + %% TODO + rabbit_log_prelaunch:error( + "Error preparing configuration in phase ~ts:", + [Phase]), + lists:foreach( + fun(Error) -> + rabbit_log_prelaunch:error( + " - ~ts", + [cuttlefish_error:xlate(Error)]) + end, Errors), + throw( + {error, failed_to_prepare_configuration}); + ValidConfig -> + proplists:delete(vm_args, ValidConfig) + end, + + %% Apply advanced configuration overrides, if any. + override_with_advanced_config(Config, AdvancedConfigFile) + end. + +find_cuttlefish_schemas(Context) -> + Apps = list_apps(Context), + rabbit_log_prelaunch:debug( + "Looking up configuration schemas in the following applications:"), + find_cuttlefish_schemas(Apps, []). + +find_cuttlefish_schemas([App | Rest], AllSchemas) -> + Schemas = list_schemas_in_app(App), + find_cuttlefish_schemas(Rest, AllSchemas ++ Schemas); +find_cuttlefish_schemas([], AllSchemas) -> + lists:sort(fun(A,B) -> A < B end, AllSchemas). + +list_apps(#{os_type := {win32, _}, plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ";"), + list_apps1(PluginsDirs, []); +list_apps(#{plugins_path := PluginsPath}) -> + PluginsDirs = string:lexemes(PluginsPath, ":"), + list_apps1(PluginsDirs, []). + + +list_apps1([Dir | Rest], Apps) -> + case file:list_dir(Dir) of + {ok, Filenames} -> + NewApps = [list_to_atom( + hd( + string:split(filename:basename(F, ".ex"), "-"))) + || F <- Filenames], + Apps1 = lists:umerge(Apps, lists:sort(NewApps)), + list_apps1(Rest, Apps1); + {error, Reason} -> + rabbit_log_prelaunch:debug( + "Failed to list directory \"~ts\" content: ~ts", + [Dir, file:format_error(Reason)]), + list_apps1(Rest, Apps) + end; +list_apps1([], AppInfos) -> + AppInfos. + +list_schemas_in_app(App) -> + {Loaded, Unload} = case application:load(App) of + ok -> {true, true}; + {error, {already_loaded, _}} -> {true, false}; + {error, _} -> {false, false} + end, + List = case Loaded of + true -> + case code:priv_dir(App) of + {error, bad_name} -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable priv dir)", [App]), + []; + PrivDir -> + SchemaDir = filename:join([PrivDir, "schema"]), + do_list_schemas_in_app(App, SchemaDir) + end; + false -> + rabbit_log_prelaunch:debug( + " [ ] ~s (failed to load application)", [App]), + [] + end, + case Unload of + true -> _ = application:unload(App), + ok; + false -> ok + end, + List. + +do_list_schemas_in_app(App, SchemaDir) -> + case erl_prim_loader:list_dir(SchemaDir) of + {ok, Files} -> + rabbit_log_prelaunch:debug(" [x] ~s", [App]), + [filename:join(SchemaDir, File) + || [C | _] = File <- Files, + C =/= $.]; + error -> + rabbit_log_prelaunch:debug( + " [ ] ~s (no readable schema dir)", [App]), + [] + end. + +override_with_advanced_config(Config, undefined) -> + Config; +override_with_advanced_config(Config, AdvancedConfigFile) -> + rabbit_log_prelaunch:debug( + "Override with advanced configuration file \"~ts\"", + [AdvancedConfigFile]), + case file:consult(AdvancedConfigFile) of + {ok, [AdvancedConfig]} -> + cuttlefish_advanced:overlay(Config, AdvancedConfig); + {ok, OtherTerms} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\", " + "incorrect format: ~p", + [AdvancedConfigFile, OtherTerms]), + throw({error, failed_to_parse_advanced_configuration_file}); + {error, Reason} -> + rabbit_log_prelaunch:error( + "Failed to load advanced configuration file \"~ts\": ~ts", + [AdvancedConfigFile, file:format_error(Reason)]), + throw({error, failed_to_read_advanced_configuration_file}) + end. + +override_with_hard_coded_critical_config() -> + rabbit_log_prelaunch:debug("Override with hard-coded critical config"), + Config = [ + {ra, + %% Make Ra use a custom logger that dispatches to lager + %% instead of the default OTP logger + [{logger_module, rabbit_log_ra_shim}]} + ], + apply_erlang_term_based_config(Config). + +apply_erlang_term_based_config([{_, []} | Rest]) -> + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([{App, Vars} | Rest]) -> + rabbit_log_prelaunch:debug(" Applying configuration for '~s':", [App]), + ok = apply_app_env_vars(App, Vars), + apply_erlang_term_based_config(Rest); +apply_erlang_term_based_config([]) -> + ok. + +apply_app_env_vars(App, [{Var, Value} | Rest]) -> + rabbit_log_prelaunch:debug( + " - ~s = ~p", + [Var, Value]), + ok = application:set_env(App, Var, Value, [{persistent, true}]), + apply_app_env_vars(App, Rest); +apply_app_env_vars(_, []) -> + ok. + +set_credentials_obfuscation_secret() -> + rabbit_log_prelaunch:debug("Refreshing credentials obfuscation configuration from env: ~p", + [application:get_all_env(credentials_obfuscation)]), + ok = credentials_obfuscation:refresh_config(), + CookieBin = rabbit_data_coercion:to_binary(erlang:get_cookie()), + rabbit_log_prelaunch:debug( + "Setting credentials obfuscation secret to '~s'", [CookieBin]), + ok = credentials_obfuscation:set_secret(CookieBin). + +%% ------------------------------------------------------------------- +%% Config decryption. +%% ------------------------------------------------------------------- + +decrypt_config(Apps) -> + rabbit_log_prelaunch:debug("Decoding encrypted config values (if any)"), + ConfigEntryDecoder = application:get_env(rabbit, config_entry_decoder, []), + decrypt_config(Apps, ConfigEntryDecoder). + +decrypt_config([], _) -> + ok; +decrypt_config([App | Apps], Algo) -> + Algo1 = decrypt_app(App, application:get_all_env(App), Algo), + decrypt_config(Apps, Algo1). + +decrypt_app(_, [], Algo) -> + Algo; +decrypt_app(App, [{Key, Value} | Tail], Algo) -> + Algo2 = try + case decrypt(Value, Algo) of + {Value, Algo1} -> + Algo1; + {NewValue, Algo1} -> + rabbit_log_prelaunch:debug( + "Value of `~s` decrypted", [Key]), + ok = application:set_env(App, Key, NewValue, + [{persistent, true}]), + Algo1 + end + catch + throw:{bad_config_entry_decoder, _} = Error -> + throw(Error); + _:Msg -> + throw({config_decryption_error, {key, Key}, Msg}) + end, + decrypt_app(App, Tail, Algo2). + +decrypt({encrypted, _}=EncValue, {Cipher, Hash, Iterations, PassPhrase} = Algo) -> + {rabbit_pbe:decrypt_term(Cipher, Hash, Iterations, PassPhrase, EncValue), Algo}; +decrypt({encrypted, _}=EncValue, + ConfigEntryDecoder) + when is_list(ConfigEntryDecoder) -> + Algo = config_entry_decoder_to_algo(ConfigEntryDecoder), + decrypt(EncValue, Algo); +decrypt(List, Algo) when is_list(List) -> + decrypt_list(List, Algo, []); +decrypt(Value, Algo) -> + {Value, Algo}. + +%% We make no distinction between strings and other lists. +%% When we receive a string, we loop through each element +%% and ultimately return the string unmodified, as intended. +decrypt_list([], Algo, Acc) -> + {lists:reverse(Acc), Algo}; +decrypt_list([{Key, Value} | Tail], Algo, Acc) + when Key =/= encrypted -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [{Key, Value1} | Acc]); +decrypt_list([Value | Tail], Algo, Acc) -> + {Value1, Algo1} = decrypt(Value, Algo), + decrypt_list(Tail, Algo1, [Value1 | Acc]). + +config_entry_decoder_to_algo(ConfigEntryDecoder) -> + case get_passphrase(ConfigEntryDecoder) of + undefined -> + throw({bad_config_entry_decoder, missing_passphrase}); + PassPhrase -> + { + proplists:get_value( + cipher, ConfigEntryDecoder, rabbit_pbe:default_cipher()), + proplists:get_value( + hash, ConfigEntryDecoder, rabbit_pbe:default_hash()), + proplists:get_value( + iterations, ConfigEntryDecoder, rabbit_pbe:default_iterations()), + PassPhrase + } + end. + +get_passphrase(ConfigEntryDecoder) -> + rabbit_log_prelaunch:debug("Getting encrypted config passphrase"), + case proplists:get_value(passphrase, ConfigEntryDecoder) of + prompt -> + IoDevice = get_input_iodevice(), + ok = io:setopts(IoDevice, [{echo, false}]), + PP = lists:droplast(io:get_line(IoDevice, + "\nPlease enter the passphrase to unlock encrypted " + "configuration entries.\n\nPassphrase: ")), + ok = io:setopts(IoDevice, [{echo, true}]), + io:format(IoDevice, "~n", []), + PP; + {file, Filename} -> + {ok, File} = file:read_file(Filename), + [PP|_] = binary:split(File, [<<"\r\n">>, <<"\n">>]), + PP; + PP -> + PP + end. + +%% This function retrieves the correct IoDevice for requesting +%% input. The problem with using the default IoDevice is that +%% the Erlang shell prevents us from getting the input. +%% +%% Instead we therefore look for the io process used by the +%% shell and if it can't be found (because the shell is not +%% started e.g with -noshell) we use the 'user' process. +%% +%% This function will not work when either -oldshell or -noinput +%% options are passed to erl. +get_input_iodevice() -> + case whereis(user) of + undefined -> + user; + User -> + case group:interfaces(User) of + [] -> + user; + [{user_drv, Drv}] -> + case user_drv:interfaces(Drv) of + [] -> user; + [{current_group, IoDevice}] -> IoDevice + end + end + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl new file mode 100644 index 0000000..3d71843 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_dist.erl @@ -0,0 +1,104 @@ +-module(rabbit_prelaunch_dist). + +-export([setup/1]). + +setup(#{nodename := Node, nodename_type := NameType} = Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang distribution =="), + rabbit_log_prelaunch:debug("Rqeuested node name: ~s (type: ~s)", + [Node, NameType]), + case node() of + nonode@nohost -> + ok = rabbit_nodes_common:ensure_epmd(), + ok = dist_port_range_check(Context), + ok = dist_port_use_check(Context), + ok = duplicate_node_check(Context), + + ok = do_setup(Context); + Node -> + rabbit_log_prelaunch:debug( + "Erlang distribution already running", []), + ok; + Unexpected -> + throw({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) + end, + ok. + +do_setup(#{nodename := Node, nodename_type := NameType}) -> + rabbit_log_prelaunch:debug("Starting Erlang distribution", []), + case application:get_env(kernel, net_ticktime) of + {ok, Ticktime} when is_integer(Ticktime) andalso Ticktime >= 1 -> + %% The value passed to net_kernel:start/1 is the + %% "minimum transition traffic interval" as defined in + %% net_kernel:set_net_ticktime/1. + MTTI = Ticktime * 1000 div 4, + {ok, _} = net_kernel:start([Node, NameType, MTTI]), + ok; + _ -> + {ok, _} = net_kernel:start([Node, NameType]), + ok + end, + ok. + +%% Check whether a node with the same name is already running +duplicate_node_check(#{split_nodename := {NodeName, NodeHost}}) -> + rabbit_log_prelaunch:debug( + "Checking if node name ~s is already used", [NodeName]), + PrelaunchName = rabbit_nodes_common:make( + {NodeName ++ "_prelaunch_" ++ os:getpid(), + "localhost"}), + {ok, _} = net_kernel:start([PrelaunchName, shortnames]), + case rabbit_nodes_common:names(NodeHost) of + {ok, NamePorts} -> + case proplists:is_defined(NodeName, NamePorts) of + true -> + throw({error, {duplicate_node_name, NodeName, NodeHost}}); + false -> + ok = net_kernel:stop(), + ok + end; + {error, EpmdReason} -> + throw({error, {epmd_error, NodeHost, EpmdReason}}) + end. + +dist_port_range_check(#{erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is valid", [DistTcpPort]), + case DistTcpPort of + _ when DistTcpPort < 1 orelse DistTcpPort > 65535 -> + throw({error, {invalid_dist_port_range, DistTcpPort}}); + _ -> + ok + end. + +dist_port_use_check(#{split_nodename := {_, NodeHost}, + erlang_dist_tcp_port := DistTcpPort}) -> + rabbit_log_prelaunch:debug( + "Checking if TCP port ~b is available", [DistTcpPort]), + dist_port_use_check_ipv4(NodeHost, DistTcpPort). + +dist_port_use_check_ipv4(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, einval} -> dist_port_use_check_ipv6(NodeHost, Port); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +dist_port_use_check_ipv6(NodeHost, Port) -> + case gen_tcp:listen(Port, [inet6, {reuseaddr, true}]) of + {ok, Sock} -> gen_tcp:close(Sock); + {error, _} -> dist_port_use_check_fail(Port, NodeHost) + end. + +-spec dist_port_use_check_fail(non_neg_integer(), string()) -> + no_return(). + +dist_port_use_check_fail(Port, Host) -> + {ok, Names} = rabbit_nodes_common:names(Host), + case [N || {N, P} <- Names, P =:= Port] of + [] -> + throw({error, {dist_port_already_used, Port, not_erlang, Host}}); + [Name] -> + throw({error, {dist_port_already_used, Port, Name, Host}}) + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl new file mode 100644 index 0000000..4314222 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_early_logging.erl @@ -0,0 +1,109 @@ +-module(rabbit_prelaunch_early_logging). + +-include_lib("rabbit_common/include/rabbit_log.hrl"). + +-export([setup_early_logging/2, + enable_quick_dbg/1, + use_colored_logging/0, + use_colored_logging/1, + list_expected_sinks/0]). + +setup_early_logging(#{log_levels := undefined} = Context, + LagerEventToStdout) -> + setup_early_logging(Context#{log_levels => get_default_log_level()}, + LagerEventToStdout); +setup_early_logging(Context, LagerEventToStdout) -> + Configured = lists:member( + lager_util:make_internal_sink_name(rabbit_log_prelaunch), + lager:list_all_sinks()), + case Configured of + true -> ok; + false -> do_setup_early_logging(Context, LagerEventToStdout) + end. + +get_default_log_level() -> + #{"prelaunch" => warning}. + +do_setup_early_logging(#{log_levels := LogLevels} = Context, + LagerEventToStdout) -> + Colored = use_colored_logging(Context), + application:set_env(lager, colored, Colored), + ConsoleBackend = lager_console_backend, + case LagerEventToStdout of + true -> + GLogLevel = case LogLevels of + #{global := Level} -> Level; + _ -> warning + end, + _ = lager_app:start_handler( + lager_event, ConsoleBackend, [{level, GLogLevel}]), + ok; + false -> + ok + end, + lists:foreach( + fun(Sink) -> + CLogLevel = get_log_level(LogLevels, Sink), + lager_app:configure_sink( + Sink, + [{handlers, [{ConsoleBackend, [{level, CLogLevel}]}]}]) + end, list_expected_sinks()), + ok. + +use_colored_logging() -> + use_colored_logging(rabbit_prelaunch:get_context()). + +use_colored_logging(#{log_levels := #{color := true}, + output_supports_colors := true}) -> + true; +use_colored_logging(_) -> + false. + +list_expected_sinks() -> + Key = {?MODULE, lager_extra_sinks}, + case persistent_term:get(Key, undefined) of + undefined -> + CompileOptions = proplists:get_value(options, + module_info(compile), + []), + AutoList = [lager_util:make_internal_sink_name(M) + || M <- proplists:get_value(lager_extra_sinks, + CompileOptions, [])], + List = case lists:member(?LAGER_SINK, AutoList) of + true -> AutoList; + false -> [?LAGER_SINK | AutoList] + end, + %% Store the list in the application environment. If this + %% module is later cover-compiled, the compile option will + %% be lost, so we will be able to retrieve the list from the + %% application environment. + persistent_term:put(Key, List), + List; + List -> + List + end. + +sink_to_category(Sink) when is_atom(Sink) -> + re:replace( + atom_to_list(Sink), + "^rabbit_log_(.+)_lager_event$", + "\\1", + [{return, list}]). + +get_log_level(LogLevels, Sink) -> + Category = sink_to_category(Sink), + case LogLevels of + #{Category := Level} -> Level; + #{global := Level} -> Level; + _ -> warning + end. + +enable_quick_dbg(#{dbg_output := Output, dbg_mods := Mods}) -> + case Output of + stdout -> {ok, _} = dbg:tracer(), + ok; + _ -> {ok, _} = dbg:tracer(port, dbg:trace_port(file, Output)), + ok + end, + {ok, _} = dbg:p(all, c), + lists:foreach(fun(M) -> {ok, _} = dbg:tp(M, cx) end, Mods). diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl new file mode 100644 index 0000000..1e8fe26 --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_erlang_compat.erl @@ -0,0 +1,47 @@ +-module(rabbit_prelaunch_erlang_compat). + +-export([check/1]). + +-define(OTP_MINIMUM, "21.3"). +-define(ERTS_MINIMUM, "10.3"). + +check(_Context) -> + rabbit_log_prelaunch:debug(""), + rabbit_log_prelaunch:debug("== Erlang/OTP compatibility check =="), + + ERTSVer = erlang:system_info(version), + OTPRel = rabbit_misc:otp_release(), + rabbit_log_prelaunch:debug( + "Requiring: Erlang/OTP ~s (ERTS ~s)", [?OTP_MINIMUM, ?ERTS_MINIMUM]), + rabbit_log_prelaunch:debug( + "Running: Erlang/OTP ~s (ERTS ~s)", [OTPRel, ERTSVer]), + + case rabbit_misc:version_compare(?ERTS_MINIMUM, ERTSVer, lte) of + true when ?ERTS_MINIMUM =/= ERTSVer -> + rabbit_log_prelaunch:debug( + "Erlang/OTP version requirement satisfied"), + ok; + true when ?ERTS_MINIMUM =:= ERTSVer andalso ?OTP_MINIMUM =< OTPRel -> + %% When a critical regression or bug is found, a new OTP + %% release can be published without changing the ERTS + %% version. For instance, this is the case with R16B03 and + %% R16B03-1. + %% + %% In this case, we compare the release versions + %% alphabetically. + ok; + _ -> + Msg = + "This RabbitMQ version cannot run on Erlang ~s (erts ~s): " + "minimum required version is ~s (erts ~s)", + Args = [OTPRel, ERTSVer, ?OTP_MINIMUM, ?ERTS_MINIMUM], + rabbit_log_prelaunch:error(Msg, Args), + + %% Also print to stderr to make this more visible + io:format(standard_error, "Error: " ++ Msg ++ "~n", Args), + + Msg2 = rabbit_misc:format( + "Erlang ~s or later is required, started on ~s", + [?OTP_MINIMUM, OTPRel]), + throw({error, {erlang_version_too_old, Msg2}}) + end. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl new file mode 100644 index 0000000..2a2eb2b --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_errors.erl @@ -0,0 +1,112 @@ +-module(rabbit_prelaunch_errors). + +-export([format_error/1, + format_exception/3, + log_error/1, + log_exception/3]). + +-define(BOOT_FAILED_HEADER, + "\n" + "BOOT FAILED\n" + "===========\n"). + +-define(BOOT_FAILED_FOOTER, + "\n"). + +log_error(Error) -> + Message = format_error(Error), + log_message(Message). + +format_error({error, {duplicate_node_name, NodeName, NodeHost}}) -> + rabbit_misc:format( + "ERROR: node with name ~p already running on ~p", + [NodeName, NodeHost]); +format_error({error, {epmd_error, NodeHost, EpmdReason}}) -> + rabbit_misc:format( + "ERROR: epmd error for host ~s: ~s", + [NodeHost, rabbit_misc:format_inet_error(EpmdReason)]); +format_error({error, {invalid_dist_port_range, DistTcpPort}}) -> + rabbit_misc:format( + "Invalid Erlang distribution TCP port: ~b", [DistTcpPort]); +format_error({error, {dist_port_already_used, Port, not_erlang, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use on ~s " + "(by non-Erlang process?)", [Port, Host]); +format_error({error, {dist_port_already_used, Port, Name, Host}}) -> + rabbit_misc:format( + "ERROR: distribution port ~b in use by ~s@~s", [Port, Name, Host]); +format_error({error, {erlang_dist_running_with_unexpected_nodename, + Unexpected, Node}}) -> + rabbit_misc:format( + "Erlang distribution running with another node name (~s) " + "than the configured one (~s)", + [Unexpected, Node]); +format_error({bad_config_entry_decoder, missing_passphrase}) -> + rabbit_misc:format( + "Missing passphrase or missing passphrase read method in " + "`config_entry_decoder`", []); +format_error({config_decryption_error, {key, Key}, _Msg}) -> + rabbit_misc:format( + "Error while decrypting key '~p'. Please check encrypted value, " + "passphrase, and encryption configuration~n", + [Key]); +format_error({error, {timeout_waiting_for_tables, AllNodes, _}}) -> + Suffix = + "~nBACKGROUND~n==========~n~n" + "This cluster node was shut down while other nodes were still running.~n" + "To avoid losing data, you should start the other nodes first, then~n" + "start this one. To force this node to start, first invoke~n" + "\"rabbitmqctl force_boot\". If you do so, any changes made on other~n" + "cluster nodes after this one was shut down may be lost.", + {Message, Nodes} = + case AllNodes -- [node()] of + [] -> {rabbit_misc:format( + "Timeout contacting cluster nodes. Since RabbitMQ was" + " shut down forcefully~nit cannot determine which nodes" + " are timing out.~n" ++ Suffix, []), + []}; + Ns -> {rabbit_misc:format( + "Timeout contacting cluster nodes: ~p.~n" ++ Suffix, + [Ns]), + Ns} + end, + Message ++ "\n" ++ rabbit_nodes_common:diagnostics(Nodes); +format_error({error, {cannot_log_to_file, unknown, Reason}}) -> + rabbit_misc:format( + "failed to initialised logger: ~p~n", + [Reason]); +format_error({error, {cannot_log_to_file, LogFile, + {cannot_create_parent_dirs, _, Reason}}}) -> + rabbit_misc:format( + "failed to create parent directory for log file at '~s', reason: ~s~n", + [LogFile, file:format_error(Reason)]); +format_error({error, {cannot_log_to_file, LogFile, Reason}}) -> + rabbit_misc:format( + "failed to open log file at '~s', reason: ~s", + [LogFile, file:format_error(Reason)]); +format_error(Error) -> + rabbit_misc:format("Error during startup: ~p", [Error]). + +log_exception(Class, Exception, Stacktrace) -> + Message = format_exception(Class, Exception, Stacktrace), + log_message(Message). + +format_exception(Class, Exception, Stacktrace) -> + rabbit_misc:format( + "Exception during startup:~n~s", + [lager:pr_stacktrace(Stacktrace, {Class, Exception})]). + +log_message(Message) -> + Lines = string:split( + ?BOOT_FAILED_HEADER ++ + Message ++ + ?BOOT_FAILED_FOOTER, + [$\n], + all), + lists:foreach( + fun(Line) -> + rabbit_log_prelaunch:error("~s", [Line]), + io:format(standard_error, "~s~n", [Line]) + end, Lines), + timer:sleep(1000), + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl new file mode 100644 index 0000000..f9a60ef --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sighandler.erl @@ -0,0 +1,93 @@ +-module(rabbit_prelaunch_sighandler). +-behaviour(gen_event). + +-export([setup/0, + init/1, + handle_event/2, + handle_call/2, + handle_info/2, + terminate/2, + code_change/3]). + +%% CAUTION: Signal handling in this module must be kept consistent +%% with the same handling in rabbitmq-server(8). + +%% #{signal => default | ignore | stop}. +-define(SIGNALS_HANDLED_BY_US, + #{ + %% SIGHUP is often used to reload the configuration or reopen + %% log files after they were rotated. We don't support any + %% of those two cases, so ignore it for now, until we can do + %% something about it. + sighup => ignore, + + %% SIGTSTP is triggered by Ctrl+Z to pause a program. However + %% we can't handle SIGCONT, the signal used to resume the + %% program. Unfortunately, it makes a SIGTSTP handler less + %% useful here. + sigtstp => ignore + }). + +-define(SIGNAL_HANDLED_BY_ERLANG(Signal), + Signal =:= sigusr1 orelse + Signal =:= sigquit orelse + Signal =:= sigterm). + +-define(SERVER, erl_signal_server). + +setup() -> + case os:type() of + {unix, _} -> + case whereis(?SERVER) of + undefined -> + ok; + _ -> + case lists:member(?MODULE, gen_event:which_handlers(?SERVER)) of + true -> ok; + false -> gen_event:add_handler(?SERVER, ?MODULE, []) + end + end; + _ -> + ok + end. + +init(_Args) -> + maps:fold( + fun + (Signal, _, Ret) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> Ret; + (Signal, default, ok) -> os:set_signal(Signal, default); + (Signal, ignore, ok) -> os:set_signal(Signal, ignore); + (Signal, _, ok) -> os:set_signal(Signal, handle) + end, ok, ?SIGNALS_HANDLED_BY_US), + {ok, #{}}. + +handle_event(Signal, State) when ?SIGNAL_HANDLED_BY_ERLANG(Signal) -> + {ok, State}; +handle_event(Signal, State) -> + case ?SIGNALS_HANDLED_BY_US of + %% The code below can be uncommented if we introduce a signal + %% which should stop RabbitMQ. + % + %#{Signal := stop} -> + % error_logger:info_msg( + % "~s received - shutting down~n", + % [string:uppercase(atom_to_list(Signal))]), + % ok = init:stop(); + _ -> + error_logger:info_msg( + "~s received - unhandled signal~n", + [string:uppercase(atom_to_list(Signal))]) + end, + {ok, State}. + +handle_info(_, State) -> + {ok, State}. + +handle_call(_, State) -> + {ok, ok, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Args, _State) -> + ok. diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl new file mode 100644 index 0000000..9fd117d --- /dev/null +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_sup.erl @@ -0,0 +1,22 @@ +-module(rabbit_prelaunch_sup). +-behaviour(supervisor). + +-export([start_link/0]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +init([]) -> + BootStateSup = #{id => bootstate, + start => {rabbit_boot_state_sup, start_link, []}, + type => supervisor}, + %% `rabbit_prelaunch` does not start a process, it only configures + %% the node. + Prelaunch = #{id => prelaunch, + start => {rabbit_prelaunch, run_prelaunch_first_phase, []}, + restart => transient}, + Procs = [BootStateSup, Prelaunch], + {ok, {#{strategy => one_for_one, + intensity => 1, + period => 5}, Procs}}. diff --git a/deps/rabbitmq_prometheus/Dockerfile b/deps/rabbitmq_prometheus/Dockerfile index 240a706..61a4683 100644 --- a/deps/rabbitmq_prometheus/Dockerfile +++ b/deps/rabbitmq_prometheus/Dockerfile @@ -19,8 +19,8 @@ ARG PGP_KEYSERVER=ha.pool.sks-keyservers.net # For context, see https://github.com/docker-library/official-images/issues/4252 # Using the latest OpenSSL LTS release, with support until September 2023 - https://www.openssl.org/source/ -ENV OPENSSL_VERSION 1.1.1d -ENV OPENSSL_SOURCE_SHA256="1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2" +ENV OPENSSL_VERSION 1.1.1g +ENV OPENSSL_SOURCE_SHA256="ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46" # https://www.openssl.org/community/omc.html ENV OPENSSL_PGP_KEY_IDS="0x8657ABB260F056B1E5190839D9C4D26D0E604491 0x5B2545DAB21995F4088CEFAA36CEE4DEB00CFE33 0xED230BEC4D4F2518B9D7DF41F0DB4D21C1D35231 0xC1F33DD8CE1D4CC613AF14DA9195C48241FBF7DD 0x7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C 0xE5E52560DD91C556DDBDA5D02064C53641C25E5D" @@ -290,7 +290,7 @@ RUN set -eux; \ ' -- /plugins/rabbitmq_management-*.ez > /usr/local/bin/rabbitmqadmin; \ [ -s /usr/local/bin/rabbitmqadmin ]; \ chmod +x /usr/local/bin/rabbitmqadmin; \ - apt-get update; apt-get install -y --no-install-recommends python; rm -rf /var/lib/apt/lists/*; \ + apt-get update; apt-get install -y --no-install-recommends python3; rm -rf /var/lib/apt/lists/*; \ rabbitmqadmin --version EXPOSE 15671 15672 diff --git a/deps/rabbitmq_prometheus/Makefile b/deps/rabbitmq_prometheus/Makefile index e37dfc0..84c876b 100644 --- a/deps/rabbitmq_prometheus/Makefile +++ b/deps/rabbitmq_prometheus/Makefile @@ -1,15 +1,15 @@ TODAY := $(shell date -u +'%Y.%m.%d') # Use the latest alpha RabbitMQ 3.8 release - https://ci.rabbitmq.com/teams/main/pipelines/server-release:v3.8.x/jobs/build-test-package-generic-unix-latest-toolchain -BASED_ON_RABBITMQ_VERSION := 3.8.3-alpha.93 +BASED_ON_RABBITMQ_VERSION := 3.8.4-alpha.23 DOCKER_IMAGE_NAME := pivotalrabbitmq/rabbitmq-prometheus DOCKER_IMAGE_VERSION := $(BASED_ON_RABBITMQ_VERSION)-$(TODAY) # RABBITMQ_VERSION is used in rabbitmq-components.mk to set PROJECT_VERSION RABBITMQ_VERSION ?= $(DOCKER_IMAGE_VERSION) # This is taken from the CI job above -RABBITMQ_BUILD_NUMBER := 880 +RABBITMQ_BUILD_NUMBER := 941 # make find-latest-otp -OTP_VERSION := 22.2.6 -OTP_SHA256 := 4cf44ed12f657c309a2c00e7806f36f56a88e5b74de6814058796561f3842f66 +OTP_VERSION := 22.3.2 +OTP_SHA256 := 4a3719c71a7998e4f57e73920439b4b1606f7c045e437a0f0f9f1613594d3eaa define PROJECT_ENV [ @@ -120,7 +120,7 @@ dib: docker-image-build docker-image-bump: ## diu | Bump Docker image version across all docker-compose-* files @sed -i '' \ -e 's|$(DOCKER_IMAGE_NAME):.*|$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_VERSION)|g' \ - -e 's|pivotalrabbitmq/perf-test:.*|pivotalrabbitmq/perf-test:2.10.0-ubuntu|g' \ + -e 's|pivotalrabbitmq/perf-test:.*|pivotalrabbitmq/perf-test:2.11.0-ubuntu|g' \ docker/docker-compose-{overview,dist-tls,qq}.yml .PHONY: diu diu: docker-image-bump diff --git a/deps/rabbitmq_prometheus/README.md b/deps/rabbitmq_prometheus/README.md index a8ed8b1..39e2209 100644 --- a/deps/rabbitmq_prometheus/README.md +++ b/deps/rabbitmq_prometheus/README.md @@ -21,14 +21,22 @@ This plugin is included into RabbitMQ 3.8.x releases. Like all [plugins](https:/ To enable it with [rabbitmq-plugins](http://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html): - rabbitmq-plugins enable rabbitmq_prometheus +``` shell +rabbitmq-plugins enable rabbitmq_prometheus +``` ## Usage See the [documentation guide](https://www.rabbitmq.com/prometheus.html). -Default port used by the plugin is `15692`. In most environments there would be no configuration -necessary. +Default port used by the plugin is `15692` and the endpoint path is at `/metrics`. +To try it with `curl`: + +```shell +curl -v -H "Accept:text/plain" "http://localhost:15692/metrics" +``` + +In most environments there would be no configuration necessary. See the entire list of [metrics](metrics.md) exposed via the default port. diff --git a/deps/rabbitmq_prometheus/erlang.mk b/deps/rabbitmq_prometheus/erlang.mk index f9d7c8d..4134991 100644 --- a/deps/rabbitmq_prometheus/erlang.mk +++ b/deps/rabbitmq_prometheus/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = plugins/proper plugins/protobuffs # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -7477,3 +7548,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_prometheus/rabbitmq-components.mk b/deps/rabbitmq_prometheus/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_prometheus/rabbitmq-components.mk +++ b/deps/rabbitmq_prometheus/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl index 13cdacc..cf20ac6 100644 --- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl +++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_app.erl @@ -25,6 +25,7 @@ -define(TCP_CONTEXT, rabbitmq_prometheus_tcp). -define(TLS_CONTEXT, rabbitmq_prometheus_tls). -define(DEFAULT_PORT, 15692). +-define(DEFAULT_TLS_PORT, 15691). start(_Type, _StartArgs) -> %% TCP listener uses prometheus.tcp.*. @@ -41,20 +42,33 @@ init(_) -> -spec start_configured_listener() -> ok. start_configured_listener() -> - Listeners = case {has_configured_tcp_listener(), - has_configured_tls_listener()} of - {false, false} -> - %% nothing is configured - [get_tcp_listener()]; - {false, true} -> - [get_tls_listener()]; - {true, false} -> - [get_tcp_listener()]; - {true, true} -> - [get_tcp_listener(), - get_tls_listener()] - end, - [ start_listener(Listener) || Listener <- Listeners ]. + Listeners0 = case {has_configured_tcp_listener(), + has_configured_tls_listener()} of + {false, false} -> + %% nothing is configured + [get_tcp_listener()]; + {false, true} -> + [get_tls_listener()]; + {true, false} -> + [get_tcp_listener()]; + {true, true} -> + [get_tcp_listener(), + get_tls_listener()] + end, + Listeners1 = maybe_disable_sendfile(Listeners0), + [start_listener(Listener) || Listener <- Listeners1]. + +maybe_disable_sendfile(Listeners) -> + DisableSendfile = #{sendfile => false}, + F = fun(L0) -> + CowboyOptsL0 = proplists:get_value(cowboy_opts, L0, []), + CowboyOptsM0 = maps:from_list(CowboyOptsL0), + CowboyOptsM1 = maps:merge(DisableSendfile, CowboyOptsM0), + CowboyOptsL1 = maps:to_list(CowboyOptsM1), + L1 = lists:keydelete(cowboy_opts, 1, L0), + [{cowboy_opts, CowboyOptsL1}|L1] + end, + lists:map(F, Listeners). has_configured_tcp_listener() -> has_configured_listener(tcp_config). @@ -70,34 +84,48 @@ has_configured_listener(Key) -> get_tls_listener() -> {ok, Listener0} = application:get_env(rabbitmq_prometheus, ssl_config), - [{ssl, true} | Listener0]. + case proplists:get_value(cowboy_opts, Listener0) of + undefined -> + [{ssl, true}, {ssl_opts, Listener0}]; + CowboyOpts -> + Listener1 = lists:keydelete(cowboy_opts, 1, Listener0), + [{ssl, true}, {ssl_opts, Listener1}, {cowboy_opts, CowboyOpts}] + end. get_tcp_listener() -> application:get_env(rabbitmq_prometheus, tcp_config, []). -start_listener(Listener) -> - {Type, ContextName, Protocol} = case is_tls(Listener) of +start_listener(Listener0) -> + {Type, ContextName, Protocol} = case is_tls(Listener0) of true -> {tls, ?TLS_CONTEXT, 'https/prometheus'}; false -> {tcp, ?TCP_CONTEXT, 'http/prometheus'} end, - {ok, _} = register_context(ContextName, Protocol, Listener), - log_startup(Type, Listener). + {ok, Listener1} = ensure_port_and_protocol(Type, Protocol, Listener0), + {ok, _} = register_context(ContextName, Listener1), + log_startup(Type, Listener1). -register_context(ContextName, Protocol, Listener0) -> - M0 = maps:from_list(Listener0), - %% include default port if it's not provided in the config - %% as Cowboy won't start if the port is missing - M1 = maps:merge(#{port => ?DEFAULT_PORT, - protocol => Protocol}, M0), +register_context(ContextName, Listener) -> + Dispatcher = rabbit_prometheus_dispatcher:build_dispatcher(), rabbit_web_dispatch:register_context_handler( - ContextName, maps:to_list(M1), "", - rabbit_prometheus_dispatcher:build_dispatcher(), - "RabbitMQ Prometheus"). + ContextName, Listener, "", + Dispatcher, "RabbitMQ Prometheus"). unregister_all_contexts() -> rabbit_web_dispatch:unregister_context(?TCP_CONTEXT), rabbit_web_dispatch:unregister_context(?TLS_CONTEXT). +ensure_port_and_protocol(tls, Protocol, Listener) -> + do_ensure_port_and_protocol(?DEFAULT_TLS_PORT, Protocol, Listener); +ensure_port_and_protocol(tcp, Protocol, Listener) -> + do_ensure_port_and_protocol(?DEFAULT_PORT, Protocol, Listener). + +do_ensure_port_and_protocol(Port, Protocol, Listener) -> + %% include default port if it's not provided in the config + %% as Cowboy won't start if the port is missing + M0 = maps:from_list(Listener), + M1 = maps:merge(#{port => Port, protocol => Protocol}, M0), + {ok, maps:to_list(M1)}. + log_startup(tcp, Listener) -> rabbit_log:info("Prometheus metrics: HTTP (non-TLS) listener started on port ~w", [port(Listener)]); log_startup(tls, Listener) -> diff --git a/deps/rabbitmq_random_exchange/erlang.mk b/deps/rabbitmq_random_exchange/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_random_exchange/erlang.mk +++ b/deps/rabbitmq_random_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_random_exchange/rabbitmq-components.mk b/deps/rabbitmq_random_exchange/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_random_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_random_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_recent_history_exchange/erlang.mk b/deps/rabbitmq_recent_history_exchange/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_recent_history_exchange/erlang.mk +++ b/deps/rabbitmq_recent_history_exchange/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk b/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk +++ b/deps/rabbitmq_recent_history_exchange/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_sharding/erlang.mk b/deps/rabbitmq_sharding/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_sharding/erlang.mk +++ b/deps/rabbitmq_sharding/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_sharding/rabbitmq-components.mk b/deps/rabbitmq_sharding/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_sharding/rabbitmq-components.mk +++ b/deps/rabbitmq_sharding/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_shovel/erlang.mk b/deps/rabbitmq_shovel/erlang.mk index 1195106..83988d3 100644 --- a/deps/rabbitmq_shovel/erlang.mk +++ b/deps/rabbitmq_shovel/erlang.mk @@ -17,7 +17,7 @@ ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST))) export ERLANG_MK_FILENAME -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957 +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a ERLANG_MK_WITHOUT = # Make 3.81 and 3.82 are deprecated. @@ -66,7 +66,7 @@ export ERLANG_MK_TMP # "erl" command. -ERL = erl +A0 -noinput -boot start_clean +ERL = erl +A1 -noinput -boot no_dot_erlang # Platform detection. @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master PACKAGES += elli pkg_elli_name = elli pkg_elli_description = Simple, robust and performant Erlang web server -pkg_elli_homepage = https://github.com/knutin/elli +pkg_elli_homepage = https://github.com/elli-lib/elli pkg_elli_fetch = git -pkg_elli_repo = https://github.com/knutin/elli +pkg_elli_repo = https://github.com/elli-lib/elli pkg_elli_commit = master PACKAGES += elvis @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master PACKAGES += mysql pkg_mysql_name = mysql -pkg_mysql_description = Erlang MySQL Driver (from code.google.com) -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver +pkg_mysql_description = MySQL client library for Erlang/OTP +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp pkg_mysql_fetch = git -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver -pkg_mysql_commit = master +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp +pkg_mysql_commit = 1.5.1 PACKAGES += n2o pkg_n2o_name = n2o @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git pkg_parsexml_repo = https://github.com/maxlapshin/parsexml pkg_parsexml_commit = master +PACKAGES += partisan +pkg_partisan_name = partisan +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir. +pkg_partisan_homepage = http://partisan.cloud +pkg_partisan_fetch = git +pkg_partisan_repo = https://github.com/lasp-lang/partisan +pkg_partisan_commit = master + PACKAGES += pegjs pkg_pegjs_name = pegjs pkg_pegjs_description = An implementation of PEG.js grammar for Erlang. @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git pkg_procket_repo = https://github.com/msantos/procket pkg_procket_commit = master +PACKAGES += prometheus +pkg_prometheus_name = prometheus +pkg_prometheus_description = Prometheus.io client in Erlang +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_fetch = git +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl +pkg_prometheus_commit = master + PACKAGES += prop pkg_prop_name = prop pkg_prop_description = An Erlang code scaffolding and generator system. @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\ $(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\ $(call core_dep_plugin,$p/early-plugins.mk,$p)))) -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \ - $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))) +# Query functions. + +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1))) +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail)) +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail) + +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1))) + +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1))) +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1))) + +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)) +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1))) +query_repo_git-subfolder = $(call query_repo_git,$(1)) +query_repo_git-submodule = - +query_repo_hg = $(call query_repo_default,$(1)) +query_repo_svn = $(call query_repo_default,$(1)) +query_repo_cp = $(call query_repo_default,$(1)) +query_repo_ln = $(call query_repo_default,$(1)) +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1)) +query_repo_fail = - +query_repo_legacy = - + +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1))) +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1))) + +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_git = $(call query_version_default,$(1)) +query_version_git-subfolder = $(call query_version_git,$(1)) +query_version_git-submodule = - +query_version_hg = $(call query_version_default,$(1)) +query_version_svn = - +query_version_cp = - +query_version_ln = - +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit))) +query_version_fail = - +query_version_legacy = - + +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1))) +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-) + +query_extra_git = - +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-) +query_extra_git-submodule = - +query_extra_hg = - +query_extra_svn = - +query_extra_cp = - +query_extra_ln = - +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-) +query_extra_fail = - +query_extra_legacy = - + +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1))) + +# Deprecated legacy query functions. +dep_fetch = $(call query_fetch_method,$(1)) +dep_name = $(call query_name,$(1)) +dep_repo = $(call query_repo_git,$(1)) dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit))) LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a))) @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl end, Write("\n") end(), - GetHexVsn = fun(N) -> + GetHexVsn = fun(N, NP) -> case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of {ok, Lock} -> io:format("~p~n", [Lock]), @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of {_, {pkg, _, Vsn}, _} -> io:format("~p~n", [Vsn]), - {N, {hex, binary_to_list(Vsn)}}; + {N, {hex, NP, binary_to_list(Vsn)}}; _ -> false end; @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl false -> []; {_, Deps} -> [begin case case Dep of - N when is_atom(N) -> GetHexVsn(N); - {N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}}; - {_, S, {pkg, N}} -> {N, {hex, S}}; + N when is_atom(N) -> GetHexVsn(N, N); + {N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}}; + {N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP); + {N, S, {pkg, NP}} -> {N, {hex, NP, S}}; {N, S} when is_tuple(S) -> {N, S}; {N, _, S} -> {N, S}; {N, _, S, _} -> {N, S}; @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl false -> ok; {Name, Source} -> {Method, Repo, Commit} = case Source of - {hex, V} -> {hex, V, undefined}; + {hex, NPV, V} -> {hex, V, NPV}; {git, R} -> {git, R, master}; {M, R, {branch, C}} -> {M, R, C}; {M, R, {ref, C}} -> {M, R, C}; @@ -4940,7 +5012,7 @@ endef define dep_fetch_hex mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \ $(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\ - https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \ + https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \ tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -; endef @@ -4956,16 +5028,6 @@ define dep_fetch_legacy cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master); endef -define dep_fetch - $(if $(dep_$(1)), \ - $(if $(dep_fetch_$(word 1,$(dep_$(1)))), \ - $(word 1,$(dep_$(1))), \ - $(if $(IS_DEP),legacy,fail)), \ - $(if $(filter $(1),$(PACKAGES)), \ - $(pkg_$(1)_fetch), \ - fail)) -endef - define dep_target $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP) $(eval DEP_NAME := $(call dep_name,$1)) @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log + # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -5381,6 +5449,9 @@ else | sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \ > ebin/$(PROJECT).app endif +ifneq ($(wildcard src/$(PROJECT).appup),) + $(verbose) cp src/$(PROJECT).appup ebin/ +endif clean:: clean-app @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE) $(C_SRC_OUTPUT_FILE): $(OBJECTS) - $(verbose) mkdir -p priv/ + $(verbose) mkdir -p $(dir $@) $(link_verbose) $(CC) $(OBJECTS) \ $(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \ -o $(C_SRC_OUTPUT_FILE) @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V)) # Core targets. ifneq ($(wildcard src/),) +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),) PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES)) ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES)))) @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES) $(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?))) endif endif +endif # Copyright (c) 2013-2016, Loïc Hoguin # This file is part of erlang.mk and subject to the terms of the ISC License. @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST) list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps: $(verbose) cat $^ + +# Query dependencies recursively. + +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \ + query-shell-deps + +QUERY ?= name fetch_method repo version + +define query_target +$(1): $(2) clean-tmp-query.log +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) rm -f $(4) +endif + $(verbose) $(foreach dep,$(3),\ + echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;) + $(if $(filter-out query-deps,$(1)),,\ + $(verbose) set -e; for dep in $(3) ; do \ + if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \ + :; \ + else \ + echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \ + $(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \ + fi \ + done) +ifeq ($(IS_APP)$(IS_DEP),) + $(verbose) touch $(4) + $(verbose) cat $(4) +endif +endef + +clean-tmp-query.log: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ERLANG_MK_TMP)/query.log +endif + +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE))) +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE))) +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE))) +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE))) +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE))) diff --git a/deps/rabbitmq_shovel/rabbitmq-components.mk b/deps/rabbitmq_shovel/rabbitmq-components.mk index c8a17e8..79ebcd2 100644 --- a/deps/rabbitmq_shovel/rabbitmq-components.mk +++ b/deps/rabbitmq_shovel/rabbitmq-components.mk @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1 dep_cowlib = hex 2.7.0 dep_jsx = hex 2.9.0 dep_lager = hex 3.8.0 -dep_prometheus = hex 4.5.0 -dep_ra = hex 1.0.8 +dep_prometheus = hex 4.6.0 +dep_ra = hex 1.1.2 dep_ranch = hex 1.7.1 dep_recon = hex 2.5.0 dep_observer_cli = hex 1.5.3 diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl index 1c6c71d..4745f3a 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl @@ -66,14 +66,22 @@ validate([_], _Opts) -> merge_defaults(A, Opts) -> {A, maps:merge(#{vhost => <<"/">>}, Opts)}. -banner([Name], #{vhost := Vhost}) -> +banner([Name], #{vhost := VHost}) -> erlang:list_to_binary(io_lib:format("Deleting shovel ~s in vhost ~s", - [Name, Vhost])). - -run([Name], #{node := Node, vhost := Vhost}) -> - rabbit_misc:rpc_call(Node, rabbit_runtime_parameters, clear, - [Vhost, <<"shovel">>, Name, - 'Elixir.RabbitMQ.CLI.Core.Helpers':cli_acting_user()]). + [Name, VHost])). + +run([Name], #{node := Node, vhost := VHost}) -> + ActingUser = 'Elixir.RabbitMQ.CLI.Core.Helpers':cli_acting_user(), + case rabbit_misc:rpc_call(Node, rabbit_shovel_util, delete_shovel, [VHost, Name, ActingUser]) of + {badrpc, _} = Error -> + Error; + {error, not_found} -> + ErrMsg = rabbit_misc:format("Shovel with the given name was not found " + "on the target node '~s' and / or virtual host '~s'", + [Node, VHost]), + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> ok + end. switches() -> []. diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl index 820f6cb..fffc90b 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl @@ -53,25 +53,23 @@ validate([_], _Opts) -> validate(_, _Opts) -> {validation_failure, too_many_args}. -merge_defaults(A, O) -> - {A, O}. +merge_defaults(A, Opts) -> + {A, maps:merge(#{vhost => <<"/">>}, Opts)}. banner([Name], #{node := Node, vhost := VHost}) -> erlang:iolist_to_binary([<<"Restarting dynamic Shovel ">>, Name, <<" in virtual host ">>, VHost, << " on node ">>, atom_to_binary(Node, utf8)]). run([Name], #{node := Node, vhost := VHost}) -> - case rabbit_misc:rpc_call(Node, rabbit_shovel_status, lookup, [{VHost, Name}]) of + case rabbit_misc:rpc_call(Node, rabbit_shovel_util, restart_shovel, [VHost, Name]) of {badrpc, _} = Error -> Error; - not_found -> - {error, <<"Shovel with the given name was not found in the target virtual host">>}; - _Obj -> - ok = rabbit_misc:rpc_call(Node, rabbit_shovel_dyn_worker_sup_sup, stop_child, - [{VHost, Name}]), - {ok, _} = rabbit_misc:rpc_call(Node, rabbit_shovel_dyn_worker_sup_sup, start_link, - []), - ok + {error, not_found} -> + ErrMsg = rabbit_misc:format("Shovel with the given name was not found " + "on the target node '~s' and / or virtual host '~s'", + [Node, VHost]), + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> ok end. output(Output, _Opts) -> diff --git a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl index c4ffc01..e7f6a3b 100644 --- a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl +++ b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl @@ -43,6 +43,7 @@ ]). -import(rabbit_misc, [pget/2, pget/3]). +-import(rabbit_data_coercion, [to_binary/1]). -define(INFO(Text, Args), error_logger:info_msg(Text, Args)). -define(LINK_CREDIT_TIMEOUT, 5000). @@ -353,17 +354,52 @@ add_forward_headers(#{dest := #{cached_forward_headers := Props}}, Msg) -> add_forward_headers(_, Msg) -> Msg. set_message_properties(Props, Msg) -> - maps:fold(fun(delivery_mode, 2, M) -> - amqp10_msg:set_headers(#{durable => true}, M); - (content_type, Ct, M) -> - amqp10_msg:set_properties( - #{content_type => rabbit_data_coercion:to_binary(Ct)}, M); - (_, _, M) -> M - end, Msg, Props). + %% this is effectively special handling properties from amqp 0.9.1 + maps:fold( + fun(content_type, Ct, M) -> + amqp10_msg:set_properties( + #{content_type => to_binary(Ct)}, M); + (content_encoding, Ct, M) -> + amqp10_msg:set_properties( + #{content_encoding => to_binary(Ct)}, M); + (delivery_mode, 2, M) -> + amqp10_msg:set_headers(#{durable => true}, M); + (correlation_id, Ct, M) -> + amqp10_msg:set_properties(#{correlation_id => to_binary(Ct)}, M); + (reply_to, Ct, M) -> + amqp10_msg:set_properties(#{reply_to => to_binary(Ct)}, M); + (message_id, Ct, M) -> + amqp10_msg:set_properties(#{message_id => to_binary(Ct)}, M); + (timestamp, Ct, M) -> + amqp10_msg:set_properties(#{creation_time => Ct}, M); + (user_id, Ct, M) -> + amqp10_msg:set_properties(#{user_id => Ct}, M); + (headers, Headers0, M) when is_list(Headers0) -> + %% AMPQ 0.9.1 are added as applicatin properties + %% TODO: filter headers to make safe + Headers = lists:foldl( + fun ({K, _T, V}, Acc) -> + case is_amqp10_compat(V) of + true -> + Acc#{to_binary(K) => V}; + false -> + Acc + end + end, #{}, Headers0), + amqp10_msg:set_application_properties(Headers, M); + (Key, Value, M) -> + case is_amqp10_compat(Value) of + true -> + amqp10_msg:set_application_properties( + #{to_binary(Key) => Value}, M); + false -> + M + end + end, Msg, Props). gen_unique_name(Pre0, Post0) -> - Pre = rabbit_data_coercion:to_binary(Pre0), - Post = rabbit_data_coercion:to_binary(Post0), + Pre = to_binary(Pre0), + Post = to_binary(Post0), Id = bin_to_hex(crypto:strong_rand_bytes(8)), <
    >/binary, Id/binary, <<"_">>/binary, Post/binary>>.
     
    @@ -371,3 +407,10 @@ bin_to_hex(Bin) ->
         <<<= 10 -> N -10 + $a;
                true  -> N + $0 end>>
           || <> <= Bin>>.
    +
    +is_amqp10_compat(T) ->
    +    is_binary(T) orelse
    +    is_number(T) orelse
    +    %% TODO: not all lists are compatible
    +    is_list(T) orelse
    +    is_boolean(T).
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    index c303a25..ca92902 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup.erl
    @@ -39,7 +39,7 @@ init([Name, Config0]) ->
         end,
         Restart = case Delay of
             N when is_integer(N) andalso N > 0 ->
    -          case pget(<<"src-delete-after">>, Config, <<"never">>) of
    +          case pget(<<"src-delete-after">>, Config, pget(<<"delete-after">>, Config, <<"never">>)) of
                 %% always try to reconnect
                 <<"never">>                        -> {permanent, N};
                 %% this Shovel is an autodelete one
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    index f5f4749..3bafebe 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_parameters.erl
    @@ -84,7 +84,7 @@ validate_amqp091_src(Def) ->
              one  -> ok;
              both -> {error, "Cannot specify 'src-exchange' and 'src-queue'", []}
          end,
    -     case {pget(<<"delete-after">>, Def), pget(<<"ack-mode">>, Def)} of
    +     case {pget(<<"src-delete-after">>, Def, pget(<<"delete-after">>, Def)), pget(<<"ack-mode">>, Def)} of
              {N, <<"no-ack">>} when is_integer(N) ->
                  {error, "Cannot specify 'no-ack' and numerical 'delete-after'", []};
              _ ->
    @@ -131,7 +131,9 @@ amqp091_src_validation(_Def, User) ->
          {<<"src-queue">>,       fun rabbit_parameter_validation:binary/2,optional},
          {<<"prefetch-count">>,  fun rabbit_parameter_validation:number/2,optional},
          {<<"src-prefetch-count">>,  fun rabbit_parameter_validation:number/2,optional},
    +     %% a deprecated pre-3.7 setting
          {<<"delete-after">>, fun validate_delete_after/2, optional},
    +     %% currently used multi-protocol friend name, introduced in 3.7
          {<<"src-delete-after">>, fun validate_delete_after/2, optional}
         ].
     
    diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    index 3d1d647..2a9521e 100644
    --- a/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_util.erl
    @@ -17,7 +17,9 @@
     -module(rabbit_shovel_util).
     
     -export([update_headers/5,
    -         add_timestamp_header/1]).
    +         add_timestamp_header/1,
    +         delete_shovel/3,
    +         restart_shovel/2]).
     
     -include_lib("rabbit_common/include/rabbit_framing.hrl").
     
    @@ -41,3 +43,21 @@ add_timestamp_header(Props = #'P_basic'{headers = Headers}) ->
                                                long,
                                                os:system_time(seconds)),
         Props#'P_basic'{headers = Headers2}.
    +
    +delete_shovel(VHost, Name, ActingUser) ->
    +    case rabbit_shovel_status:lookup({VHost, Name}) of
    +        not_found ->
    +            {error, not_found};
    +        _Obj ->
    +            ok = rabbit_runtime_parameters:clear(VHost, <<"shovel">>, Name, ActingUser)
    +    end.
    +
    +restart_shovel(VHost, Name) ->
    +    case rabbit_shovel_status:lookup({VHost, Name}) of
    +        not_found ->
    +            {error, not_found};
    +        _Obj ->
    +            ok = rabbit_shovel_dyn_worker_sup_sup:stop_child({VHost, Name}),
    +            {ok, _} = rabbit_shovel_dyn_worker_sup_sup:start_link(),
    +            ok
    +    end.
    diff --git a/deps/rabbitmq_shovel_management/README.md b/deps/rabbitmq_shovel_management/README.md
    index a402726..8e2bcfc 100644
    --- a/deps/rabbitmq_shovel_management/README.md
    +++ b/deps/rabbitmq_shovel_management/README.md
    @@ -93,4 +93,4 @@ curl -u guest:guest -v -X DELETE http://localhost:15672/api/parameters/shovel/%2
     
     Released under [the same license as RabbitMQ](https://www.rabbitmq.com/mpl.html).
     
    -2007-2018 (c) Pivotal Software Inc.
    +2007-2018 (c) 2007-2020 VMware, Inc. or its affiliates.
    diff --git a/deps/rabbitmq_shovel_management/erlang.mk b/deps/rabbitmq_shovel_management/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_shovel_management/erlang.mk
    +++ b/deps/rabbitmq_shovel_management/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_shovel_management/priv/www/js/shovel.js b/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    index d93a620..a4f85cb 100644
    --- a/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    +++ b/deps/rabbitmq_shovel_management/priv/www/js/shovel.js
    @@ -80,15 +80,21 @@ dispatcher_add(function(sammy) {
                 return false;
             });
         sammy.del('#/shovel-parameters', function() {
    -            if (sync_delete(this, '/parameters/:component/:vhost/:name'))
    +            if (sync_delete(this, '/shovels/vhost/:vhost/:name')) {
                     go_to('#/dynamic-shovels');
    -            return false;
    +            } else {
    +                show_popup('warn', 'Shovel not deleted because it is not running on this node.');
    +                return false;
    +            }
             });
         sammy.del("#/shovel-restart-link", function(){
    -        if(sync_delete(this, '/shovels/vhost/:vhost/:name/restart')){
    -            update();
    -        }
    -    });
    +            if (sync_delete(this, '/shovels/vhost/:vhost/:name/restart')) {
    +                update();
    +            } else {
    +                show_popup('warn', 'Shovel not restarted because it is not running on this node.');
    +                return false;
    +            }
    +        });
     });
     
     
    diff --git a/deps/rabbitmq_shovel_management/rabbitmq-components.mk b/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    +++ b/deps/rabbitmq_shovel_management/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    index 69540b0..fe9ba00 100644
    --- a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    +++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt.erl
    @@ -11,7 +11,7 @@
     %%  The Original Code is RabbitMQ.
     %%
     %%  The Initial Developer of the Original Code is GoPivotal, Inc.
    -%%  Copyright (c) 2007-2020 Pivotal Software, Inc.  All rights reserved.
    +%%  Copyright (c) 2007-2020 VMware, Inc. or its affiliates.  All rights reserved.
     %%
     
     -module(rabbit_shovel_mgmt).
    @@ -29,6 +29,7 @@
     
     dispatcher() -> [{"/shovels",        ?MODULE, []},
                      {"/shovels/:vhost", ?MODULE, []},
    +                 {"/shovels/vhost/:vhost/:name", ?MODULE, []},
                      {"/shovels/vhost/:vhost/:name/restart", ?MODULE, []}].
     
     web_ui()     -> [{javascript, <<"shovel.js">>}].
    @@ -45,17 +46,26 @@ allowed_methods(ReqData, Context) ->
         {[<<"HEAD">>, <<"GET">>, <<"DELETE">>, <<"OPTIONS">>], ReqData, Context}.
     
     resource_exists(ReqData, Context) ->
    -    {case rabbit_mgmt_util:vhost(ReqData) of
    -         not_found -> false;
    -         VHost     -> case rabbit_mgmt_util:id(name, ReqData) of
    -                          none -> true;
    -                          %% Restarting a shovel
    -                          Name -> case rabbit_shovel_status:lookup({VHost, Name}) of
    -                                      not_found -> false;
    -                                      _ -> true
    -                                  end
    -                      end
    -     end, ReqData, Context}.
    +    Reply = case rabbit_mgmt_util:vhost(ReqData) of
    +                not_found ->
    +                    false;
    +                VHost ->
    +                    case rabbit_mgmt_util:id(name, ReqData) of
    +                        none -> true;
    +                        Name ->
    +                            %% Deleting or restarting a shovel
    +                            case rabbit_shovel_status:lookup({VHost, Name}) of
    +                                not_found ->
    +                                    rabbit_log:error("Shovel with the name '~s' was not found "
    +                                                     "on the target node '~s' and / or virtual host '~s'",
    +                                                     [Name, node(), VHost]),
    +                                    false;
    +                                _ ->
    +                                    true
    +                            end
    +                    end
    +            end,
    +    {Reply, ReqData, Context}.
     
     to_json(ReqData, Context) ->
         rabbit_mgmt_util:reply_list(
    @@ -64,21 +74,41 @@ to_json(ReqData, Context) ->
     is_authorized(ReqData, Context) ->
         rabbit_mgmt_util:is_authorized_monitor(ReqData, Context).
     
    -delete_resource(ReqData, Context) ->
    +delete_resource(ReqData, #context{user = #user{username = Username}}=Context) ->
         VHost = rabbit_mgmt_util:id(vhost, ReqData),
    -    Reply =
    -        case rabbit_mgmt_util:id(name, ReqData) of
    -            none ->
    -                false;
    -            Name ->
    -                ok = rabbit_shovel_dyn_worker_sup_sup:stop_child({VHost, Name}),
    -                {ok, _} = rabbit_shovel_dyn_worker_sup_sup:start_link(),
    -                true
    -        end,
    +    Reply = case rabbit_mgmt_util:id(name, ReqData) of
    +                none ->
    +                    false;
    +                Name ->
    +                    %% We must distinguish between a delete and restart
    +                    case is_restart(ReqData) of
    +                        true ->
    +                            case rabbit_shovel_util:restart_shovel(VHost, Name) of
    +                                {error, ErrMsg} ->
    +                                    rabbit_log:error("Error restarting shovel: ~s", [ErrMsg]),
    +                                    false;
    +                                ok -> true
    +                            end;
    +                        _ ->
    +                            case rabbit_shovel_util:delete_shovel(VHost, Name, Username) of
    +                                {error, ErrMsg} ->
    +                                    rabbit_log:error("Error deleting shovel: ~s", [ErrMsg]),
    +                                    false;
    +                                ok -> true
    +                            end
    +                    end
    +            end,
         {Reply, ReqData, Context}.
     
     %%--------------------------------------------------------------------
     
    +is_restart(ReqData) ->
    +    Path = cowboy_req:path(ReqData),
    +    case string:find(Path, "/restart", trailing) of
    +        nomatch -> false;
    +        _ -> true
    +    end.
    +
     filter_vhost_req(List, ReqData) ->
         case rabbit_mgmt_util:vhost(ReqData) of
             none      -> List;
    diff --git a/deps/rabbitmq_stomp/Makefile b/deps/rabbitmq_stomp/Makefile
    index 3c03242..a8a3e57 100644
    --- a/deps/rabbitmq_stomp/Makefile
    +++ b/deps/rabbitmq_stomp/Makefile
    @@ -9,6 +9,7 @@ define PROJECT_ENV
     	      {passcode, <<"guest">>}]},
     	    {default_vhost, <<"/">>},
     	    {default_topic_exchange, <<"amq.topic">>},
    +		{default_nack_requeue, true},
     	    {ssl_cert_login, false},
     	    {implicit_connect, false},
     	    {tcp_listeners, [61613]},
    diff --git a/deps/rabbitmq_stomp/erlang.mk b/deps/rabbitmq_stomp/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_stomp/erlang.mk
    +++ b/deps/rabbitmq_stomp/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema b/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    index d5ad4da..37ca7fe 100644
    --- a/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    +++ b/deps/rabbitmq_stomp/priv/schema/rabbitmq_stomp.schema
    @@ -150,11 +150,11 @@ end}.
         {datatype, integer}
     ]}.
     
    -%% Additional SSL options
    +%% Additional TLS options
     
    -%% Extract a name from the client's certificate when using SSL.
    +%% Extract a name from the client's certificate when using TLS.
     %%
    -%% {ssl_cert_login, true},
    +%% Defaults to true.
     
     {mapping, "stomp.ssl_cert_login", "rabbitmq_stomp.ssl_cert_login",
         [{datatype, {enum, [true, false]}}]}.
    @@ -194,28 +194,37 @@ fun(Conf) ->
         list_to_binary(cuttlefish:conf_get("stomp.default_topic_exchange", Conf, "amq.topic"))
     end}.
     
    -%% If a default user is configured, or you have configured use SSL client
    -%% certificate based authentication, you can choose to allow clients to
    +%% If a default user is configured, or if x.509
    +%% certificate-based client authentication is used, use this setting to allow clients to
     %% omit the CONNECT frame entirely. If set to true, the client is
     %% automatically connected as the default user or user supplied in the
    -%% SSL certificate whenever the first frame sent on a session is not a
    +%% x.509/TLS certificate whenever the first frame sent on a session is not a
     %% CONNECT frame.
     %%
    -%% {implicit_connect, true}
    +%% Defaults to true.
     
     {mapping, "stomp.implicit_connect", "rabbitmq_stomp.implicit_connect",
         [{datatype, {enum, [true, false]}}]}.
     
     %% Whether or not to enable proxy protocol support.
     %%
    -%% {proxy_protocol, false}
    +%% Defaults to false.
     
     {mapping, "stomp.proxy_protocol", "rabbitmq_stomp.proxy_protocol",
         [{datatype, {enum, [true, false]}}]}.
     
     %% Whether or not to hide server info
     %%
    -%% {hide_server_info, false}
    +%% Defaults to false.
     
     {mapping, "stomp.hide_server_info", "rabbitmq_stomp.hide_server_info",
         [{datatype, {enum, [true, false]}}]}.
    +
    +%% Whether or not to always requeue the message on nack
    +%% If not set then coordinated by the usage of the frame "requeue" header
    +%% Useful when you are not fully controlling the STOMP consumer implementation
    +%%
    +%% Defaults to true.
    +
    +{mapping, "stomp.default_nack_requeue", "rabbitmq_stomp.default_nack_requeue",
    +    [{datatype, {enum, [true, false]}}]}.
    diff --git a/deps/rabbitmq_stomp/rabbitmq-components.mk b/deps/rabbitmq_stomp/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_stomp/rabbitmq-components.mk
    +++ b/deps/rabbitmq_stomp/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    index 4517b52..732efff 100644
    --- a/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    +++ b/deps/rabbitmq_stomp/src/rabbit_stomp_processor.erl
    @@ -37,7 +37,7 @@
                     adapter_info, send_fun, ssl_login_name, peer_addr,
                     %% see rabbitmq/rabbitmq-stomp#39
                     trailing_lf, auth_mechanism, auth_login,
    -                default_topic_exchange}).
    +                default_topic_exchange, default_nack_requeue}).
     
     -record(subscription, {dest_hdr, ack_mode, multi_ack, description}).
     
    @@ -163,7 +163,8 @@ initial_state(Configuration,
            reply_queues        = #{},
            frame_transformer   = undefined,
            trailing_lf         = application:get_env(rabbitmq_stomp, trailing_lf, true),
    -       default_topic_exchange = application:get_env(rabbitmq_stomp, default_topic_exchange, <<"amq.topic">>)}.
    +       default_topic_exchange = application:get_env(rabbitmq_stomp, default_topic_exchange, <<"amq.topic">>),
    +       default_nack_requeue = application:get_env(rabbitmq_stomp, default_nack_requeue, true)}.
     
     
     command({"STOMP", Frame}, State) ->
    @@ -399,8 +400,9 @@ handle_frame(Command, _Frame, State) ->
     
     ack_action(Command, Frame,
                State = #proc_state{subscriptions = Subs,
    -                          channel       = Channel,
    -                          version       = Version}, MethodFun) ->
    +                          channel              = Channel,
    +                          version              = Version,
    +                          default_nack_requeue = DefaultNackRequeue}, MethodFun) ->
         AckHeader = rabbit_stomp_util:ack_header_name(Version),
         case rabbit_stomp_frame:header(Frame, AckHeader) of
             {ok, AckValue} ->
    @@ -408,7 +410,7 @@ ack_action(Command, Frame,
                     {ok, {ConsumerTag, _SessionId, DeliveryTag}} ->
                         case maps:find(ConsumerTag, Subs) of
                             {ok, Sub} ->
    -                            Requeue = rabbit_stomp_frame:boolean_header(Frame, "requeue", true),
    +                            Requeue = rabbit_stomp_frame:boolean_header(Frame, "requeue", DefaultNackRequeue),
                                 Method = MethodFun(DeliveryTag, Sub, Requeue),
                                 case transactional(Frame) of
                                     {yes, Transaction} ->
    diff --git a/deps/rabbitmq_top/erlang.mk b/deps/rabbitmq_top/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_top/erlang.mk
    +++ b/deps/rabbitmq_top/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_top/rabbitmq-components.mk b/deps/rabbitmq_top/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_top/rabbitmq-components.mk
    +++ b/deps/rabbitmq_top/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_tracing/erlang.mk b/deps/rabbitmq_tracing/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_tracing/erlang.mk
    +++ b/deps/rabbitmq_tracing/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_tracing/rabbitmq-components.mk b/deps/rabbitmq_tracing/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_tracing/rabbitmq-components.mk
    +++ b/deps/rabbitmq_tracing/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_trust_store/erlang.mk b/deps/rabbitmq_trust_store/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_trust_store/erlang.mk
    +++ b/deps/rabbitmq_trust_store/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_trust_store/rabbitmq-components.mk b/deps/rabbitmq_trust_store/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_trust_store/rabbitmq-components.mk
    +++ b/deps/rabbitmq_trust_store/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    index d328a9a..e39e07a 100644
    --- a/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    +++ b/deps/rabbitmq_trust_store/src/rabbit_trust_store.erl
    @@ -167,7 +167,7 @@ handle_info(refresh, #state{refresh_interval = Interval,
                                 providers_state = ProvidersState} = St) ->
             Config = application:get_all_env(rabbitmq_trust_store),
             try
    -            rabbit_log:error("Trust store will attempt to refresh certificates..."),
    +            rabbit_log:debug("Trust store will attempt to refresh certificates..."),
                 NewProvidersState = refresh_certs(Config, ProvidersState),
                 {noreply, St#state{providers_state = NewProvidersState}}
             catch
    diff --git a/deps/rabbitmq_web_dispatch/erlang.mk b/deps/rabbitmq_web_dispatch/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_web_dispatch/erlang.mk
    +++ b/deps/rabbitmq_web_dispatch/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_dispatch/rabbitmq-components.mk b/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_dispatch/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_mqtt/erlang.mk b/deps/rabbitmq_web_mqtt/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_web_mqtt/erlang.mk
    +++ b/deps/rabbitmq_web_mqtt/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_mqtt/rabbitmq-components.mk b/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_mqtt/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_mqtt_examples/erlang.mk b/deps/rabbitmq_web_mqtt_examples/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_web_mqtt_examples/erlang.mk
    +++ b/deps/rabbitmq_web_mqtt_examples/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk b/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_mqtt_examples/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_stomp/erlang.mk b/deps/rabbitmq_web_stomp/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_web_stomp/erlang.mk
    +++ b/deps/rabbitmq_web_stomp/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_stomp/rabbitmq-components.mk b/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_stomp/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/deps/rabbitmq_web_stomp_examples/erlang.mk b/deps/rabbitmq_web_stomp_examples/erlang.mk
    index 1195106..83988d3 100644
    --- a/deps/rabbitmq_web_stomp_examples/erlang.mk
    +++ b/deps/rabbitmq_web_stomp_examples/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk b/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    +++ b/deps/rabbitmq_web_stomp_examples/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/erlang.mk b/erlang.mk
    index 1195106..83988d3 100644
    --- a/erlang.mk
    +++ b/erlang.mk
    @@ -17,7 +17,7 @@
     ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
     export ERLANG_MK_FILENAME
     
    -ERLANG_MK_VERSION = 2.0.0-pre.2-495-g8217957
    +ERLANG_MK_VERSION = 2019.07.01-18-g7edc30a
     ERLANG_MK_WITHOUT = 
     
     # Make 3.81 and 3.82 are deprecated.
    @@ -66,7 +66,7 @@ export ERLANG_MK_TMP
     
     # "erl" command.
     
    -ERL = erl +A0 -noinput -boot start_clean
    +ERL = erl +A1 -noinput -boot no_dot_erlang
     
     # Platform detection.
     
    @@ -1236,9 +1236,9 @@ pkg_elixir_commit = master
     PACKAGES += elli
     pkg_elli_name = elli
     pkg_elli_description = Simple, robust and performant Erlang web server
    -pkg_elli_homepage = https://github.com/knutin/elli
    +pkg_elli_homepage = https://github.com/elli-lib/elli
     pkg_elli_fetch = git
    -pkg_elli_repo = https://github.com/knutin/elli
    +pkg_elli_repo = https://github.com/elli-lib/elli
     pkg_elli_commit = master
     
     PACKAGES += elvis
    @@ -2811,11 +2811,11 @@ pkg_myproto_commit = master
     
     PACKAGES += mysql
     pkg_mysql_name = mysql
    -pkg_mysql_description = Erlang MySQL Driver (from code.google.com)
    -pkg_mysql_homepage = https://github.com/dizzyd/erlang-mysql-driver
    +pkg_mysql_description = MySQL client library for Erlang/OTP
    +pkg_mysql_homepage = https://github.com/mysql-otp/mysql-otp
     pkg_mysql_fetch = git
    -pkg_mysql_repo = https://github.com/dizzyd/erlang-mysql-driver
    -pkg_mysql_commit = master
    +pkg_mysql_repo = https://github.com/mysql-otp/mysql-otp
    +pkg_mysql_commit = 1.5.1
     
     PACKAGES += n2o
     pkg_n2o_name = n2o
    @@ -3025,6 +3025,14 @@ pkg_parsexml_fetch = git
     pkg_parsexml_repo = https://github.com/maxlapshin/parsexml
     pkg_parsexml_commit = master
     
    +PACKAGES += partisan
    +pkg_partisan_name = partisan
    +pkg_partisan_description = High-performance, high-scalability distributed computing with Erlang and Elixir.
    +pkg_partisan_homepage = http://partisan.cloud
    +pkg_partisan_fetch = git
    +pkg_partisan_repo = https://github.com/lasp-lang/partisan
    +pkg_partisan_commit = master
    +
     PACKAGES += pegjs
     pkg_pegjs_name = pegjs
     pkg_pegjs_description = An implementation of PEG.js grammar for Erlang.
    @@ -3145,6 +3153,14 @@ pkg_procket_fetch = git
     pkg_procket_repo = https://github.com/msantos/procket
     pkg_procket_commit = master
     
    +PACKAGES += prometheus
    +pkg_prometheus_name = prometheus
    +pkg_prometheus_description = Prometheus.io client in Erlang
    +pkg_prometheus_homepage = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_fetch = git
    +pkg_prometheus_repo = https://github.com/deadtrickster/prometheus.erl
    +pkg_prometheus_commit = master
    +
     PACKAGES += prop
     pkg_prop_name = prop
     pkg_prop_description = An Erlang code scaffolding and generator system.
    @@ -4330,9 +4346,64 @@ $(foreach p,$(DEP_EARLY_PLUGINS),\
     		$(call core_dep_plugin,$p,$(firstword $(subst /, ,$p))),\
     		$(call core_dep_plugin,$p/early-plugins.mk,$p))))
     
    -dep_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    -dep_repo = $(patsubst git://github.com/%,https://github.com/%, \
    -	$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo)))
    +# Query functions.
    +
    +query_fetch_method = $(if $(dep_$(1)),$(call _qfm_dep,$(word 1,$(dep_$(1)))),$(call _qfm_pkg,$(1)))
    +_qfm_dep = $(if $(dep_fetch_$(1)),$(1),$(if $(IS_DEP),legacy,fail))
    +_qfm_pkg = $(if $(pkg_$(1)_fetch),$(pkg_$(1)_fetch),fail)
    +
    +query_name = $(if $(dep_$(1)),$(1),$(if $(pkg_$(1)_name),$(pkg_$(1)_name),$(1)))
    +
    +query_repo = $(call _qr,$(1),$(call query_fetch_method,$(1)))
    +_qr = $(if $(query_repo_$(2)),$(call query_repo_$(2),$(1)),$(call dep_repo,$(1)))
    +
    +query_repo_default = $(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_repo))
    +query_repo_git = $(patsubst git://github.com/%,https://github.com/%,$(call query_repo_default,$(1)))
    +query_repo_git-subfolder = $(call query_repo_git,$(1))
    +query_repo_git-submodule = -
    +query_repo_hg = $(call query_repo_default,$(1))
    +query_repo_svn = $(call query_repo_default,$(1))
    +query_repo_cp = $(call query_repo_default,$(1))
    +query_repo_ln = $(call query_repo_default,$(1))
    +query_repo_hex = https://hex.pm/packages/$(if $(word 3,$(dep_$(1))),$(word 3,$(dep_$(1))),$(1))
    +query_repo_fail = -
    +query_repo_legacy = -
    +
    +query_version = $(call _qv,$(1),$(call query_fetch_method,$(1)))
    +_qv = $(if $(query_version_$(2)),$(call query_version_$(2),$(1)),$(call dep_commit,$(1)))
    +
    +query_version_default = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 3,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_git = $(call query_version_default,$(1))
    +query_version_git-subfolder = $(call query_version_git,$(1))
    +query_version_git-submodule = -
    +query_version_hg = $(call query_version_default,$(1))
    +query_version_svn = -
    +query_version_cp = -
    +query_version_ln = -
    +query_version_hex = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(word 2,$(dep_$(1))),$(pkg_$(1)_commit)))
    +query_version_fail = -
    +query_version_legacy = -
    +
    +query_extra = $(call _qe,$(1),$(call query_fetch_method,$(1)))
    +_qe = $(if $(query_extra_$(2)),$(call query_extra_$(2),$(1)),-)
    +
    +query_extra_git = -
    +query_extra_git-subfolder = $(if $(dep_$(1)),subfolder=$(word 4,$(dep_$(1))),-)
    +query_extra_git-submodule = -
    +query_extra_hg = -
    +query_extra_svn = -
    +query_extra_cp = -
    +query_extra_ln = -
    +query_extra_hex = $(if $(dep_$(1)),package-name=$(word 3,$(dep_$(1))),-)
    +query_extra_fail = -
    +query_extra_legacy = -
    +
    +query_absolute_path = $(addprefix $(DEPS_DIR)/,$(call query_name,$(1)))
    +
    +# Deprecated legacy query functions.
    +dep_fetch = $(call query_fetch_method,$(1))
    +dep_name = $(call query_name,$(1))
    +dep_repo = $(call query_repo_git,$(1))
     dep_commit = $(if $(dep_$(1)_commit),$(dep_$(1)_commit),$(if $(dep_$(1)),$(if $(filter hex,$(word 1,$(dep_$(1)))),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1)))),$(pkg_$(1)_commit)))
     
     LOCAL_DEPS_DIRS = $(foreach a,$(LOCAL_DEPS),$(if $(wildcard $(APPS_DIR)/$(a)),$(APPS_DIR)/$(a)))
    @@ -4609,7 +4680,7 @@ define dep_autopatch_rebar.erl
     		end,
     		Write("\n")
     	end(),
    -	GetHexVsn = fun(N) ->
    +	GetHexVsn = fun(N, NP) ->
     		case file:consult("$(call core_native_path,$(DEPS_DIR)/$1/rebar.lock)") of
     			{ok, Lock} ->
     				io:format("~p~n", [Lock]),
    @@ -4619,7 +4690,7 @@ define dep_autopatch_rebar.erl
     						case lists:keyfind(atom_to_binary(N, latin1), 1, LockPkgs) of
     							{_, {pkg, _, Vsn}, _} ->
     								io:format("~p~n", [Vsn]),
    -								{N, {hex, binary_to_list(Vsn)}};
    +								{N, {hex, NP, binary_to_list(Vsn)}};
     							_ ->
     								false
     						end;
    @@ -4648,9 +4719,10 @@ define dep_autopatch_rebar.erl
     			false -> [];
     			{_, Deps} ->
     				[begin case case Dep of
    -							N when is_atom(N) -> GetHexVsn(N);
    -							{N, S} when is_atom(N), is_list(S) -> {N, {hex, SemVsn(S)}};
    -							{_, S, {pkg, N}} -> {N, {hex, S}};
    +							N when is_atom(N) -> GetHexVsn(N, N);
    +							{N, S} when is_atom(N), is_list(S) -> {N, {hex, N, SemVsn(S)}};
    +							{N, {pkg, NP}} when is_atom(N) -> GetHexVsn(N, NP);
    +							{N, S, {pkg, NP}} -> {N, {hex, NP, S}};
     							{N, S} when is_tuple(S) -> {N, S};
     							{N, _, S} -> {N, S};
     							{N, _, S, _} -> {N, S};
    @@ -4659,7 +4731,7 @@ define dep_autopatch_rebar.erl
     					false -> ok;
     					{Name, Source} ->
     						{Method, Repo, Commit} = case Source of
    -							{hex, V} -> {hex, V, undefined};
    +							{hex, NPV, V} -> {hex, V, NPV};
     							{git, R} -> {git, R, master};
     							{M, R, {branch, C}} -> {M, R, C};
     							{M, R, {ref, C}} -> {M, R, C};
    @@ -4940,7 +5012,7 @@ endef
     define dep_fetch_hex
     	mkdir -p $(ERLANG_MK_TMP)/hex $(DEPS_DIR)/$1; \
     	$(call core_http_get,$(ERLANG_MK_TMP)/hex/$1.tar,\
    -		https://repo.hex.pm/tarballs/$1-$(strip $(word 2,$(dep_$1))).tar); \
    +		https://repo.hex.pm/tarballs/$(if $(word 3,$(dep_$1)),$(word 3,$(dep_$1)),$1)-$(strip $(word 2,$(dep_$1))).tar); \
     	tar -xOf $(ERLANG_MK_TMP)/hex/$1.tar contents.tar.gz | tar -C $(DEPS_DIR)/$1 -xzf -;
     endef
     
    @@ -4956,16 +5028,6 @@ define dep_fetch_legacy
     	cd $(DEPS_DIR)/$(1) && git checkout -q $(if $(word 2,$(dep_$(1))),$(word 2,$(dep_$(1))),master);
     endef
     
    -define dep_fetch
    -	$(if $(dep_$(1)), \
    -		$(if $(dep_fetch_$(word 1,$(dep_$(1)))), \
    -			$(word 1,$(dep_$(1))), \
    -			$(if $(IS_DEP),legacy,fail)), \
    -		$(if $(filter $(1),$(PACKAGES)), \
    -			$(pkg_$(1)_fetch), \
    -			fail))
    -endef
    -
     define dep_target
     $(DEPS_DIR)/$(call dep_name,$1): | $(ERLANG_MK_TMP)
     	$(eval DEP_NAME := $(call dep_name,$1))
    @@ -5048,6 +5110,12 @@ ERLANG_MK_RECURSIVE_REL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-rel-deps-list.log
     ERLANG_MK_RECURSIVE_TEST_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-test-deps-list.log
     ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST = $(ERLANG_MK_TMP)/recursive-shell-deps-list.log
     
    +ERLANG_MK_QUERY_DEPS_FILE = $(ERLANG_MK_TMP)/query-deps.log
    +ERLANG_MK_QUERY_DOC_DEPS_FILE = $(ERLANG_MK_TMP)/query-doc-deps.log
    +ERLANG_MK_QUERY_REL_DEPS_FILE = $(ERLANG_MK_TMP)/query-rel-deps.log
    +ERLANG_MK_QUERY_TEST_DEPS_FILE = $(ERLANG_MK_TMP)/query-test-deps.log
    +ERLANG_MK_QUERY_SHELL_DEPS_FILE = $(ERLANG_MK_TMP)/query-shell-deps.log
    +
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
     
    @@ -5381,6 +5449,9 @@ else
     		| sed "s/{id,[[:space:]]*\"git\"}/{id, \"$(subst /,\/,$(GITDESCRIBE))\"}/" \
     		> ebin/$(PROJECT).app
     endif
    +ifneq ($(wildcard src/$(PROJECT).appup),)
    +	$(verbose) cp src/$(PROJECT).appup ebin/
    +endif
     
     clean:: clean-app
     
    @@ -6232,7 +6303,7 @@ app:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     test-build:: $(C_SRC_ENV) $(C_SRC_OUTPUT_FILE)
     
     $(C_SRC_OUTPUT_FILE): $(OBJECTS)
    -	$(verbose) mkdir -p priv/
    +	$(verbose) mkdir -p $(dir $@)
     	$(link_verbose) $(CC) $(OBJECTS) \
     		$(LDFLAGS) $(if $(filter $(C_SRC_TYPE),shared),-shared) $(LDLIBS) \
     		-o $(C_SRC_OUTPUT_FILE)
    @@ -6894,6 +6965,7 @@ proto_verbose = $(proto_verbose_$(V))
     # Core targets.
     
     ifneq ($(wildcard src/),)
    +ifneq ($(filter gpb protobuffs,$(BUILD_DEPS) $(DEPS)),)
     PROTO_FILES := $(filter %.proto,$(ALL_SRC_FILES))
     ERL_FILES += $(addprefix src/,$(patsubst %.proto,%_pb.erl,$(notdir $(PROTO_FILES))))
     
    @@ -6940,6 +7012,7 @@ $(PROJECT).d:: $(PROTO_FILES)
     	$(if $(strip $?),$(proto_verbose) $(call erlang,$(call compile_proto.erl,$?)))
     endif
     endif
    +endif
     
     # Copyright (c) 2013-2016, Loïc Hoguin 
     # This file is part of erlang.mk and subject to the terms of the ISC License.
    @@ -7597,3 +7670,43 @@ list-shell-deps: $(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST)
     
     list-deps list-doc-deps list-rel-deps list-test-deps list-shell-deps:
     	$(verbose) cat $^
    +
    +# Query dependencies recursively.
    +
    +.PHONY: query-deps query-doc-deps query-rel-deps query-test-deps \
    +	query-shell-deps
    +
    +QUERY ?= name fetch_method repo version
    +
    +define query_target
    +$(1): $(2) clean-tmp-query.log
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) rm -f $(4)
    +endif
    +	$(verbose) $(foreach dep,$(3),\
    +		echo $(PROJECT): $(foreach q,$(QUERY),$(call query_$(q),$(dep))) >> $(4) ;)
    +	$(if $(filter-out query-deps,$(1)),,\
    +		$(verbose) set -e; for dep in $(3) ; do \
    +			if grep -qs ^$$$$dep$$$$ $(ERLANG_MK_TMP)/query.log; then \
    +				:; \
    +			else \
    +				echo $$$$dep >> $(ERLANG_MK_TMP)/query.log; \
    +				$(MAKE) -C $(DEPS_DIR)/$$$$dep $$@ QUERY="$(QUERY)" IS_DEP=1 || true; \
    +			fi \
    +		done)
    +ifeq ($(IS_APP)$(IS_DEP),)
    +	$(verbose) touch $(4)
    +	$(verbose) cat $(4)
    +endif
    +endef
    +
    +clean-tmp-query.log:
    +ifeq ($(IS_DEP),)
    +	$(verbose) rm -f $(ERLANG_MK_TMP)/query.log
    +endif
    +
    +$(eval $(call query_target,query-deps,$(ERLANG_MK_RECURSIVE_DEPS_LIST),$(BUILD_DEPS) $(DEPS),$(ERLANG_MK_QUERY_DEPS_FILE)))
    +$(eval $(call query_target,query-doc-deps,$(ERLANG_MK_RECURSIVE_DOC_DEPS_LIST),$(DOC_DEPS),$(ERLANG_MK_QUERY_DOC_DEPS_FILE)))
    +$(eval $(call query_target,query-rel-deps,$(ERLANG_MK_RECURSIVE_REL_DEPS_LIST),$(REL_DEPS),$(ERLANG_MK_QUERY_REL_DEPS_FILE)))
    +$(eval $(call query_target,query-test-deps,$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST),$(TEST_DEPS),$(ERLANG_MK_QUERY_TEST_DEPS_FILE)))
    +$(eval $(call query_target,query-shell-deps,$(ERLANG_MK_RECURSIVE_SHELL_DEPS_LIST),$(SHELL_DEPS),$(ERLANG_MK_QUERY_SHELL_DEPS_FILE)))
    diff --git a/git-revisions.txt b/git-revisions.txt
    index 471df5d..9d7bad7 100644
    --- a/git-revisions.txt
    +++ b/git-revisions.txt
    @@ -1,62 +1,67 @@
    -RabbitMQ Server 3.8.3
    -rabbitmq_server_release 672d1b2d1fda5d3f6ff88b09cd8a87d02101d3a3 v3.8.3-rc.2
    +RabbitMQ Server 3.8.4
    +rabbitmq_server_release ffe0887755c13c17a0d7e4bfd34ce708534941eb v3.8.4-rc.3
     accept  
    -amqp10_client 45508dc389872806caae6bba0286fcd33d8d14cc v3.8.3-rc.2
    -amqp10_common 41c459759b9f019f95c4103e05e81b55a7da987b 
    -amqp_client 81e4647702d2727d7131183bb3d45c1077da59be 
    +amqp10_client 35d5ffc57f666bf557fa10869af48537b24757aa 
    +amqp10_common 66527345e2bc7c76465153634575ffb7aebabf35 
    +amqp_client 05b491b641d8a56dbb3270bb448741a937842f68 
     aten  
     base64url  
     cowboy  
     cowlib  
     credentials_obfuscation  
    +cuttlefish  
    +eetcd  
     elvis_mk ac5ad774c0e317c8bfd0f5cca4153dd291a40ed1 master
     gen_batch_server  
    +getopt  
     goldrush 8f1b715d36b650ec1e1f5612c00e28af6ab0de82 0.1.9
    +gun  
     jose  
     jsx  
     lager  
     observer_cli  
     prometheus  
     ra  
    -rabbit 486f3adb6bab6ec19c312828c2746ffd69c07a4f 
    -rabbit_common 10a9337bbd44eb125b435e562376613cdf4d6435 
    -rabbitmq_amqp1_0 b370e97b2a6304fbef3c2ad21b69ac7a409fe42f v3.8.3-rc.2
    -rabbitmq_auth_backend_cache ff08e6230da8918b8f781d22a9065c9e1b2a6af8 v3.8.3-rc.2
    -rabbitmq_auth_backend_http f58cc12e0e8a645b0e5a337ca62e5a258a45cc27 v3.8.3-rc.2
    -rabbitmq_auth_backend_ldap 7e93f316fe2b90d2d340697678b58a92e03e7dc7 v3.8.3-rc.2
    -rabbitmq_auth_backend_oauth2 b6f1f4f38fff34f2aa47748478c4315755b98de5 
    -rabbitmq_auth_mechanism_ssl 16d047b1de91b277c94b2df4a8aa3cffd432fb7c v3.8.3-rc.2
    -rabbitmq_aws 1ef342dec965c62b900422ae54ef8a544f292a20 v3.8.3-rc.2
    -rabbitmq_cli fd1878ea4d572070d2b9021c60e6802a65394d81 
    -rabbitmq_codegen 427baf07bc91c8f3e378a563d148f8d4729a7ca9 v3.8.3-rc.1
    -rabbitmq_consistent_hash_exchange 4a044f0889fc8292b926e794a0285fea1cef3b2b v3.8.3-rc.2
    -rabbitmq_event_exchange f6ddec1a95cbf6c0410b648fce00cdc4e9c6cf30 v3.8.3-rc.2
    -rabbitmq_federation b7df935614d212d7b2bc3de7e37ab14ef6b7c918 v3.8.3-rc.2
    -rabbitmq_federation_management 16ca837cfadc92a1056644e2b10acd2d7e303230 v3.8.3-rc.2
    -rabbitmq_jms_topic_exchange ed6859e63c95124e608fc95f1eaa118c7c729bd5 v3.8.3-rc.2
    -rabbitmq_management f6501cdc69e8ca1f95e770e41882f2fa674d9a03 
    -rabbitmq_management_agent 6eaf8ff7885b4b5f03e68c27d1c18ea12e754b2e 
    -rabbitmq_mqtt 1b2256b9c9e497481626482d2f682ad529aa8f86 v3.8.3-rc.2
    -rabbitmq_peer_discovery_aws e815b9a3557782886c2d19eec3897ac3d316f049 v3.8.3-rc.2
    -rabbitmq_peer_discovery_common 6406e80196817c551d659121bd84d40bdcb05c22 v3.8.3-rc.2
    -rabbitmq_peer_discovery_consul 412c092316317243ba627179aada7dfc19f052f4 v3.8.3-rc.2
    -rabbitmq_peer_discovery_etcd b4a9b21704fc0a7e68bddf212dcbdd37b8c03a48 v3.8.3-rc.2
    -rabbitmq_peer_discovery_k8s 1566e49a60d313c2bbfb22883885efa5a93c82af v3.8.3-rc.2
    -rabbitmq_prometheus 74bb4d1c54c84e5ff5f0d339c32472f8586819bd 
    -rabbitmq_random_exchange afe1ad280a41a7ca25b7978ae2dbb018f2de43d3 v3.8.3-rc.2
    -rabbitmq_recent_history_exchange 80788e6d2fb8bf6379a3cba10f891f6036fb55ce 
    -rabbitmq_sharding b0d79a6e5f01e051b8418accfedf225318adc9fb v3.8.3-rc.2
    -rabbitmq_shovel bb87c309f5c9638581da43ae7c40ac9ef8e0e48d v3.8.3-rc.2
    -rabbitmq_shovel_management 89e2311efade5e0186516c705cbd43e82f512a3c v3.8.3-rc.2
    -rabbitmq_stomp 7ae304ab049d2b74961d3ccb575a5a2cf27b3e86 v3.8.3-rc.2
    -rabbitmq_top a5f1c128426becf925fe6ab0091ec49a1aa846e5 v3.8.3-rc.2
    -rabbitmq_tracing 3cb1ff44b447dcc8460b39d0ad3936715bb7dac2 v3.8.3-rc.2
    -rabbitmq_trust_store 9171451264cbd325db5208453eb1988d41292efa v3.8.3-rc.2
    -rabbitmq_web_dispatch c555117dcf50752a45626605d5dc8c6cb2fc1346 
    -rabbitmq_web_mqtt 0537f4fa7e97a424d0eec24abd49a2a2c7d4ee6a v3.8.3-rc.2
    -rabbitmq_web_mqtt_examples edee6393d7968ddb3553a7a8b9a56e5e9139ddec v3.8.3-rc.2
    -rabbitmq_web_stomp 76ec0a1b7585738aaf6396b7df1b4a29e10fa5f8 v3.8.3-rc.2
    -rabbitmq_web_stomp_examples 30f215ebf9982a14f3216079db3682a182f53ff2 v3.8.3-rc.2
    +rabbit 79825c9bea9ed6ebbe5d6dc330cced1fc30c1615 
    +rabbitmq_prelaunch 79825c9bea9ed6ebbe5d6dc330cced1fc30c1615 
    +rabbit_common be934c3af8f210d370083ad384ea2ce0c78f080e 
    +rabbitmq_amqp1_0 6e72c9bb1a09d6ee53389d64bda18e1b7da454bf 
    +rabbitmq_auth_backend_cache a1cb022f8c2d59fea27e1277237bdf24e6b4962a 
    +rabbitmq_auth_backend_http e1aa25fdc4ac651f0161cc872c973f74f3ff9493 
    +rabbitmq_auth_backend_ldap 9ae97b8542fc7b42d0eb139215ea07f162501700 
    +rabbitmq_auth_backend_oauth2 5c679aa0a2ca1de23705dcf4afe6a3c56859b0a8 
    +rabbitmq_auth_mechanism_ssl c3ab7fc801e922a8f445a63c930f92660cfdc33d 
    +rabbitmq_aws 5eae0ff4454e2f1a70b80f1fe9a101707af3d3e7 
    +rabbitmq_cli 5233ee4a476a8f1c807a59d364799d4049f19700 
    +rabbitmq_codegen 427baf07bc91c8f3e378a563d148f8d4729a7ca9 v3.8.3
    +rabbitmq_consistent_hash_exchange 55a1a3e13c6455b0004b3c5c54972d7d75d4d9fb 
    +rabbitmq_event_exchange 6bae2e21622fb0f9c726e42d1b167171f969aecf 
    +rabbitmq_federation c8992de866e5826fa384f81a201a01a8b5d18b6c 
    +rabbitmq_federation_management 5d30390becdd74a64cf906c588805adba8b26c5f 
    +rabbitmq_jms_topic_exchange 109a47c266a9561392f761e2e60a0acea2520a4a 
    +rabbitmq_management f434c791cad6fd74cc88ffd2452781ce84c86c64 
    +rabbitmq_management_agent b3fa808c6ddc8ca0f86fdb3c50a8a19acaa8006e 
    +rabbitmq_mqtt 86dcca55c7e09abdd8ce50b1cd902c92c9f28559 
    +rabbitmq_peer_discovery_aws 8e0064fddc7602aabe06aa9d9055c7caffbed63b 
    +rabbitmq_peer_discovery_common 8f63f2d9c990ce571df87267582880f0ddd2dc18 
    +rabbitmq_peer_discovery_consul ce492f2df99c00a72f67870389eab8e1f22d4f0a 
    +rabbitmq_peer_discovery_etcd c332d653d424b7dd8cb3a82e1a2d0b89433a52a6 
    +rabbitmq_peer_discovery_k8s 1bfac8e8eb22fc63a80e6a0fc710f6e7e8e41ea0 
    +rabbitmq_prometheus 17853e35ad114ee3791cdcd1646845a5da370d86 
    +rabbitmq_random_exchange bba72f15f5cfa57ff399b53997c4d36755404506 
    +rabbitmq_recent_history_exchange 36472f6ac3327fa6edd20331bf08d22878cdf5e7 
    +rabbitmq_sharding d7f21c4c74e254048828acfcd9c1f015b6d17b78 
    +rabbitmq_shovel 8c276cc1776181637788938197db7ae513870d75 
    +rabbitmq_shovel_management bca11e0a0a2587c366455eafa8d1fd3751f43ae3 
    +rabbitmq_stomp f1e552d5e4b0ff43c551835b26a99d5f7bcf89f4 
    +rabbitmq_top bd0f4ef83e4af8f9f7891ba9b192d94932f9da00 
    +rabbitmq_tracing 0cd6dfc084e4168d45a561cea616d8293b35e4e7 
    +rabbitmq_trust_store 675ad241dc6f68b0344f8e60a2f53b40db5bd7b1 
    +rabbitmq_web_dispatch cdbf60605f972f49ad8f49761bb85fe93902e517 
    +rabbitmq_web_mqtt a27c33449eb3d6a8ea3651138db810135fda671d 
    +rabbitmq_web_mqtt_examples 06d1733036a9bf794e812a1e27dc1ce00ec3075f 
    +rabbitmq_web_stomp 134913353b43585dafa786381a026a5704ad3225 
    +rabbitmq_web_stomp_examples 45cd06eebf416fde1070a3dc1463c2229a2b5a33 
     ranch  
     recon  
     stdout_formatter  
    diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk
    index c8a17e8..79ebcd2 100644
    --- a/rabbitmq-components.mk
    +++ b/rabbitmq-components.mk
    @@ -115,8 +115,8 @@ dep_cowboy = hex 2.6.1
     dep_cowlib = hex 2.7.0
     dep_jsx = hex 2.9.0
     dep_lager = hex 3.8.0
    -dep_prometheus = hex 4.5.0
    -dep_ra = hex 1.0.8
    +dep_prometheus = hex 4.6.0
    +dep_ra = hex 1.1.2
     dep_ranch = hex 1.7.1
     dep_recon = hex 2.5.0
     dep_observer_cli = hex 1.5.3
    diff --git a/scripts/rabbitmq-script-wrapper b/scripts/rabbitmq-script-wrapper
    index 0b5ab37..6a379ce 100644
    --- a/scripts/rabbitmq-script-wrapper
    +++ b/scripts/rabbitmq-script-wrapper
    @@ -16,8 +16,7 @@
     ##
     
     SCRIPT="$(basename "$0")"
    -RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env
    -RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")"
    +RABBITMQ_LOG_BASE=/var/log/rabbitmq
     
     main() {
       ensure_we_are_in_a_readable_dir
    @@ -72,13 +71,6 @@ calling_rabbitmq_plugins() {
     }
     
     exec_rabbitmq_server() {
    -  RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env
    -  # RABBITMQ_SCRIPTS_DIR is used in rabbitmq-env
    -  # shellcheck disable=SC2034
    -  RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")"
    -  # shellcheck source=/dev/null
    -  . "$RABBITMQ_ENV"
    -
       exec /usr/lib/rabbitmq/bin/rabbitmq-server "$@" @STDOUT_STDERR_REDIRECTION@
     }
     
    diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf
    index a881782..fd9a3c4 100755
    --- a/scripts/rabbitmq-server-ha.ocf
    +++ b/scripts/rabbitmq-server-ha.ocf
    @@ -52,6 +52,7 @@ OCF_RESKEY_policy_file_default="/usr/local/sbin/set_rabbitmq_policy"
     OCF_RESKEY_rmq_feature_health_check_default=true
     OCF_RESKEY_rmq_feature_local_list_queues_default=true
     OCF_RESKEY_limit_nofile_default=65535
    +OCF_RESKEY_avoid_using_iptables_default=false
     
     : ${HA_LOGTAG="lrmd"}
     : ${HA_LOGFACILITY="daemon"}
    @@ -78,6 +79,7 @@ OCF_RESKEY_limit_nofile_default=65535
     : ${OCF_RESKEY_rmq_feature_health_check=${OCF_RESKEY_rmq_feature_health_check_default}}
     : ${OCF_RESKEY_rmq_feature_local_list_queues=${OCF_RESKEY_rmq_feature_local_list_queues_default}}
     : ${OCF_RESKEY_limit_nofile=${OCF_RESKEY_limit_nofile_default}}
    +: ${OCF_RESKEY_avoid_using_iptables=${OCF_RESKEY_avoid_using_iptables_default}}
     
     #######################################################################
     
    @@ -357,6 +359,15 @@ Soft and hard limit for NOFILE
     
     
     
    +
    +
    +When set to true the iptables calls to block client access become
    +noops. This is useful when we run inside containers.
    +
    +Disable iptables use entirely
    +
    +
    +
     $EXTENDED_OCF_PARAMS
     
     
    @@ -764,6 +775,10 @@ reset_mnesia() {
     
     block_client_access()
     {
    +    # When OCF_RESKEY_avoid_using_iptables is true iptables calls are noops
    +    if [ "${OCF_RESKEY_avoid_using_iptables}" == 'true' ] ; then
    +        return $OCF_SUCCESS
    +    fi
         # do not add temporary RMQ blocking rule, if it is already exist
         # otherwise, try to add a blocking rule with max of 5 retries
         local tries=5
    @@ -782,6 +797,10 @@ block_client_access()
     
     unblock_client_access()
     {
    +    # When OCF_RESKEY_avoid_using_iptables is true iptables calls are noops
    +    if [ "${OCF_RESKEY_avoid_using_iptables}" == 'true' ] ; then
    +        return
    +    fi
         # remove all temporary RMQ blocking rules, if there are more than one exist
         for i in $(iptables -nvL --wait --line-numbers | awk '/temporary RMQ block/ {print $1}'); do
           iptables --wait -D INPUT -p tcp -m tcp --dport ${OCF_RESKEY_node_port} -m state --state NEW,RELATED,ESTABLISHED \
    -- 
    GitLab
    
    
    From 0c1fc3d91133de57c0406d79b7a2f3d399cde113 Mon Sep 17 00:00:00 2001
    From: Yuriy Vidineev 
    Date: Tue, 14 Jul 2020 02:20:43 -0700
    Subject: [PATCH 5/5] add closes to changelog
    
    ---
     debian/changelog | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/debian/changelog b/debian/changelog
    index d1eea9b..1714b90 100644
    --- a/debian/changelog
    +++ b/debian/changelog
    @@ -1,6 +1,6 @@
     rabbitmq-server (3.8.4-1) UNRELEASED; urgency=high
     
    -  * New upstream version
    +  * New upstream version: 3.8.4. closes: #964038
       * Updating standards version to 4.4.0.
       * d/rules: remove some obsolete comments.
     
    -- 
    GitLab